저장소 간 워크플로
종속 항목을 관리하고 복잡한 배포를 조정하도록 서로 다른 저장소의 워크플로를 연결하는 방법을 배웁니다.
저장소 간 워크플로은(는) 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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.