0Pricing
CI/CD with GitHub Actions & DevOps Pipelines · 강의

저장소 간 워크플로

종속 항목을 관리하고 복잡한 배포를 조정하도록 서로 다른 저장소의 워크플로를 연결하는 방법을 배웁니다.

저장소 간 워크플로은(는) CoddyKit의 무료 CI/CD with GitHub Actions & DevOps Pipelines 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 CI/CD with GitHub Actions & DevOps Pipelines 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. CI/CD with GitHub Actions & DevOps Pipelines 강의에는 총 4개의 강의가 포함되어 있습니다.

저장소 간 워크플로 소개

현대 소프트웨어 개발에서 애플리케이션은 여러 저장소에 나뉘어 있는 여러 구성 요소로 이루어지는 경우가 많습니다. 마이크로서비스, 공유 라이브러리 또는 별도의 배포 구성을 예로 들 수 있습니다.

이처럼 서로 다른 저장소의 워크플로를 조정하면 모듈성과 관심사의 분리를 높일 수 있습니다. 이 단원에서는 GitHub Actions로 이를 구현하는 방법을 살펴봅니다.

저장소 간 오케스트레이션이 필요한 이유

기존에는 GitHub Actions 워크플로가 하나의 저장소로 범위가 제한되었습니다. 하지만 다음과 같은 작업이 필요하다면 어떨까요?

  • 한 저장소에서 아티팩트를 빌드하고 다른 저장소에서 배포를 트리거해야 하는 경우
  • 공유 구성 저장소에서 여러 서비스 저장소의 업데이트를 트리거해야 하는 경우
  • 중앙 저장소에서 관리하는 보안 정책을 다른 모든 저장소에 적용해야 하는 경우

저장소 간 워크플로가 이러한 복잡한 시나리오에 대한 해결책을 제공합니다.

저장소 연결: `repository_dispatch`

GitHub Actions는 repository_dispatch라는 특수 이벤트 유형을 제공합니다. 이는 GitHub 저장소를 위한 사용자 지정 웹훅처럼 작동합니다.

  • 한 워크플로('송신자')가 GitHub에 API 요청을 보냅니다.
  • 다른 저장소의 워크플로('수신자')가 이 특정 이벤트를 수신 대기합니다.

이를 통해 서로 다른 저장소의 워크플로를 프로그래밍 방식으로 트리거할 수 있습니다.

수신자 워크플로 설정

repository_dispatch 이벤트를 수신하려면 대상 저장소의 워크플로가 해당 이벤트를 수신 대기하도록 구성되어야 합니다. on: 키워드를 사용하여 설정합니다.

repo-B의 워크플로는 다음과 같이 작성할 수 있습니다.

name: Receive Dispatch Event

on:
  repository_dispatch:
    types: [my-custom-event]

jobs:
  process-event:
    runs-on: ubuntu-latest
    steps:
      - name: Log event payload
        run: |
          echo "Event type: ${{ github.event.action }}"
          echo "Payload: ${{ toJSON(github.event.client_payload) }}"

수신자 구성 이해하기

앞의 예시에서 다음을 확인할 수 있습니다.

  • on: repository_dispatch:는 GitHub에 이 이벤트를 수신 대기하도록 지시합니다.
  • types: [my-custom-event]는 전달된 이벤트의 유형이 my-custom-event일 때만 이 워크플로가 실행되도록 지정합니다. 여러 유형을 정의할 수 있습니다.
  • github.event.action에는 이벤트 유형(예: my-custom-event)이 들어 있습니다.
  • github.event.client_payload에는 디스패치와 함께 전송된 사용자 지정 데이터가 저장됩니다.

이벤트 트리거하기: 다른 저장소에서 보내기

repository_dispatch 이벤트를 트리거하려면 GitHub API에 HTTP POST 요청을 보내야 합니다. 다른 GitHub 액션 워크플로 또는 스크립트 내에서 curl이나 GitHub CLI(gh cli)를 사용하여 요청을 보낼 수 있습니다.

주요 요구 사항:

  • 대상 저장소의 소유자와 이름
  • 수신 워크플로가 수신하도록 설정된 이벤트 type
  • 사용자 지정 데이터를 위한 client_payload
  • repo 범위가 있는 GitHub 개인 액세스 토큰(PAT)

예시: `gh cli`로 디스패치하기

다음은 repo-A에서 repo-B로 이벤트를 디스패치하는 워크플로입니다. 토큰에 보안 비밀을 사용하고 client_payload를 전달하는 방식에 주목하시기 바랍니다.

