Skip to main content

Enterprise Server 3.20 은(는) 현재 릴리스 후보로 제공됩니다.

워크플로 재사용

기존 워크플로를 다시 사용하여 워크플로를 만들 때 중복을 방지하는 방법을 알아봅니다.

재사용 가능한 워크플로 만들기

재사용 가능한 워크플로는 YAML 형식의 파일로, 다른 워크플로 파일과 매우 유사합니다. 다른 워크플로 파일과 마찬가지로 리포지토리의 .github/workflows 디렉터리에서 재사용 가능한 워크플로를 찾습니다. workflows 디렉터리의 하위 디렉터리가 지원되지 않습니다.

특정 재사용 가능한 워크플로만 실행할 수 있는 자체 호스팅 실행기 그룹을 만들어 배포를 표준화할 수 있습니다. 자세한 내용은 그룹을 사용하여 자체 호스트형 실행기에 대한 액세스 관리을(를) 참조하세요.

워크플로를 다시 사용하려면 다음 on 값이 workflow_call을 포함해야 합니다.

on:
  workflow_call:

재사용 가능한 워크플로에서 입력 및 비밀 사용

호출자 워크플로에서 전달된 다음 호출된 워크플로 내에서 사용할 수 있는 입력 및 비밀을 정의할 수 있습니다. 재사용 가능한 워크플로에서 입력 또는 비밀을 사용하는 세 가지 단계가 있습니다.

  1. 재사용 가능한 워크플로에서 inputssecrets 키워드를 사용하여 호출자 워크플로에서 전달될 입력 또는 비밀을 정의합니다.

    on:
      workflow_call:
        inputs:
          config-path:
            required: true
            type: string
        secrets:
          personal_access_token:
            required: true
    

입력 및 시크릿 정의 구문에 대한 자세한 내용은 on.workflow_call.inputson.workflow_call.secrets을(를) 참조하세요.

  1. 다시 사용 가능한 워크플로에서 이전 단계에서 on 키에 정의한 입력 또는 비밀을 참조합니다.

    참고

    호출 워크플로에서 secrets: inherit을(를) 사용해 시크릿을 상속하는 경우 on 키에 명시적으로 정의되어 있지 않더라도 해당 시크릿을 참조할 수 있습니다. 자세한 내용은 GitHub Actions에 대한 워크플로 구문을(를) 참조하세요.

    jobs:
      reusable_workflow_job:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/labeler@v6
          with:
            repo-token: ${{ secrets.personal_access_token }}
            configuration-path: ${{ inputs.config-path }}
    

    위 예제에서 personal_access_token은(는) 리포지토리 또는 조직 수준에서 정의된 시크릿입니다.

    경고

           `on.workflow_call`에서 `environment` 키워드를 지원하지 않으므로 호출 워크플로에서 환경 시크릿을 전달할 수 없습니다. 재사용 가능한 워크플로의 작업 수준에 `environment`을(를) 포함하면 호출 워크플로에서 전달된 시크릿이 아니라 환경 시크릿이 사용됩니다. 자세한 내용은 [AUTOTITLE](/actions/deployment/targeting-different-environments/managing-environments-for-deployment#environment-secrets) 및 [AUTOTITLE](/actions/writing-workflows/workflow-syntax-for-github-actions#onworkflow_call)을(를) 참조하세요.
    
  2. 호출자 워크플로에서 입력 또는 비밀을 전달합니다.

    데이터 재사용 가능 작업에 입력 매개변수를 전달 %}

재사용 가능한 워크플로 예제

이 재사용 가능한 workflow-B.yml라는 워크플로 파일(뒷부분의 예제 호출자 워크플로에서 참조)은 호출자 워크플로에서 입력 문자열과 비밀을 가져와서 작업에서 사용합니다.

YAML
name: Reusable workflow example

on:
  workflow_call:
    inputs:
      config-path:
        required: true
        type: string
    secrets:
      token:
        required: true

jobs:
  triage:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/labeler@v6
      with:
        repo-token: ${{ secrets.token }}
        configuration-path: ${{ inputs.config-path }}

재사용 가능한 워크플로 호출

          `uses` 키워드를 사용하여 재사용 가능한 워크플로를 호출합니다. 워크플로 내에서 작업을 사용하는 경우와 달리 작업 단계 내에서가 아니라 작업 내에서 직접 재사용 가능한 워크플로를 호출합니다.

jobs.<job_id>.uses

다음 구문 중 하나를 사용하여 재사용 가능한 워크플로 파일을 참조하세요:

  • 퍼블릭, 내부, 프라이빗 리포지토리에서 재사용 가능한 워크플로의 경우 {owner}/{repo}/.github/workflows/{filename}@{ref}입니다.
  • 동일한 리포지토리에서 다시 사용할 수 있는 워크플로의 경우 ./.github/workflows/{filename}입니다.

첫 번째 선택에서 {ref}은(는) SHA, 릴리스 태그 또는 분기 이름을 사용할 수 있습니다. 릴리스 태그와 분기의 이름이 같으면 릴리스 태그가 분기 이름보다 우선합니다. 안정성과 보안을 위해서는 커밋 SHA를 사용하는 것이 가장 안전합니다. 자세한 내용은 안전 사용 참조을(를) 참조하세요.

