워크플로 구성 재사용하기

워크플로 구성 재사용하기

워크플로를 만들 때 중복을 피하는 방법에 대해 함께 알아볼게요.

출처: Reusing workflow configurations

본문

재사용 가능한 워크플로(Reusable workflows)

워크플로 사이에서 복사·붙여넣기하는 대신 워크플로를 재사용 가능하게 만들 수 있어요. 그러면 여러분과 재사용 워크플로에 접근 권한이 있는 사람은 누구나 다른 워크플로에서 그 재사용 워크플로를 호출할 수 있어요.

재사용 워크플로는 에이전틱 워크플로(agentic workflows)를 보완하기도 해요. 에이전틱 워크플로는 로직을 중복하는 대신 승인된 결정적인 재사용 워크플로를 호출할 수 있어요. 자세한 내용은 GitHub Agentic Workflows 만들기를 참고하세요.

워크플로를 재사용하면 중복을 피할 수 있어요. 이는 워크플로를 유지 관리하기 더 쉽게 만들고, 액션에서 하는 것처럼 다른 사람의 작업 위에 쌓아서 새 워크플로를 더 빨리 만들 수 있게 해줘요. 워크플로 재사용은 잘 설계되고 테스트되었으며 효과가 입증된 워크플로를 사용하도록 도와주므로 모범 사례를 촉진하기도 해요. 조직은 중앙에서 유지 관리할 수 있는 재사용 워크플로 라이브러리를 구축할 수 있어요.

아래 다이어그램은 재사용 워크플로를 사용하는 진행 중인 워크플로 실행을 보여줘요.

  • 다이어그램 왼쪽의 세 개의 빌드 작업이 각각 성공적으로 완료된 후, "Deploy"라는 의존 작업이 실행돼요.
  • "Deploy" 작업은 "Staging", "Review", "Production" 세 개의 작업을 포함하는 재사용 워크플로를 호출해요.
  • "Production" 배포 작업은 "Staging" 작업이 성공적으로 완료된 후에만 실행돼요.
  • 작업이 환경을 대상으로 하면 워크플로 실행에는 작업의 단계 수를 보여주는 진행 막대가 표시돼요. 아래 다이어그램에서 "Production" 작업은 8개 단계를 포함하며, 현재 6번째 단계가 처리되고 있어요.
  • 재사용 워크플로를 사용해 배포 작업을 실행하면 워크플로에서 코드를 중복하지 않고 각 빌드에 대해 그 작업들을 실행할 수 있어요.

재사용 워크플로를 호출하는 워크플로 다이어그램.

다른 워크플로를 사용하는 워크플로를 "호출자(caller)" 워크플로라고 해요. 재사용 워크플로는 "호출된(called)" 워크플로예요. 하나의 호출자 워크플로는 여러 호출된 워크플로를 사용할 수 있어요. 각 호출된 워크플로는 단일 줄로 참조돼요. 그 결과 호출자 워크플로 파일은 몇 줄의 YAML만 포함할 수 있지만 실행되면 많은 수의 작업을 수행할 수 있어요. 워크플로를 재사용하면 호출된 워크플로 전체가 호출자 워크플로의 일부인 것처럼 사용돼요.

다른 리포지토리에서 워크플로를 재사용하면 호출된 워크플로의 모든 액션이 호출자 워크플로의 일부인 것처럼 실행돼요. 예를 들어 호출된 워크플로가 actions/checkout을 사용하면 그 액션은 호출된 워크플로가 아닌 호출자 워크플로를 호스팅하는 리포지토리의 내용을 체크아웃해요.

워크플로를 포함하는 리포지토리의 의존성 그래프에서 GitHub Actions 워크플로에서 참조하는 재사용 워크플로를 의존성으로 볼 수 있어요. 자세한 내용은 "의존성 그래프 소개"를 참고하세요.

재사용 가능한 워크플로와 복합 액션 비교

재사용 워크플로와 복합 액션 모두 워크플로 콘텐츠 중복을 피하는 데 도움이 돼요. 재사용 워크플로는 여러 작업과 단계가 있는 워크플로 전체를 재사용할 수 있게 하는 반면, 복합 액션은 다른 액션처럼 작업 단계 안에서 실행할 수 있는 여러 단계를 결합해요.

두 솔루션의 몇 가지 측면을 비교해 볼게요:

  • 워크플로 작업(Workflow jobs) - 복합 액션은 호출자 워크플로 안에서 단일 단계로 실행되는 일련의 단계를 포함해요. 재사용 워크플로와 달리 작업을 포함할 수 없어요.
  • 로깅(Logging) - 복합 액션이 실행되면 로그에는 복합 액션을 실행한 호출자 워크플로의 단계만 표시되고 복합 액션 안의 개별 단계는 표시되지 않아요. 재사용 워크플로에서는 모든 작업과 단계가 개별적으로 기록돼요.
  • 러너 지정(Specifying runners) - 재사용 워크플로는 하나 이상의 작업을 포함해요. 모든 워크플로 작업과 마찬가지로 재사용 워크플로의 작업은 작업이 실행될 머신 유형을 지정해요. 따라서 단계를 호출 워크플로 작업에 선택된 머신과 다른 머신 유형에서 실행해야 한다면 복합 액션이 아니라 재사용 워크플로를 사용해야 해요.
  • 단계에 출력 전달(Passing output to steps) - 복합 액션은 워크플로 작업 안의 단계로 실행되며, 복합 액션을 실행하는 단계 앞뒤에 여러 단계를 둘 수 있어요. 재사용 워크플로는 작업 단계 안에서가 아니라 작업 안에서 직접 호출돼요. 재사용 워크플로를 호출한 후 작업에 단계를 추가할 수는 없지만, 재사용 워크플로는 이제 호출자 워크플로의 후속 작업에서 참조할 수 있는 출력을 지원해요.