name: Trigger Deploy Workflow

on:
  push:
    branches: [main]

jobs:
  dispatch:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Install GitHub CLI
        run: sudo apt-get update && sudo apt-get install gh -y

      - name: Dispatch event to repo-B
        env:
          GH_TOKEN: ${{ secrets.CROSS_REPO_PAT }}
        run: |
          gh api \
            --method POST \
            -H "Accept: application/vnd.github.v3+json" \
            /repos/YOUR_ORG/repo-B/dispatches \
            -f event_type='my-custom-event' \
            -f client_payload='{"ref":"${{ github.ref }}", "sha":"${{ github.sha }}"}'

저장소 간 액세스 보안

워크플로에 기본적으로 제공되는 GITHUB_TOKEN은 해당 워크플로가 실행되는 저장소로 제한됩니다. *다른* 저장소에서 이벤트를 트리거하려면 더 광범위한 권한이 있는 토큰이 필요합니다.

  • repo 범위가 있는 개인 액세스 토큰(PAT)을 사용합니다.
  • 이 PAT를 트리거하는 저장소에 저장소 보안 비밀(예: CROSS_REPO_PAT)로 저장합니다.
  • PAT를 워크플로 파일에 직접 하드코딩하지 마십시오.

`client_payload`로 사용자 지정 데이터 전달하기

client_payload는 이벤트를 디스패치할 때 포함할 수 있는 JSON 객체입니다. 이를 사용하면 트리거 워크플로에서 수신 워크플로로 컨텍스트나 데이터를 전달할 수 있으므로 매우 중요합니다.

전달할 수 있는 데이터의 예:

  • 빌드를 트리거한 커밋 SHA 또는 브랜치 이름
  • 환경 대상(예: "스테이징", "프로덕션")
  • 배포할 아티팩트의 버전 번호

client_payload는 워크플로 로그에 표시되므로 민감한 정보는 포함하지 마십시오.

저장소 간 워크플로 빠른 점검

서로 다른 GitHub 저장소 간에 워크플로를 오케스트레이션하는 방법을 배웠습니다. 이제 주요 구성 요소에 대한 이해도를 확인해 보겠습니다.

복습: 저장소 간 오케스트레이션

repository_dispatch를 사용하여 저장소 간 워크플로를 구현하는 방법을 성공적으로 배웠습니다!

  • 이유: 여러 저장소에 걸친 종속성을 관리하고 복잡한 배포를 오케스트레이션하기 위해 사용합니다.
  • 방법: '송신자' 워크플로가 GitHub에 API 호출을 보내 다른 저장소의 '수신자' 워크플로를 트리거합니다.
  • 핵심: repository_dispatch 이벤트 유형과 수신 워크플로의 일치하는 types입니다.
  • 데이터: client_payload를 사용하여 워크플로 간에 민감하지 않은 정보를 전달합니다.
  • 보안: 저장소 간 액세스를 위해 항상 repo 범위의 PAT를 보안 비밀로 저장하여 사용합니다.

이 강력한 기능을 사용하면 매우 유연하고 결합도가 낮은 CI/CD 파이프라인을 구축할 수 있습니다.

자주 묻는 질문

“저장소 간 워크플로” 강의는 무료인가요?

네 — “저장소 간 워크플로” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 CI/CD with GitHub Actions & DevOps Pipelines 강의 전체를 잠금 해제할 수 있습니다. CI/CD with GitHub Actions & DevOps Pipelines 강의에는 총 4개의 강의가 포함되어 있습니다.

“저장소 간 워크플로”에서 뭘 배우나요?

종속 항목을 관리하고 복잡한 배포를 조정하도록 서로 다른 저장소의 워크플로를 연결하는 방법을 배웁니다. 브라우저에서 직접 실행하는 실습 코드로 CI/CD with GitHub Actions & DevOps Pipelines을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

CI/CD with GitHub Actions & DevOps Pipelines을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 CI/CD with GitHub Actions & DevOps Pipelines은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“저장소 간 워크플로” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 CI/CD with GitHub Actions & DevOps Pipelines 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 CI/CD with GitHub Actions & DevOps Pipelines 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 모노레포를 위한 CI/CD
  2. 저장소 간 워크플로
  3. 중앙 집중식 워크플로 관리
  4. 경로 필터링 및 선택적 빌드
← CI/CD with GitHub Actions & DevOps Pipelines(으)로 돌아가기