두 번째 구문 옵션({owner}/{repo}, @{ref} 없음)을 사용하는 경우 호출된 워크플로는 호출자 워크플로와 동일한 커밋에서 가져옵니다. refs/heads, refs/tags 등의 참조 접두사는 사용할 수 없습니다. 이 키워드에는 컨텍스트 또는 식을 사용할 수 없습니다.

별도의 작업에서 각각을 참조하여 여러 워크플로를 호출할 수 있습니다.

jobs:
  call-workflow-1-in-local-repo:
    uses: octo-org/this-repo/.github/workflows/workflow-1.yml@172239021f7ba04fe7327647b213799853a9eb89
  call-workflow-2-in-local-repo:
    uses: ./.github/workflows/workflow-2.yml
  call-workflow-in-another-repo:
    uses: octo-org/another-repo/.github/workflows/workflow.yml@v1

호출자 워크플로 예제

이 워크플로 파일은 두 개의 워크플로 파일을 호출합니다. 이 중 두 번째인 (workflow-B.yml에 나타난) 에 입력(config-path) 및 비밀(token)을 전달합니다.

YAML
name: Call a reusable workflow

on:
  pull_request:
    branches:
      - main

jobs:
  call-workflow:
    uses: octo-org/example-repo/.github/workflows/workflow-A.yml@v1

  call-workflow-passing-data:
    permissions:
      contents: read
      pull-requests: write
    uses: octo-org/example-repo/.github/workflows/workflow-B.yml@main
    with:
      config-path: .github/labeler.yml
    secrets:
      token: ${{ secrets.GITHUB_TOKEN }}

재사용 가능한 워크플로에서 입력 및 비밀 전달

데이터 재사용 가능 작업에 입력 매개변수를 전달 %}

재사용 가능한 워크플로에 행렬 전략 사용

행렬 전략을 사용하는 작업은 재사용 가능한 워크플로를 호출할 수 있습니다.

매트릭스 전략을 사용하면 단일 작업 정의에서 변수를 사용하여 변수의 조합을 기반으로 하는 여러 작업 실행을 자동으로 만들 수 있습니다. 예를 들어 행렬 전략을 사용하여 재사용 가능한 워크플로에 다른 입력을 전달할 수 있습니다. 행렬에 대한 자세한 내용은 워크플로에서 작업 변형 실행을(를) 참조하세요.

다음 예제 작업은 재사용 가능한 워크플로를 호출하고, 변수 target[dev, stage, prod] 값을 정의하여 행렬 컨텍스트를 참조합니다. 이 작업은 변수의 각 값마다 하나씩 총 세 개의 작업을 실행합니다.

YAML
jobs:
  ReusableMatrixJobForDeployment:
    strategy:
      matrix:
        target: [dev, stage, prod]
    uses: octocat/octo-repo/.github/workflows/deployment.yml@main
    with:
      target: ${{ matrix.target }}

재사용 가능한 워크플로 중첩

최대

GitHub REST API를 사용하여 재사용 가능한 워크플로가 사용되는 방식을 모니터링할 수 있습니다. prepared_workflow_job 감사 로그 작업은 워크플로 작업이 시작될 때 트리거됩니다. 기록된 데이터에는 다음이 포함됩니다. * repo - 워크플로 작업이 위치한 조직/리포지토리. 다른 워크플로를 호출하는 작업의 경우 호출자 워크플로의 조직/리포지토리입니다. * @timestamp - 작업이 시작된 날짜 및 시간(Unix epoch 형식). * job_name - 실행된 작업의 이름. * calling_workflow_refs - 이 워크플로 작업에 관련된 모든 호출자 워크플로의 파일 경로 배열. 배열의 항목은 호출된 순서의 역순으로 배치됩니다. 예를 들어 워크플로 체인이 A > B > C인 경우 워크플로 C의 작업 로그를 볼 때 배열은 ["octo-org/octo-repo/.github/workflows/B.yml", "octo-org/octo-repo/.github/workflows/A.yml"]입니다. * calling_workflow_shas - 이 워크플로 작업에 관련된 모든 호출자 워크플로의 SHA 배열. 이 배열에는 calling_workflow_refs 배열과 동일한 개수의 항목이 동일한 순서로 포함됩니다. * job_workflow_ref - 사용된 워크플로 파일({owner}/{repo}/{path}/{filename}@{ref} 형식). 다른 워크플로를 호출하는 작업의 경우 호출된 워크플로를 식별합니다.

자세한 내용은 조직의 감사 로그 검토을(를) 참조하세요.

참고

          `prepared_workflow_job`에 대한 감사 데이터는 REST API를 통해서만 볼 수 있습니다. GitHub 웹 인터페이스에 표시되지 않으며 JSON/CSV 내보낸 감사 데이터에 포함되어 있지 않습니다.

다음 단계

워크플로 재사용의 세부 동작에 대한 정보를 확인하려면 워크플로 구성 재사용을(를) 참조하세요.