재사용 워크플로와 복합 액션의 주요 차이점

재사용 워크플로 복합 액션
표준 워크플로 파일과 매우 유사한 YAML 파일 워크플로 단계 묶음을 포함하는 액션
각 재사용 워크플로는 리포지토리 .github/workflows 디렉토리의 단일 파일 각 복합 액션은 action.yml 파일과 선택적으로 기타 파일을 포함하는 별도의 리포지토리 또는 디렉토리
특정 YAML 파일을 참조해 호출 액션이 정의된 리포지토리 또는 디렉토리를 참조해 호출
단계가 아닌 작업 안에서 직접 호출 작업 안의 단계로 실행
여러 작업을 포함할 수 있음 작업을 포함하지 않음
각 단계가 실시간으로 기록됨 여러 단계를 포함하더라도 하나의 단계로 기록됨
최대 10단계의 워크플로를 연결할 수 있음 하나의 워크플로에 최대 10개의 복합 액션까지 중첩할 수 있음
비밀을 사용할 수 있음 비밀을 사용할 수 없음
마켓플레이스에 게시할 수 없음 마켓플레이스에 게시할 수 있음

워크플로 템플릿

워크플로 템플릿을 사용하면 워크플로를 만들 권한이 있는 조직의 모든 사람이 더 빠르고 쉽게 워크플로를 만들 수 있어요. 사람들이 새 워크플로를 만들 때 워크플로 템플릿을 선택하면 워크플로 작성 작업의 일부 또는 전체가 대신 처리돼요. 워크플로 템플릿 안에서 재사용 워크플로를 참조할 수도 있어서 사람들이 중앙에서 관리되는 워크플로 코드를 재사용하는 이점을 쉽게 누릴 수 있게 해줘요.

재사용 워크플로를 참조할 때 커밋 SHA를 사용하면 그 워크플로를 재사용하는 모든 사람이 항상 같은 YAML 코드를 사용하게 할 수 있어요. 하지만 태그나 분기로 재사용 워크플로를 참조한다면 그 워크플로 버전을 신뢰할 수 있는지 확인해야 해요. 자세한 내용은 안전한 사용 참조를 참고하세요.

GitHub은 다양한 언어와 도구로 워크플로 템플릿을 제공해요. 리포지토리에서 워크플로를 설정하면 GitHub이 리포지토리의 코드를 분석하고 리포지토리의 언어와 프레임워크를 기반으로 워크플로를 추천해요. 예를 들어 Node.js를 사용한다면 GitHub이 Node.js 패키지를 설치하고 테스트를 실행하는 워크플로 템플릿 파일을 제안할 거예요. 검색 및 필터를 사용해 관련 워크플로 템플릿을 찾을 수 있어요.

GitHub은 다음과 같은 상위 수준 카테고리에 대해 바로 사용할 수 있는 워크플로 템플릿을 제공해요:

  • 배포(Deployment, CD). 자세한 내용은 지속적 배포를 참고하세요.
  • 보안(Security). 자세한 내용은 코드 스캐닝 고급 설정 구성하기를 참고하세요.
  • 지속적 통합(Continuous Integration, CI). 자세한 내용은 지속적 통합을 참고하세요.
  • 자동화(Automation). 자동화 워크플로 템플릿은 풀 리퀘스트를 트라이징하고 풀 리퀘스트에서 수정된 경로를 기반으로 라벨을 적용하거나, 리포지토리에 처음 기여하는 사용자에게 인사하는 것 같은 워크플로 자동화 솔루션을 제공해요.

이 워크플로를 사용자 지정 워크플로를 만드는 시작점으로 사용하거나 그대로 사용할 수 있어요. actions/starter-workflows 리포지토리에서 워크플로 템플릿의 전체 목록을 찾아볼 수 있어요.

자세한 내용은 조직용 워크플로 템플릿 만들기를 참고하세요.

조직은 공유 액션과 재사용 워크플로와 함께 승인된 에이전틱 워크플로 템플릿도 공유하고 관리할 수 있어요. GitHub Agentic Workflows로 템플릿을 만들려면 GitHub Agentic Workflows 만들기를 참고하세요.

YAML 앵커와 별칭

YAML 앵커와 별칭을 사용해 워크플로의 반복을 줄일 수 있어요. 앵커(anchor, &로 표시)는 재사용하려는 콘텐츠를 식별하고, 별칭(alias, *로 표시)은 다른 위치에서 그 콘텐츠를 반복해요. 앵커는 이름 있는 템플릿을 만들고 별칭은 그 템플릿을 사용하는 것으로 생각하면 돼요. 공통 구성을 공유하는 작업이나 단계가 있을 때 특히 유용해요.

참조 정보와 예시는 워크플로 구성 재사용하기를 참고하세요.

다음 단계

워크플로 재사용을 시작하려면 워크플로 재사용하기를 참고하세요.

워크플로 재사용의 복잡한 내용에 대한 정보는 워크플로 구성 재사용하기를 참고하세요.

더 알아보기 (Learn more)