

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 의 자체 호스팅 GitHub Actions 실행기 AWS CodeBuild
<a name="action-runner-overview"></a>

GitHub Action 워크플로 작업을 처리하기 위해 CodeBuild 컨테이너에서 자체 호스팅 GitHub Action 실행기를 설정하도록 프로젝트를 구성할 수 있습니다. 이는 CodeBuild 프로젝트를 사용하여 웹후크를 설정하고 GitHub 작업 워크플로 YAML을 업데이트하여 CodeBuild 시스템에서 호스팅되는 자체 호스팅 실행기를 사용하여 수행할 수 있습니다.

GitHub Action 작업을 실행하도록 CodeBuild 프로젝트를 구성하는 상위 단계는 다음과 같습니다.

1. 아직 생성하지 않은 경우 개인 액세스 토큰을 생성하거나 OAuth 앱에 연결하여 프로젝트를 GitHub에 연결합니다.

1. CodeBuild 콘솔로 이동하여 웹후크를 사용하여 CodeBuild 프로젝트를 생성하고 웹후크 필터를 설정합니다.

1. GitHub에서 GitHub Action 워크플로 YAML을 업데이트하여 빌드 환경을 구성합니다.

자세한 절차는 [자습서: CodeBuild 호스팅 GitHub Action 실행기 구성](action-runner.md) 섹션을 참조하세요.

이 기능을 사용하면 GitHub Actions 워크플로 작업이 IAM AWS AWS Secrets Manager , 통합 및 Amazon VPC와 같은 기능을 통해 보안 AWS CloudTrail및 편의를 제공하는와 네이티브 통합을 수행할 수 있습니다. ARM 기반 인스턴스를 포함한 최신 인스턴스 유형에 액세스할 수 있습니다.

**Topics**
+ [CodeBuild 호스팅 GitHub Action 실행기 정보](action-runner-questions.md)
+ [자습서: CodeBuild 호스팅 GitHub Action 실행기 구성](action-runner.md)
+ [웹후크 문제 해결](action-runner-troubleshoot-webhook.md)
+ [CodeBuild 호스팅 GitHub Action 실행기에서 지원되는 레이블 재정의](sample-github-action-runners-update-labels.md)
+ [CodeBuild 호스팅 GitHub Action 실행기에서 지원되는 이미지 계산](sample-github-action-runners-update-yaml.images.md)

# CodeBuild 호스팅 GitHub Action 실행기 정보
<a name="action-runner-questions"></a>

다음은 CodeBuild 호스팅 GitHub Action 실행기에 대한 몇 가지 일반적인 질문입니다.

## 레이블에 이미지 및 인스턴스 재정의를 언제 포함해야 합니까?
<a name="action-runner-image-label"></a>

