재사용 가능한 워크플로 만들기
재사용 가능한 워크플로는 YAML 형식의 파일로, 다른 워크플로 파일과 매우 유사합니다. 다른 워크플로 파일과 마찬가지로 리포지토리의 .github/workflows 디렉터리에서 재사용 가능한 워크플로를 찾습니다.
workflows 디렉터리의 하위 디렉터리가 지원되지 않습니다.
특정 재사용 가능한 워크플로만 실행할 수 있는 자체 호스팅 실행기 그룹을 만들어 배포를 표준화할 수 있습니다. 자세한 내용은 그룹을 사용하여 자체 호스트형 실행기에 대한 액세스 관리을(를) 참조하세요.
워크플로를 다시 사용하려면 다음 on 값이 workflow_call을 포함해야 합니다.
on:
workflow_call:
재사용 가능한 워크플로에서 입력 및 비밀 사용
호출자 워크플로에서 전달된 다음 호출된 워크플로 내에서 사용할 수 있는 입력 및 비밀을 정의할 수 있습니다. 재사용 가능한 워크플로에서 입력 또는 비밀을 사용하는 세 가지 단계가 있습니다.
-
재사용 가능한 워크플로에서
inputs및secrets키워드를 사용하여 호출자 워크플로에서 전달될 입력 또는 비밀을 정의합니다.on: workflow_call: inputs: config-path: required: true type: string secrets: personal_access_token: required: true
입력 및 시크릿 정의 구문에 대한 자세한 내용은 on.workflow_call.inputs 및 on.workflow_call.secrets을(를) 참조하세요.
-
다시 사용 가능한 워크플로에서 이전 단계에서
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)을(를) 참조하세요. -
호출자 워크플로에서 입력 또는 비밀을 전달합니다.
데이터 재사용 가능 작업에 입력 매개변수를 전달 %}
재사용 가능한 워크플로 예제
이 재사용 가능한 workflow-B.yml라는 워크플로 파일(뒷부분의 예제 호출자 워크플로에서 참조)은 호출자 워크플로에서 입력 문자열과 비밀을 가져와서 작업에서 사용합니다.
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 }}
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` 키워드를 사용하여 재사용 가능한 워크플로를 호출합니다. 워크플로 내에서 작업을 사용하는 경우와 달리 작업 단계 내에서가 아니라 작업 내에서 직접 재사용 가능한 워크플로를 호출합니다.
다음 구문 중 하나를 사용하여 재사용 가능한 워크플로 파일을 참조하세요:
- 퍼블릭, 내부, 프라이빗 리포지토리에서 재사용 가능한 워크플로의 경우
{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)을 전달합니다.
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 }}
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] 값을 정의하여 행렬 컨텍스트를 참조합니다. 이 작업은 변수의 각 값마다 하나씩 총 세 개의 작업을 실행합니다.
jobs:
ReusableMatrixJobForDeployment:
strategy:
matrix:
target: [dev, stage, prod]
uses: octocat/octo-repo/.github/workflows/deployment.yml@main
with:
target: ${{ matrix.target }}
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 내보낸 감사 데이터에 포함되어 있지 않습니다.
다음 단계
워크플로 재사용의 세부 동작에 대한 정보를 확인하려면 워크플로 구성 재사용을(를) 참조하세요.