{"meta":{"title":"워크플로 구성 재사용","intro":"기존 워크플로를 다시 사용하고 YAML 앵커 및 별칭을 사용하여 워크플로를.","product":"GitHub Actions","breadcrumbs":[{"href":"/ko/enterprise-server@3.17/actions","title":"GitHub Actions"},{"href":"/ko/enterprise-server@3.17/actions/reference","title":"참조"},{"href":"/ko/enterprise-server@3.17/actions/reference/workflows-and-actions","title":"워크플로 및 작업"},{"href":"/ko/enterprise-server@3.17/actions/reference/workflows-and-actions/reusing-workflow-configurations","title":"워크플로 구성 재사용"}],"documentType":"article"},"body":"# 워크플로 구성 재사용\n\n기존 워크플로를 다시 사용하고 YAML 앵커 및 별칭을 사용하여 워크플로를.\n\n## 재사용 가능한 워크플로\n\n이 문서에서는 액세스 규칙, 제한 사항, 지원되는 키워드 및 실행기 동작을 포함하여 재사용 가능한 워크플로 및 워크플로 템플릿에 대한 참조 정보를 제공합니다.\n\n### 재사용 가능한 워크플로에 대한 액세스\n\n재사용 가능한 워크플로는 다음 중 하나라도 해당하면 다른 워크플로에서 사용할 수 있습니다.\n\n* 두 워크플로가 모두 동일한 리포지토리에 있습니다.\n\n* 호출된 워크플로는 .의 공용 리포지 토리에 GitHub Enterprise Server저장됩니다.\n\n  에 정의된 GitHub.com재사용 가능한 워크플로는 직접 사용할 수 없습니다. 대신 재사용 가능한 워크플로 GitHub Enterprise Server 인스턴스의 복사본을 저장하고 해당 경로에서 워크플로를 호출합니다.\n\n* 호출된 워크플로는 내부 리포지토리에 저장되며 해당 리포지토리에 대한 설정을 통해 액세스할 수 있습니다. 자세한 내용은 [엔터프라이즈와 작업 및 워크플로 공유](/ko/enterprise-server@3.17/actions/how-tos/reuse-automations/share-with-your-enterprise)을 참조하세요.\n\n* 호출되는 워크플로가 비공개 리포지토리에 저장되어 있으며, 해당 리포지토리의 설정에서 접근이 허용되어 있습니다. 자세한 내용은 을 참조 [](/ko/enterprise-server@3.17/actions/how-tos/reuse-automations/share-with-your-enterprise) 하세요.\n\n다음 표는 호스트 리포지토리의 가시성에 따라 호출 워크플로에서 재사용 가능한 워크플로에 접근할 수 있는지를 보여줍니다.\n\n| 호출자 리포지토리             | 액세스 가능한 워크플로 리포지토리 |\n| --------------------- | ------------------ |\n| `private`             |                    |\n| `private`             |                    |\n| , `internal`및`public` |                    |\n|                       |                    |\n| `internal`            |                    |\n| `internal` 및 `public` |                    |\n|                       |                    |\n| `public`              | `public`           |\n\n호출자 리포지토리의 Actions 설정 페이지에서 **작업 권한**이 작업 및 재사용 가능한 워크플로 사용을 허용하도록 구성되어 있어야 합니다. 자세한 내용은 [리포지토리에 대한 GitHub Actions 설정 관리](/ko/enterprise-server@3.17/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#allowing-select-actions-and-reusable-workflows-to-run)를 참조하세요.\n\n내부 또는 프라이빗 리포지토리의 경우 호출된 워크플로 리포지토리의 작업 설정 페이지에서 **액세스** 정책을 명시적으로 구성하여 호출자 워크플로가 포함된 리포지토리의 액세스를 허용해야 합니다. [리포지토리에 대한 GitHub Actions 설정 관리](/ko/enterprise-server@3.17/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#allowing-access-to-components-in-a-private-repository)을 참조하세요.\n\n> \\[!NOTE]\n> 보안을 강화하기 위해 GitHub Actions는 작업이나 재사용할 수 있는 워크플로의 리디렉션을 지원하지 않습니다. 즉, 소유자, 작업 리포지토리의 이름, 또는 작업 이름이 변경되면, 이전 이름으로 해당 작업을 사용하는 워크플로가 작동하지 않습니다.\n\n### 재사용 가능한 워크플로의 제한 사항\n\n* 최대 10개의 수준의 워크플로를 연결할 수 있습니다. 자세한 내용은 [재사용 가능한 워크플로 중첩](/ko/enterprise-server@3.17/actions/how-tos/reuse-automations/reuse-workflows#nesting-reusable-workflows)을 참조하세요.\n\n* 단일 워크플로 파일에서 최대 개의 고유한 재사용 가능한 워크플로를 호출할 수 있습니다. 이 제한에는 최상위 호출자 워크플로 파일에서 시작해 호출될 수 있는 모든 중첩된 재사용 가능한 워크플로 트리가 포함됩니다.\n\n  예시: *top-level-caller-workflow\\.yml* → *called-workflow-1.yml* → \\_called-workflow-2.yml\\_는 2개의 사용 가능한 워크플로로 계산됩니다.\n\n* 호출자 워크플로의 워크플로 수준에서 정의된 `env` 컨텍스트에서 설정된 환경 변수는 호출된 워크플로로 전파되지 않습니다. 자세한 내용은 [변수에 정보 저장](/ko/enterprise-server@3.17/actions/how-tos/write-workflows/choose-what-workflows-do/use-variables) 및 [문맥 참조](/ko/enterprise-server@3.17/actions/reference/workflows-and-actions/contexts#env-context)을 참조하세요.\n\n* 마찬가지로 호출된 워크플로에서 정의된 `env` 컨텍스트에 설정된 환경 변수는 호출자 워크플로의 `env` 컨텍스트에서는 접근할 수 없습니다. 대신 재사용 가능한 워크플로의 출력을 사용해야 합니다 자세한 내용은 [재사용 가능한 워크플로의 출력 사용](/ko/enterprise-server@3.17/actions/how-tos/reuse-automations/reuse-workflows#using-outputs-from-a-reusable-workflow)을 참조하세요.\n\n* 여러 워크플로에서 변수를 재사용하려면 조직, 리포지토리 또는 환경 수준에서 변수를 설정하고 `vars` 컨텍스트를 사용해 참조하세요. 자세한 내용은 [변수에 정보 저장](/ko/enterprise-server@3.17/actions/how-tos/write-workflows/choose-what-workflows-do/use-variables) 및 [문맥 참조](/ko/enterprise-server@3.17/actions/reference/workflows-and-actions/contexts#vars-context)을 참조하세요.\n\n* 재사용 가능한 워크플로는 작업 단계 내에서가 아니라 작업 내에서 직접 호출됩니다. 따라서 `GITHUB_ENV`을 사용해 호출자 워크플로의 작업 단계로 값을 전달할 수는 없습니다.\n\n### 재사용 가능한 워크플로를 호출하는 작업에 대해 지원되는 키워드\n\n재사용 가능한 워크플로를 호출하는 경우 호출이 포함된 작업에서 다음 키워드만 사용할 수 있습니다.\n\n* [`jobs.<job_id>.name`](/ko/enterprise-server@3.17/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idname)\n* [`jobs.<job_id>.uses`](/ko/enterprise-server@3.17/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_iduses)\n* [`jobs.<job_id>.with`](/ko/enterprise-server@3.17/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idwith)\n* [`jobs.<job_id>.with.<input_id>`](/ko/enterprise-server@3.17/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idwithinput_id)\n* [`jobs.<job_id>.secrets`](/ko/enterprise-server@3.17/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idsecrets)\n* [`jobs.<job_id>.secrets.<secret_id>`](/ko/enterprise-server@3.17/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idsecretssecret_id)\n* [`jobs.<job_id>.secrets.inherit`](/ko/enterprise-server@3.17/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idsecretsinherit)\n* [`jobs.<job_id>.strategy`](/ko/enterprise-server@3.17/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstrategy)\n* [`jobs.<job_id>.needs`](/ko/enterprise-server@3.17/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idneeds)\n* [`jobs.<job_id>.if`](/ko/enterprise-server@3.17/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idif)\n* [`jobs.<job_id>.concurrency`](/ko/enterprise-server@3.17/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idconcurrency)\n* [`jobs.<job_id>.permissions`](/ko/enterprise-server@3.17/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idpermissions)\n\n  > \\[!NOTE]\n  >\n  > * 호출 작업에 `jobs.<job_id>.permissions`가 지정되지 않은 경우 호출된 워크플로에 `GITHUB_TOKEN`에 대한 기본 사용 권한이 있습니다. 자세한 내용은 [GitHub Actions에 대한 워크플로 구문](/ko/enterprise-server@3.17/actions/reference/workflows-and-actions/workflow-syntax#permissions)을(를) 참조하세요.\n  > * 호출자 워크플로에서 전달된 `GITHUB_TOKEN` 권한은 호출된 워크플로에 의해서만 다운그레이드(상승되지 않음)할 수 있습니다.\n  > *\n\n`jobs.<job_id>.concurrency.cancel-in-progress: true`을 사용하는 경우, 호출된 워크플로와 호출자 워크플로에서 `jobs.<job_id>.concurrency.group`에 동일한 값을 사용하지 마세요. 그렇게 하면 이미 실행 중인 워크플로가 취소됩니다. 호출된 워크플로는 호출자 워크플로의 이름을 사용하므로 호출자 및 호출된 워크플로${{ github.workflow }}의 값 `jobs.<job_id>.concurrency.group` 으로 이 컨텍스트를 사용하면 호출된 워크플로가 실행될 때 호출자 워크플로가 취소됩니다.\n\n### 재사용 가능한 워크플로에서 러너를 사용하는 방식\n\n#### GitHub 호스티드 러너\n\nThe assignment of GitHub호스티드 러너의 할당은 항상 호출자의 컨텍스트만 사용하여 평가됩니다.\nGitHub 호스티드 러너 요금은 항상 호출자에게 귀속됩니다. 호출자 워크플로는 호출된 리포지토리에서 GitHub 호스팅된 실행기를 사용할 수 없습니다. 자세한 내용은 [GitHub 호스팅 실행기](/ko/enterprise-server@3.17/actions/concepts/runners/github-hosted-runners)을(를) 참조하세요.\n\n#### 자체 호스팅 실행기\n\n호출된 워크플로우가 호출 워크플로우와 동일한 사용자, 조직 또는 엔터프라이즈에 속한 경우, 호출자의 컨텍스트에서 자체 호스팅된 러너에 접근할 수 있습니다. 즉, 호출된 워크플로는 다음에 위치한 자체 호스팅 실행기에 액세스할 수 있습니다.\n\n* 호출자 리포지토리\n* 호출자 리포지토리의 조직 또는 엔터프라이즈에서 실행기가 호출자 리포지토리에 제공된 경우\n\n### 중첩된 워크플로에 대한 액세스 및 권한\n\n중첩된 재사용 가능 워크플로를 포함하고 있는 워크플로는 중첩된 워크플로 중 하나라도 초기 호출자 워크플로에 액세스할 수 없는 경우 실패합니다. 자세한 내용은 [재사용 가능한 워크플로에 대한 액세스](#access-to-reusable-workflows)”를 참조하세요.\n\n`GITHUB_TOKEN` 권한은 중첩된 워크플로에서 동일하거나 더 제한적으로만 설정할 수 있습니다. 예를 들어, 워크플로 체인 A > B > C에서 A 워크플로가 `package: read` 토큰 권한을 가지고 있다면, B와 C는 `package: write` 권한을 가질 수 없습니다. 자세한 내용은 [워크플로에서 인증에 GITHUB\\_TOKEN 사용](/ko/enterprise-server@3.17/actions/tutorials/authenticate-with-github_token)을(를) 참조하세요.\n\n특정 워크플로 실행에 어떤 워크플로 파일이 포함되었는지 API를 사용해 확인하는 방법은 [워크플로 재사용](/ko/enterprise-server@3.17/actions/how-tos/reuse-automations/reuse-workflows#monitoring-which-workflows-are-being-used)를 참조하세요.\n\n### 작업을 다시 실행할 때 재사용 가능한 워크플로의 동작\n\n퍼블릭 리포지토리에서 재사용 가능한 워크플로는 SHA, 릴리스 태그 또는 분기 이름을 사용하여 참조할 수 있습니다. 자세한 내용은 [워크플로 재사용](/ko/enterprise-server@3.17/actions/how-tos/reuse-automations/reuse-workflows#calling-a-reusable-workflow)을(를) 참조하세요.\n\n재사용 가능한 워크플로를 사용하는 워크플로를 다시 실행했으며 참조가 SHA가 아닌 경우 다음과 같은 몇 가지 동작을 주의해야 합니다.\n\n* 워크플로에서 모든 작업을 다시 실행하면 지정된 참조에서 재사용 가능한 워크플로가 사용됩니다. 워크플로의 모든 작업을 다시 실행하는 방법에 대한 자세한 내용은 [워크플로 및 작업 다시 실행](/ko/enterprise-server@3.17/actions/how-tos/manage-workflow-runs/re-run-workflows-and-jobs#re-running-all-the-jobs-in-a-workflow)을(를) 참조하세요.\n* 실패한 작업 또는 워크플로의 특정 작업을 다시 실행하면 첫 번째 시도와 동일한 커밋 SHA에서 재사용 가능한 워크플로가 사용됩니다. 워크플로에서 실패한 작업을 다시 실행하는 방법에 대한 자세한 내용은 [워크플로 및 작업 다시 실행](/ko/enterprise-server@3.17/actions/how-tos/manage-workflow-runs/re-run-workflows-and-jobs#re-running-failed-jobs-in-a-workflow)을(를) 참조하세요. 워크플로에서 특정 작업을 다시 실행하는 방법에 대한 자세한 내용은 [워크플로 및 작업 다시 실행](/ko/enterprise-server@3.17/actions/how-tos/manage-workflow-runs/re-run-workflows-and-jobs#re-running-a-specific-job-in-a-workflow)을(를) 참조하세요.\n\n### `github` 컨텍스트\n\n재사용 가능한 워크플로가 호출자 워크플로에 의해 트리거되면 `github` 컨텍스트는 항상 호출자 워크플로와 연결됩니다. 호출된 워크플로에 `github.token`대한 액세스 및 `secrets.GITHUB_TOKEN`에 대한 액세스 권한이 자동으로 부여됩니다.\n`github` 컨텍스트에 대한 자세한 내용은 [문맥 참조](/ko/enterprise-server@3.17/actions/reference/workflows-and-actions/contexts#github-context)을(를) 참조하세요.\n\n## 워크플로 템플릿\n\n조직의 워크플로 템플릿을 만들 때 사용할 수 있는 참조 정보입니다.\n\n### `$default-branch` 자리 표시자\n\n리포지토리의 기본 분기를 참조해야 하는 경우, 워크플로 템플릿에서 `$default-branch` 자리 표시자를 사용할 수 있습니다. 워크플로가 생성될 때 자리 표시자는 리포지토리의 기본 분기 이름으로 자동으로 대체됩니다.\n\n### `runs-on` 키의 자리 표시자 값\n\n`runs-on` 키의 다음 값은 자리 표시자로도 처리됩니다.\n\n* `ubuntu-latest`이 `[ self-hosted ]`로 바뀝니다.\n* `windows-latest`이 `[ self-hosted, windows ]`로 바뀝니다.\n* `macos-latest\"`이 `[ self-hosted, macOS ]`로 바뀝니다.\n\n### 예시 워크플로 템플릿 파일\n\n이름이 `octo-organization-ci.yml`로 지정된 이 파일은 기본 워크플로를 보여 줍니다.\n\n```yaml copy\nname: Octo Organization CI\non:\n  push:\n    branches: [ $default-branch ]\n  pull_request:\n    branches: [ $default-branch ]\njobs:\n  build:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v6\n      - name: Run a one-line script\n        run: echo Hello from Octo Organization\n```\n\n### 메타데이터 파일 요구 사항\n\n메타데이터 파일의 이름은 워크플로 파일과 동일해야 하지만 `.yml` 확장명 대신 `.properties.json`을 추가해야 합니다. 예를 들어, `octo-organization-ci.properties.json`이라는 이름의 이 파일에는 다음과 같이 워크플로 파일에 대한 `octo-organization-ci.yml`라는 이름의 메타데이터가 포함됩니다.\n\n```json copy\n{\n    \"name\": \"Octo Organization Workflow\",\n    \"description\": \"Octo Organization CI workflow template.\",\n    \"iconName\": \"example-icon\",\n    \"categories\": [\n        \"Go\"\n    ],\n    \"filePatterns\": [\n        \"package.json$\",\n        \"^Dockerfile\",\n        \".*\\\\.md$\"\n    ]\n}\n```\n\n* `name`\n\n- **필수입니다**. 워크플로의 이름입니다. 사용 가능한 워크플로 목록에 표시됩니다.\n\n* `description`\n\n- **필수입니다**. 워크플로 설명입니다. 사용 가능한 워크플로 목록에 표시됩니다.\n\n* `iconName`\n\n- **선택 사항**. 워크플로 목록에 표시되는 워크플로의 아이콘을 지정합니다.\n  `iconName` 은 다음 형식 중 하나일 수 있습니다.\n  * `workflow-templates` 디렉터리에 저장된 SVG 파일입니다. 파일을 참조하려면 파일 확장명 없이 파일 이름이 값이어야 합니다. 예를 들어, `example-icon.svg`이라는 SVG 파일은 `example-icon`로 참조됩니다.\n  * GitHub의 [Octicons](https://primer.style/octicons/) 집합의 아이콘입니다. 옥시콘을 참조하려면 값이 `octicon <icon name>`여야 합니다. 예: `octicon smiley`.\n\n* `categories`\n\n- **선택 사항**. 워크플로가 표시되는 범주를 정의합니다. 다음 목록에서 범주 이름을 사용할 수 있습니다.\n  * 시작 워크플로 리포지토리의 [일반 범주 이름입니다](https://github.com/actions/starter-workflows/blob/main/README.md#categories) .\n  * [linguist](https://github.com/github-linguist/linguist/blob/main/lib/linguist/languages.yml) 리포지토리에 있는 목록의 Linguist 언어입니다.\n  * [starter-workflows](https://github.com/github-starter-workflows/repo-analysis-partner/blob/main/tech_stacks.yml) 리포지토리의 목록에서 지원되는 기술 스택입니다.\n\n* `filePatterns`\n\n- **선택 사항**. 사용자 리포지토리의 루트 디렉터리에 정의된 정규식과 일치하는 파일이 있는 경우 워크플로를 사용할 수 있도록 합니다."}