각 GitHub Action 워크플로 작업에 대해 서로 다른 빌드 환경을 지정하기 위해 레이블에 이미지 및 인스턴스 재정의를 포함할 수 있습니다. 이는 여러 CodeBuild 프로젝트 또는 웹후크를 생성할 필요 없이 수행할 수 있습니다. 예를 들어 [워크플로 작업에 매트릭스](https://docs.github.com/en/actions/using-jobs/using-a-matrix-for-your-jobs)를 사용해야 하는 경우 유용합니다.

```
name: Hello World
on: [push]
jobs:
  Hello-World-Job:
    runs-on:
      - codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }}
        image:${{ matrix.os }}
        instance-size:${{ matrix.size }}
    strategy:
      matrix:
        include:
          - os: arm-3.0
            size: small
          - os: linux-5.0
            size: large
    steps:
      - run: echo "Hello World!"
```

**참고**  
`runs-on`에 GitHub Action 컨텍스트가 포함된 레이블이 여러 개 있는 경우 따옴표가 필요할 수 있습니다.

## 이 기능에 CloudFormation 를 사용할 수 있습니까?
<a name="action-runner-cfn"></a>

예, 프로젝트 웹후크에서 GitHub Actions 워크플로 작업 이벤트 필터를 지정하는 필터 그룹을 CloudFormation 템플릿에 포함할 수 있습니다.

```
Triggers:
  Webhook: true
  FilterGroups:
    - - Type: EVENT
        Pattern: WORKFLOW_JOB_QUEUED
```

자세한 내용은 [GitHub Webhook 이벤트 필터링(CloudFormation)](github-webhook-events-cfn.md) 단원을 참조하십시오.

 CloudFormation 템플릿에서 프로젝트 자격 증명을 설정하는 데 도움이 필요한 경우 자세한 내용은 *AWS CloudFormation 사용 설명서*의 [AWS::CodeBuild::SourceCredential](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codebuild-sourcecredential.html)을 참조하세요.

## 이 기능을 사용할 때 암호를 마스킹하려면 어떻게 해야 하나요?
<a name="action-runner-secrets"></a>

기본적으로 로그에 인쇄된 보안 암호는 마스킹되지 않습니다. 보안 암호를 마스킹하려면 다음 구문을 사용할 수 있습니다. `::add-mask::value`. 다음은 YAML에서 이 구문을 사용하는 방법의 예입니다.

```
name: Secret Job
on: [push]
jobs:
  Secret-Job:
    runs-on: codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }}
    env:
      SECRET_NAME: "secret-name"
    steps:
      - run: echo "::add-mask::$SECRET_NAME"
```

자세한 내용은 GitHub의 [로그에서 값 마스킹](https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#masking-a-value-in-a-log)을 참조하세요.

## 단일 프로젝트 내의 여러 리포지토리에서 GitHub Action 웹후크 이벤트를 수신할 수 있나요?
<a name="action-runner-webhooks"></a>

CodeBuild는 지정된 조직 또는 엔터프라이즈에서 이벤트를 수신하는 조직 및 글로벌 수준 웹후크를 지원합니다. 자세한 내용은 [GitHub 글로벌 및 조직 웹후크](github-global-organization-webhook.md) 단원을 참조하십시오.

## CodeBuild 호스팅 GitHub Action 실행기 사용을 지원하는 리전은 무엇입니까?
<a name="action-runner-hosted-regions"></a>

CodeBuild 호스팅 GitHub Action 실행기는 모든 CodeBuild 리전에서 지원됩니다. CodeBuild를 사용할 수 AWS 리전 있는 위치에 대한 자세한 내용은 [AWS 리전별 서비스를](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/) 참조하세요.

## CodeBuild 호스팅 GitHub Action 실행기 사용을 지원하는 플랫폼은 무엇입니까?
<a name="action-runner-platform"></a>

CodeBuild 호스팅 GitHub Action 실행기는 Amazon EC2와 [AWS Lambda](lambda.md) 컴퓨팅 모두에서 지원됩니다. Amazon Linux 2, Amazon Linux 2023, Ubuntu 및 Windows Server Core 2019 플랫폼을 사용할 수 있습니다. 자세한 내용은 [EC2 컴퓨팅 이미지](ec2-compute-images.md) 및 [Lambda 컴퓨팅 이미지](lambda-compute-images.md) 섹션을 참조하세요.

# 자습서: CodeBuild 호스팅 GitHub Action 실행기 구성
<a name="action-runner"></a>

이 자습서에서는 GitHub Action 작업을 실행하도록 CodeBuild 프로젝트를 구성하는 방법을 보여줍니다. GitHub Action과 CodeBuild를 함께 사용하는 방법에 대한 자세한 내용은 [자습서: CodeBuild 호스팅 GitHub Action 실행기 구성](#action-runner) 섹션을 참조하세요.<a name="sample-github-action-runners-prerequisites"></a>

이 자습서를 완료하려면 먼저 다음을 수행해야 합니다.
+ 개인 액세스 토큰, Secrets Manager 보안 암호, OAuth 앱 또는 GitHub 앱으로 연결합니다. OAuth 앱에 연결하려면 CodeBuild 콘솔을 사용하여 연결해야 합니다. 개인 액세스 토큰을 생성하려는 경우 CodeBuild 콘솔을 사용하거나 [ImportSourceCredentials API를](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_ImportSourceCredentials.html) 사용할 수 있습니다. 자세한 지침은 [CodeBuild의 GitHub 및 GitHub Enterprise Server 액세스](access-tokens-github-overview.md) 섹션을 참조하세요.
+ CodeBuild를 GitHub 계정에 연결합니다. 이렇게 하려면 다음 중 하나를 수행할 수 있습니다.
  + 콘솔에서 GitHub를 소스 공급자로 추가할 수 있습니다. 개인 액세스 토큰, Secrets Manager 보안 암호, OAuth 앱 또는 GitHub 앱으로 연결할 수 있습니다. 지침은 [CodeBuild의 GitHub 및 GitHub Enterprise Server 액세스](access-tokens-github-overview.md) 섹션을 참조하세요.
  + [ImportSourceCredentials API](https://docs.aws.amazon.com/cli/latest/reference/codebuild/import-source-credentials.html)를 통해 GitHub 자격 증명을 가져올 수 있습니다. 이는 개인 액세스 토큰으로만 수행할 수 있습니다. OAuth 앱을 사용하여 연결하는 경우 콘솔을 사용하여 대신 연결해야 합니다. 지침은 [액세스 토큰을 사용하여 GitHub에 연결(CLI)](access-tokens-github.md#access-tokens-github-cli) 섹션을 참조하세요.
**참고**  
이는 계정에 대해 GitHub에 연결하지 않은 경우에만 수행하면 됩니다.

## 1단계: 웹후크를 사용하여 CodeBuild 프로젝트 생성
<a name="sample-github-action-runners-create-project"></a>

이 단계에서는 웹후크를 사용하여 CodeBuild 프로젝트를 생성하고 GitHub 콘솔에서 검토합니다. 소스 공급자로 GitHub Enterprise를 선택할 수도 있습니다. GitHub Enterprise 내에서 웹후크를 생성하는 방법에 대한 자세한 내용은 [GitHub 수동 웹후크](github-manual-webhook.md) 섹션을 참조하세요.

**웹후크를 사용하여 CodeBuild 프로젝트를 생성하려면**

1. [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home) AWS CodeBuild 콘솔을 엽니다.

1. 빌드 프로젝트를 생성합니다. 자세한 내용은 [빌드 프로젝트 만들기(콘솔)](create-project.md#create-project-console) 및 [빌드 실행(콘솔)](run-build-console.md) 섹션을 참조하세요.

1. **프로젝트 유형**에서 **Runner 프로젝트를** 선택합니다.

   **러너**에서:

   1. **Runner 공급자**에서 **GitHub**를 선택합니다.

   1. **러너 위치에서** **리포지토리**를 선택합니다.

   1. 리포지토리 아래의 **리포지토리** URL에서 **https://github.com/user-name/repository-name** 선택합니다.
**참고**  
기본적으로 프로젝트는 단일 리포지토리에 대한 `WORKFLOW_JOB_QUEUED` 이벤트만 수신합니다. 조직 또는 엔터프라이즈 내의 모든 리포지토리에 대한 이벤트를 수신하려면 [GitHub 글로벌 및 조직 웹후크](github-global-organization-webhook.md) 섹션을 참조하세요.

1. 
   +  **환경**에서 다음과 같이 합니다.
     + 지원되는 **환경 이미지**와 **컴퓨팅**을 선택합니다. GitHub Action 워크플로 YAML의 레이블을 사용하여 이미지 및 인스턴스 설정을 재정의할 수 있는 옵션이 있습니다. 자세한 내용은 [2단계: GitHub Action 워크플로 YAML 업데이트](#sample-github-action-runners-update-yaml) 섹션을 참조하세요.
   +  **Buildspec**에서 다음과 같이 합니다.
     + `buildspec-override:true`가 레이블로 추가되지 않는 한 buildspec은 무시됩니다. 대신 CodeBuild는 자체 호스팅 실행기를 설정하는 명령을 사용하도록 재정의합니다.

1. 기본값으로 계속 진행한 다음 **빌드 프로젝트 생성**을 선택합니다.

1. `https://github.com/user-name/repository-name/settings/hooks`에서 GitHub 콘솔을 열어 웹후크가 생성되었고 **워크플로 작업** 이벤트를 전달할 수 있는지 확인합니다.

## 2단계: GitHub Action 워크플로 YAML 업데이트
<a name="sample-github-action-runners-update-yaml"></a>

이 단계에서는 [https://github.com/](https://github.com/)에서 GitHub Action 워크플로 YAML 파일을 업데이트하여 빌드 환경을 구성하고 CodeBuild에서 GitHub Action 자체 호스팅 실행기를 사용합니다. 자세한 내용은 [자체 호스팅 실행기에서 레이블 사용](https://docs.github.com/en/actions/hosting-your-own-runners/managing-self-hosted-runners/using-labels-with-self-hosted-runners) 및 [CodeBuild 호스팅 GitHub Action 실행기에서 지원되는 레이블 재정의](sample-github-action-runners-update-labels.md) 섹션을 참조하세요.

### GitHub Action 워크플로 YAML 업데이트
<a name="sample-github-action-runners-update-yaml.setup"></a>

GitHub Action 워크플로 YAML의 [https://github.com/](https://github.com/) 설정으로 이동하여 [https://docs.github.com/en/actions/hosting-your-own-runners/managing-self-hosted-runners/using-labels-with-self-hosted-runners](https://docs.github.com/en/actions/hosting-your-own-runners/managing-self-hosted-runners/using-labels-with-self-hosted-runners)을 업데이트하여 빌드 환경을 구성합니다. 이렇게 하려면 다음 중 하나를 수행할 수 있습니다.
+ 프로젝트 이름과 실행 ID를 지정할 수 있습니다. 이 경우 빌드는 컴퓨팅, 이미지, 이미지 버전 및 인스턴스 크기에 대한 기존 프로젝트 구성을 사용합니다. 프로젝트 이름은 GitHub Action 작업의 AWS관련 설정을 특정 CodeBuild 프로젝트에 연결하는 데 필요합니다. YAML에 프로젝트 이름을 포함하면 CodeBuild가 올바른 프로젝트 설정으로 작업을 호출할 수 있습니다. CodeBuild는 실행 ID를 제공하여 빌드를 특정 워크플로 실행에 매핑하고 워크플로 실행이 취소되면 빌드를 중지합니다. 자세한 내용은 [`github` 컨텍스트](https://docs.github.com/en/actions/learn-github-actions/contexts#github-context)를 참조하세요.

  ```
  runs-on: codebuild-<project-name>-${{ github.run_id }}-${{ github.run_attempt }}
  ```
**참고**  
*<project-name>*이 이전 단계에서 생성한 프로젝트의 이름과 일치하는지 확인합니다. 일치하지 않으면 CodeBuild는 웹후크를 처리하지 않고 GitHub Action 워크플로가 중단될 수 있습니다.

  다음은 GitHub Action 워크플로 YAML의 예입니다.

  ```
  name: Hello World
  on: [push]
  jobs:
    Hello-World-Job:
      runs-on:
        - codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }}
      steps:
        - run: echo "Hello World!"
  ```
+ 레이블에서 이미지 및 컴퓨팅 유형을 재정의할 수도 있습니다. 큐레이션된 이미지 목록은 섹션을 참조[CodeBuild 호스팅 GitHub Action 실행기에서 지원되는 이미지 계산](sample-github-action-runners-update-yaml.images.md)하세요. 사용자 지정 이미지 사용은 섹션을 참조하세요[CodeBuild 호스팅 GitHub Action 실행기에서 지원되는 레이블 재정의](sample-github-action-runners-update-labels.md). 레이블의 컴퓨팅 유형 및 이미지가 프로젝트의 환경 설정을 재정의합니다. CodeBuild EC2 또는 Lambda 컴퓨팅 빌드의 환경 설정을 재정의하려면 다음 구문을 사용합니다.

  ```
  runs-on:
    - codebuild-<project-name>-${{ github.run_id }}-${{ github.run_attempt }}
      image:<environment-type>-<image-identifier>
      instance-size:<instance-size>
  ```

  다음은 GitHub Action 워크플로 YAML의 예입니다.

  ```
  name: Hello World
  on: [push]
  jobs:
    Hello-World-Job:
      runs-on:
        - codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }}
          image:arm-3.0
          instance-size:small
      steps:
        - run: echo "Hello World!"
  ```
+ 레이블에서 빌드에 사용되는 플릿을 재정의할 수 있습니다. 이렇게 하면 지정된 플릿을 사용하도록 프로젝트에 구성된 플릿 설정이 재정의됩니다. 자세한 내용은 [예약 용량 플릿에서 빌드 실행](fleets.md) 단원을 참조하십시오. Amazon EC2 컴퓨팅 빌드의 플릿 설정을 재정의하려면 다음 구문을 사용합니다.

  ```
  runs-on:
    - codebuild-<project-name>-${{ github.run_id }}-${{ github.run_attempt }}
      fleet:<fleet-name>
  ```

  빌드에 사용되는 플릿과 이미지를 모두 재정의하려면 다음 구문을 사용합니다.

  ```
  runs-on:
    - codebuild-<project-name>-${{ github.run_id }}-${{ github.run_attempt }}
      fleet:<fleet-name>
      image:<environment-type>-<image-identifier>
  ```

  다음은 GitHub Action 워크플로 YAML의 예입니다.

  ```
  name: Hello World
  on: [push]
  jobs:
    Hello-World-Job:
      runs-on:
        - codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }}
          fleet:myFleet
          image:arm-3.0
      steps:
        - run: echo "Hello World!"
  ```
+ 사용자 지정 이미지에서 GitHub Action 작업을 실행하려면 CodeBuild 프로젝트에서 사용자 지정 이미지를 구성하고 이미지 재정의 레이블을 제공하지 않아도 됩니다. CodeBuild는 이미지 재정의 레이블이 제공되지 않은 경우 프로젝트에 구성된 이미지를 사용합니다.
+ 선택적으로 CodeBuild가 지원하는 레이블 이외의 레이블을 제공할 수 있습니다. 이러한 레이블은 빌드의 속성을 재정의할 목적으로 무시되지만 웹후크 요청에 실패하지는 않습니다. 예를 들어 레이블로 `testLabel`을 추가해도 레이블은 빌드 실행을 방해하지 않습니다.

**참고**  
CodeBuild 환경에서 GitHub 호스팅 실행기가 제공하는 종속 항목을 사용할 수 없는 경우 워크플로 실행에서 GitHub Action을 사용하여 종속 항목을 설치할 수 있습니다. 예를 들어 [https://github.com/actions/setup-python](https://github.com/actions/setup-python) 작업을 사용하여 빌드 환경에 Python을 설치할 수 있습니다.

### buildspec 명령 실행 INSTALL, PRE\$1BUILD 및 POST\$1BUILD 단계
<a name="sample-github-action-runners-update-yaml.buildspec"></a>

기본적으로 CodeBuild는 자체 호스팅 GitHub Action 빌드를 실행할 때 모든 buildspec 명령을 무시합니다. 빌드 중에 buildspec 명령을 실행하려면 `buildspec-override:true`를 레이블에 접미사로 추가할 수 있습니다.

```
runs-on:
  - codebuild-<project-name>-${{ github.run_id }}-${{ github.run_attempt }}
    buildspec-override:true
```

이 명령을 사용하면 CodeBuild는 컨테이너의 기본 소스 폴더에 `actions-runner`라는 폴더를 생성합니다. `BUILD` 단계 중에 GitHub Action 실행기가 시작되면 실행기가 `actions-runner` 디렉터리에서 실행됩니다.

자체 호스팅 GitHub Action 빌드에서 buildspec 재정의를 사용하는 경우 몇 가지 제한이 있습니다.
+ CodeBuild는 `BUILD` 단계에서 자체 호스팅된 실행기가 실행되므로 `BUILD` 단계 중에 buildspec 명령을 실행하지 않습니다.
+ CodeBuild는 `DOWNLOAD_SOURCE` 단계 중에 기본 또는 보조 소스를 다운로드하지 않습니다. buildspec 파일이 구성된 경우 해당 파일만 프로젝트의 기본 소스에서 다운로드됩니다.
+ `PRE_BUILD` 또는 `INSTALL` 단계에서 빌드 명령이 실패하면 CodeBuild는 자체 호스팅 실행기를 시작하지 않으며 GitHub Action 워크플로 작업을 수동으로 취소해야 합니다.
+ CodeBuild는 만료 시간이 1시간인 `DOWNLOAD_SOURCE` 단계 중에 실행기 토큰을 가져옵니다. `PRE_BUILD` 또는 `INSTALL` 단계가 1시간을 초과하면 GitHub 자체 호스팅 실행기가 시작되기 전에 실행기 토큰이 만료될 수 있습니다.

## 3단계: 결과 검토
<a name="sample-github-action-runners-verify"></a>

GitHub Action 워크플로 실행이 발생할 때마다 CodeBuild는 웹후크를 통해 워크플로 작업 이벤트를 수신합니다. 워크플로의 각 작업에 대해 CodeBuild는 임시 GitHub Action 실행기를 실행하기 위한 빌드를 시작합니다. 실행기는 단일 워크플로 작업을 실행할 책임이 있습니다. 작업이 완료되면 실행기와 관련 빌드 프로세스가 즉시 종료됩니다.

워크플로 작업 로그를 보려면 GitHub에서 리포지토리로 이동하여 **작업**을 선택하고 원하는 워크플로를 선택한 다음 로그를 검토하려는 특정 **작업**을 선택합니다.

CodeBuild에서 자체 호스팅된 실행기가 작업을 픽업할 때까지 기다리는 동안 로그에서 요청된 레이블을 검토할 수 있습니다.

![\[작업의 로그 로드.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/hello-world-loading.png)


작업이 완료되면 작업 로그를 볼 수 있습니다.

![\[작업의 로그입니다.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/hello-world-log.png)


## GitHub Actions 실행기 구성 옵션
<a name="sample-github-action-runners-config"></a>

프로젝트 구성에서 다음 환경 변수를 지정하여 자체 호스팅 러너의 설정 구성을 수정할 수 있습니다.

`CODEBUILD_CONFIG_GITHUB_ACTIONS_ORG_REGISTRATION_NAME`  
CodeBuild는 자체 호스팅 러너를이 환경 변수의 값으로 지정된 조직 이름에 등록합니다. 조직 수준에서 러너를 등록하는 방법과 필요한 권한에 대한 자세한 내용은 [ 조직의 just-in-time 러너에 대한 구성 생성을 참조하세요](https://docs.github.com/en/rest/actions/self-hosted-runners?apiVersion=2022-11-28#create-configuration-for-a-just-in-time-runner-for-an-organization).

`CODEBUILD_CONFIG_GITHUB_ACTIONS_ENTERPRISE_REGISTRATION_NAME`  
CodeBuild는 자체 호스팅 러너를이 환경 변수의 값으로 지정된 엔터프라이즈 이름에 등록합니다. 엔터프라이즈 수준에서 러너를 등록하는 방법과 필요한 권한에 대한 자세한 내용은 [ 엔터프라이즈just-in-time 러너에 대한 구성 생성을 참조하세요](https://docs.github.com/en/enterprise-server/rest/actions/self-hosted-runners?apiVersion=2022-11-28#create-configuration-for-a-just-in-time-runner-for-an-enterprise).  
엔터프라이즈 러너는 기본적으로 조직 리포지토리에서 사용할 수 없습니다. 자체 호스팅 러너가 워크플로 작업을 픽업하려면 러너 그룹 액세스 설정을 구성해야 할 수 있습니다. 자세한 내용은 [ 엔터프라이즈 러너를 리포지토리에 사용할 수 있도록 만들기](https://docs.github.com/en/enterprise-server/actions/hosting-your-own-runners/managing-self-hosted-runners/adding-self-hosted-runners#making-enterprise-runners-available-to-repositories)를 참조하세요.

`CODEBUILD_CONFIG_GITHUB_ACTIONS_RUNNER_GROUP_ID`  
CodeBuild는이 환경 변수의 값으로 저장된 정수 실행기 그룹 ID에 자체 호스팅 실행기를 등록합니다. 기본적으로이 값은 1입니다. 자체 호스팅 러너 그룹에 대한 자세한 내용은 [ 그룹을 사용하여 자체 호스팅 러너에 대한 액세스 관리를 참조하세요](https://docs.github.com/en/rest/actions/self-hosted-runners?apiVersion=2022-11-28#create-configuration-for-a-just-in-time-runner-for-an-organization).

`CODEBUILD_CONFIG_GITHUB_ACTIONS_ORG_REGISTRATION_NAME`  
GitHub Actions 워크플로 YAML 파일을 사용하여 조직 수준 실행기 등록을 구성하려면 다음 구문을 사용할 수 있습니다.  

```
name: Hello World
on: [push]
jobs:
  Hello-World-Job:
    runs-on:
      - codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }}
        organization-registration-name:myOrganization
    steps:
      - run: echo "Hello World!"
```

`CODEBUILD_CONFIG_GITHUB_ACTIONS_ENTERPRISE_REGISTRATION_NAME`  
GitHub Actions 워크플로 YAML 파일을 사용하여 엔터프라이즈 수준 실행기 등록을 구성하려면 다음 구문을 사용할 수 있습니다.  

```
name: Hello World
on: [push]
jobs:
  Hello-World-Job:
    runs-on:
      - codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }}
        enterprise-registration-name:myEnterprise
    steps:
      - run: echo "Hello World!"
```

`CODEBUILD_CONFIG_GITHUB_ACTIONS_RUNNER_GROUP_ID`  
GitHub Actions 워크플로 YAML 파일을 사용하여 특정 러너 그룹 ID에 러너 등록을 구성하려면 다음 구문을 사용할 수 있습니다.  

```
name: Hello World
on: [push]
jobs:
  Hello-World-Job:
    runs-on:
      - codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }}
        registration-group-id:3
    steps:
      - run: echo "Hello World!"
```

## GitHub Action 웹후크 이벤트 필터링(CloudFormation)
<a name="sample-github-action-runners-webhooks-cfn"></a>

 CloudFormation 템플릿의 다음 YAML 형식 부분은 빌드가 true로 평가될 때 빌드를 트리거하는 필터 그룹을 생성합니다. 다음 필터 그룹은 정규식 `\[CI-CodeBuild\]`와 일치하는 워크플로 이름을 가진 GitHub Action 워크플로 작업 요청을 지정합니다.

```
CodeBuildProject:
  Type: AWS::CodeBuild::Project
  Properties:
    Name: MyProject
    ServiceRole: service-role
    Artifacts:
      Type: NO_ARTIFACTS
    Environment:
      Type: LINUX_CONTAINER
      ComputeType: BUILD_GENERAL1_SMALL
      Image: aws/codebuild/standard:5.0
    Source:
      Type: GITHUB
      Location: CODEBUILD_DEFAULT_WEBHOOK_SOURCE_LOCATION
    Triggers:
      Webhook: true
      ScopeConfiguration:
        Name: organization-name
        Scope: GITHUB_ORGANIZATION
      FilterGroups:
        - - Type: EVENT
            Pattern: WORKFLOW_JOB_QUEUED
          - Type: WORKFLOW_NAME
            Pattern: \[CI-CodeBuild\]
```

## GitHub Action 웹후크 이벤트 필터링(AWS CDK)
<a name="sample-github-action-runners-webhooks-cdk"></a>

다음 AWS CDK 템플릿은 빌드가 true로 평가될 때 빌드를 트리거하는 필터 그룹을 생성합니다. 다음 필터 그룹은 GitHub Action 워크플로 작업 요청을 지정합니다.

```
import { aws_codebuild as codebuild } from 'aws-cdk-lib';
import {EventAction, FilterGroup} from "aws-cdk-lib/aws-codebuild";

const source = codebuild.Source.gitHub({
      owner: 'owner',
      repo: 'repo',
      webhook: true,
      webhookFilters: [FilterGroup.inEventOf(EventAction.WORKFLOW_JOB_QUEUED)],
    })
```

## GitHub Action 웹후크 이벤트 필터링(Terraform)
<a name="sample-github-action-runners-webhooks-terraform"></a>

다음 Terraform 템플릿은 빌드가 true로 평가될 때 빌드를 트리거하는 필터 그룹을 생성합니다. 다음 필터 그룹은 GitHub Action 워크플로 작업 요청을 지정합니다.

```
resource "aws_codebuild_webhook" "example" {
  project_name = aws_codebuild_project.example.name
  build_type   = "BUILD"
  filter_group {
    filter {
      type    = "EVENT"
      pattern = "WORKFLOW_JOB_QUEUED"
    }
  }
}
```

## GitHub Action 웹후크 이벤트 필터링(AWS CLI)
<a name="sample-github-action-runners-webhooks-cli"></a>

다음 AWS CLI 명령은 빌드가 true로 평가될 때 빌드를 트리거하는 GitHub Actions 워크플로 작업 요청 필터 그룹을 사용하여 자체 호스팅 GitHub Actions 실행기 프로젝트를 생성합니다. GitHub 

```
aws codebuild create-project \
--name <project name> \
--source "{\"type\":\"GITHUB\",\"location\":\"<repository location>\",\"buildspec\":\"\"}" \
--artifacts {"\"type\":\"NO_ARTIFACTS\""} \
--environment "{\"type\": \"LINUX_CONTAINER\",\"image\": \"aws/codebuild/amazonlinux-x86_64-standard:5.0\",\"computeType\": \"BUILD_GENERAL1_MEDIUM\"}" \
--service-role "<service role ARN>"
```

```
aws codebuild create-webhook \
--project-name <project name> \
--filter-groups "[[{\"type\":\"EVENT\",\"pattern\":\"WORKFLOW_JOB_QUEUED\"}]]"
```

# 웹후크 문제 해결
<a name="action-runner-troubleshoot-webhook"></a>

**문제: **[자습서: CodeBuild 호스팅 GitHub Action 실행기 구성](action-runner.md)에서 설정한 웹후크가 작동하지 않거나 GitHub에서 워크플로 작업이 중단되고 있습니다.

**가능한 원인: **
+ Webhook **워크플로 작업** 이벤트가 빌드를 트리거하지 못할 수 있습니다. **응답** 로그를 검토하여 응답 또는 오류 메시지를 확인합니다.
+ 레이블 구성으로 인해 작업이 잘못된 러너 에이전트에 할당되고 있습니다. 이 문제는 단일 워크플로 실행 내 작업 중 하나에 다른 작업보다 레이블이 적은 경우에 발생할 수 있습니다. 예를 들어 동일한 워크플로 실행에 다음 레이블이 있는 작업이 두 개 있는 경우:
  + **작업 1**: `codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }}`
  + **작업 2**: `codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }}`, `instance-size:medium` 

  자체 호스팅된 GitHub Actions 작업을 라우팅할 때 GitHub는 모든 작업의 지정된 레이블이 있는 러너로 작업을 라우팅합니다. 이 동작은 **작업 1** 또는 작업 **2**에 대해 생성된 러너가 **작업 1**을 선택할 수 있지만 **추가 레이블이 있으므로 작업 2**에 대해 생성된 러너만 **작업 2**를 선택할 수 있음을 의미합니다. **작업 2**용으로 생성된 실행기가 **작업 **1을 선택하면 **작업 ****1 실행기에 레이블이 없으므로 작업 **2가 중단됩니다. `instance-size:medium` 

**권장 솔루션: **

동일한 워크플로 실행 내에서 여러 작업을 생성할 때 각 작업에 대해 동일한 수의 레이블 재정의를 사용하거나 `job1` 또는와 같은 사용자 지정 레이블을 각 작업에 할당합니다`job2`.

오류가 지속되면 다음 지침에 따라 문제를 디버깅합니다.

1. `https://github.com/user-name/repository-name/settings/hooks`에서 GitHub 콘솔을 열어 리포지토리의 웹후크 설정을 확인합니다. 이 페이지에는 리포지토리를 위해 생성된 웹후크가 표시됩니다.

1. **편집**을 선택하고 웹후크가 **워크플로 작업** 이벤트를 전달하도록 활성화되어 있는지 확인합니다.  
![\[워크플로 작업 이벤트는 웹후크에서 활성화됩니다.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/github-actions-workflow-jobs.png)

1.  **최근 전송** 탭으로 이동하여 해당 `workflow_job.queued` 이벤트를 찾아 이벤트를 확장합니다.

1.  **페이로드**의 **레이블** 필드를 검토하고 예상대로인지 확인합니다.

1.  마지막으로 **응답** 탭을 검토합니다. 응답 탭에는 CodeBuild에서 반환된 응답 또는 오류 메시지가 포함되어 있기 때문입니다.  
![\[CodeBuild에서 반환된 응답 또는 오류 메시지입니다.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/github-actions-workflow-jobs-response.png)

1.  또는 GitHub의 API를 사용하여 웹후크 실패를 디버깅할 수 있습니다. [리포지토리 웹후크 API의 목록 전송](https://docs.github.com/en/rest/repos/webhooks?apiVersion=2022-11-28#list-deliveries-for-a-repository-webhook)을 사용하여 웹후크의 최근 전송을 볼 수 있습니다.

   ```
   gh api \
     -H "Accept: application/vnd.github+json" \
     -H "X-GitHub-Api-Version: 2022-11-28" \
     /repos/owner/repo/hooks/hook-id/deliveries
   ```

    디버깅하고 전송 ID를 기록하려는 웹후크 전송을 찾은 후 [리포지토리 웹후크에 대한 전송 가져오기](https://docs.github.com/en/rest/repos/webhooks?apiVersion=2022-11-28#get-a-delivery-for-a-repository-webhook) API를 사용할 수 있습니다. 웹후크의 전송 페이로드에 대한 CodeBuild의 응답은 `response` 섹션에서 확인할 수 있습니다.

   ```
   gh api \
     -H "Accept: application/vnd.github+json" \
     -H "X-GitHub-Api-Version: 2022-11-28" \
     /repos/owner/repo/hooks/hook-id/deliveries/delivery-id
   ```

**문제:** [배포 보호](https://docs.github.com/en/actions/managing-workflow-runs-and-deployments/managing-deployments/reviewing-deployments) 규칙이 활성화된 GitHub 작업은 배포가 승인되기 전에 CodeBuild 내에 빌드됩니다.

**가능한 원인:** CodeBuild는가 승인되었는지 확인하기 위해 GitHub Actions 작업과 연결된 배포 및 환경을 가져옵니다. CodeBuild가 배포 또는 환경을 가져오지 못하면 CodeBuild 빌드가 조기에 트리거될 수 있습니다.

**권장 솔루션:** CodeBuild 프로젝트와 연결된 자격 증명에 GitHub 내의 배포 및 작업에 대한 읽기 권한이 있는지 확인합니다.

# CodeBuild 호스팅 GitHub Action 실행기에서 지원되는 레이블 재정의
<a name="sample-github-action-runners-update-labels"></a>

GitHub Action 워크플로 YAML에서 자체 호스팅 실행기 빌드를 수정하는 다양한 레이블 재정의를 제공할 수 있습니다. CodeBuild에서 인식하지 못하는 빌드는 무시되지만 웹후크 요청에 실패하지는 않습니다. 예를 들어 다음 워크플로 YAML에는 이미지, 인스턴스 크기, 플릿 및 buildspec에 대한 재정의를 포함합니다.

```
name: Hello World
on: [push]
jobs:
  Hello-World-Job:
    runs-on:
      - codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }}
        image:${{ matrix.os }}
        instance-size:${{ matrix.size }}
        fleet:myFleet
        buildspec-override:true
    strategy:
      matrix:
        include:
          - os: arm-3.0
            size: small
          - os: linux-5.0
            size: large
    steps:
      - run: echo "Hello World!"
```

**참고**  
워크플로 작업이 GitHub에서 중단되는 경우 [웹후크 문제 해결](action-runner-troubleshoot-webhook.md) 및 [ 사용자 지정 레이블을 사용하여 작업 라우팅](https://docs.github.com/en/enterprise-server@3.12/actions/hosting-your-own-runners/managing-self-hosted-runners/using-self-hosted-runners-in-a-workflow?learn=hosting_your_own_runners&learnProduct=actions#using-custom-labels-to-route-jobs)을 참조하세요.

`codebuild-<project-name>-${{github.run_id}}-${{github.run_attempt}}`(필수)
+ 예시: `codebuild-fake-project-${{ github.run_id }}-${{ github.run_attempt }}`
+ 모든 GitHub Action 워크플로 YAML에 필요합니다. *<project name>*은 자체 호스팅 실행기 웹후크가 구성된 프로젝트의 이름과 같아야 합니다.

`image:<environment-type>-<image-identifier>`
+ 예시: `image:arm-3.0`
+ 큐레이션된 이미지로 자체 호스팅 러너 빌드를 시작할 때 사용되는 이미지 및 환경 유형을 재정의합니다. 지원되는 값에 대한 자세한 내용은 [CodeBuild 호스팅 GitHub Action 실행기에서 지원되는 이미지 계산](sample-github-action-runners-update-yaml.images.md) 섹션을 참조하세요.
  + 사용자 지정 이미지와 함께 사용되는 이미지 및 환경 유형을 재정의하려면 `image:custom-<environment-type>-<custom-image-identifier>`
  + 예시: `image:custom-arm-public.ecr.aws/codebuild/amazonlinux-aarch64-standard:3.0`
**참고**  
사용자 지정 이미지가 프라이빗 레지스트리에 있는 경우 섹션을 참조하세요[자체 호스팅 러너에 대한 프라이빗 레지스트리 자격 증명 구성](private-registry-sample-configure-runners.md).

`instance-size:<instance-size>`
+ 예시: `instance-size:medium`
+ 자체 호스팅 실행기 빌드를 시작할 때 사용되는 인스턴스 유형을 재정의합니다. 지원되는 값에 대한 자세한 내용은 [CodeBuild 호스팅 GitHub Action 실행기에서 지원되는 이미지 계산](sample-github-action-runners-update-yaml.images.md) 섹션을 참조하세요.

`fleet:<fleet-name>`
+ 예시: `fleet:myFleet`
+ 지정된 플릿을 사용하도록 프로젝트에 구성된 플릿 설정을 재정의합니다. 자세한 내용은 [예약 용량 플릿에서 빌드 실행](fleets.md) 단원을 참조하십시오.

`buildspec-override:<boolean>`
+ 예시: `buildspec-override:true`
+ `true`로 설정된 경우 빌드가 `INSTALL`, `PRE_BUILD` 및 `POST_BUILD` 단계에서 buildspec 명령을 실행하도록 허용합니다.

## 단일 레이블 재정의(레거시)
<a name="sample-github-action-runners-update-single-labels"></a>

CodeBuild를 사용하면 다음을 사용하여 단일 레이블에 여러 재정의를 제공할 수 있습니다.
+ Amazon EC2/Lambda 컴퓨팅 빌드의 환경 설정을 재정의하려면 다음 구문을 사용합니다.

  ```
  runs-on: codebuild-<project-name>-${{ github.run_id }}-${{ github.run_attempt }}-<environment-type>-<image-identifier>-<instance-size>
  ```
+ Amazon EC2 컴퓨팅 빌드에 대한 플릿 설정을 재정의하려면 다음 구문을 사용합니다.

  ```
  runs-on: codebuild-<project-name>-${{ github.run_id }}-${{ github.run_attempt }}-fleet-<fleet-name>
  ```
+ 빌드에 사용되는 플릿과 이미지를 모두 재정의하려면 다음 구문을 사용합니다.

  ```
  runs-on: codebuild-<project-name>-${{ github.run_id }}-${{ github.run_attempt }}-image-<image-version>-fleet-<fleet-name>
  ```
+ 빌드 중에 buildspec 명령을 실행하려면 `-with-buildspec`를 레이블에 접미사로 추가할 수 있습니다.

  ```
  runs-on: codebuild-<project-name>-${{ github.run_id }}-${{ github.run_attempt }}-<image>-<image-version>-<instance-size>-with-buildspec
  ```
+ 선택적으로 이미지를 재정의하지 않고 인스턴스 크기 재정의를 제공할 수 있습니다. Amazon EC2 빌드의 경우 환경 유형과 이미지 식별자를 모두 제외할 수 있습니다. Lambda 빌드의 경우 이미지 식별자를 제외할 수 있습니다.

# CodeBuild 호스팅 GitHub Action 실행기에서 지원되는 이미지 계산
<a name="sample-github-action-runners-update-yaml.images"></a>

[자습서: CodeBuild 호스팅 GitHub Action 실행기 구성](action-runner.md)에서 구성한 레이블에서 처음 세 열의 값을 사용하여 Amazon EC2 환경 설정을 재정의할 수 있습니다. CodeBuild는 다음과 같은 Amazon EC2 컴퓨팅 이미지를 제공합니다. 해당 내용은 다음을 참조하세요.

<a name="build-env-ref.supported-images"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/sample-github-action-runners-update-yaml.images.html)

또한 다음 값을 사용하여 Lambda 환경 설정을 재정의할 수 있습니다. CodeBuild Lambda 컴퓨팅에 대한 자세한 내용은 [AWS Lambda 컴퓨팅 기반 빌드 실행](lambda.md) 섹션을 참조하세요. CodeBuild는 다음 Lambda 컴퓨팅 이미지를 지원합니다.

<a name="lambda.supported-images"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/sample-github-action-runners-update-yaml.images.html)

자세한 내용은 [빌드 환경 컴퓨팅 모드 및 유형](build-env-ref-compute-types.md) 및 [CodeBuild가 제공하는 도커 이미지](build-env-ref-available.md) 섹션을 참조하세요.