자습서: CodeBuild호스팅된 GitHub 작업 러너 구성 - AWS CodeBuild

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

자습서: CodeBuild호스팅된 GitHub 작업 러너 구성

이 자습서에서는 GitHub 작업 작업을 실행하도록 CodeBuild 프로젝트를 구성하는 방법을 보여줍니다. GitHub 작업 사용에 대한 자세한 내용은 섹션을 CodeBuild 참조하세요자습서: CodeBuild호스팅된 GitHub 작업 러너 구성.

이 자습서를 완료하려면 먼저 다음을 수행해야 합니다.

  • 개인 액세스 토큰, Secrets Manager 보안 암호, OAuth 앱 또는 GitHub 앱으로 연결합니다. OAuth 앱에 연결하려면 CodeBuild 콘솔을 사용하여 연결해야 합니다. 개인 액세스 토큰을 생성하려면 CodeBuild 콘솔을 사용하거나 를 사용할 수 있습니다ImportSourceCredentials API. 자세한 지침은 GitHub 및 의 GitHub Enterprise Server 액세스 CodeBuild 섹션을 참조하세요.

  • GitHub 계정에 CodeBuild 연결합니다. 이렇게 하려면 다음 중 하나를 수행할 수 있습니다.

    참고

    계정에 GitHub 대해 에 연결하지 않은 경우에만 이 작업을 수행해야 합니다.

1단계: 웹후크를 CodeBuild 사용하여 프로젝트 생성

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

웹후크를 사용하여 CodeBuild 프로젝트를 생성하려면
  1. https://console.aws.amazon.com/codesuite/codebuild/home 에서 AWS CodeBuild 콘솔을 엽니다.

  2. 빌드 프로젝트를 생성합니다. 자세한 내용은 빌드 프로젝트 만들기(콘솔)빌드 실행(콘솔) 섹션을 참조하세요.

    • 소스에서 다음과 같이 합니다.

      • 소스 공급자 에서 를 선택합니다GitHub.

      • 리포지토리 에서 내 GitHub 계정의 리포지토리 를 선택합니다.

      • 리포지토리 URL에 를 입력합니다https://github.com/user-name/repository-name.

      참고

      기본적으로 프로젝트는 단일 리포지토리에 대한 WORKFLOW_JOB_QUEUED 이벤트만 수신합니다. 조직 또는 엔터프라이즈 내의 모든 리포지토리에 대한 이벤트를 수신하려면 섹션을 참조하세요GitHub 글로벌 및 조직 웹후크.

    • 기본 소스 웹후크 이벤트에서:

      • Webhook - 선택적 의 경우 코드 변경이 이 리포지토리 로 푸시될 때마다 재구축을 선택합니다.

      • 이벤트 유형 에서 WORKFLOW_JOB_QUEUED를 선택합니다. 이 기능이 활성화되면 GitHub 작업 워크플로 작업 이벤트에 의해서만 빌드가 트리거됩니다.

        참고

        CodeBuild 는 웹후크에 WORKFLOW_JOB_QUEUED 이벤트 필터가 포함된 필터 그룹이 있는 경우에만 GitHub 작업 워크플로 작업 이벤트를 처리합니다.

        GitHub 작업 워크플로 작업 이벤트에 의해서만 트리거되도록 구성을 빌드합니다.
    • 환경에서 다음과 같이 합니다.

      • 지원되는 환경 이미지컴퓨팅을 선택합니다. GitHub 작업 워크플로의 레이블을 사용하여 이미지 및 인스턴스 설정을 재정의할 수 있는 옵션이 있습니다YAML. 자세한 내용은 2단계: 작업 워크플로 업데이트 GitHub YAML 단원을 참조하세요.

    • Buildspec에서 다음과 같이 합니다.

      • 가 레이블로 추가되지 않는 한 buildspecbuildspec-override:true은 무시됩니다. 대신 는 자체 호스팅 러너를 설정하는 명령을 사용하도록 CodeBuild 재정의합니다.

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

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

2단계: 작업 워크플로 업데이트 GitHub YAML

이 단계에서는 에서 GitHub 작업 워크플로 YAML 파일을 업데이트GitHub하여 빌드 환경을 구성하고 에서 GitHub 작업 자체 호스팅 러너를 사용합니다 CodeBuild. 자세한 내용은 자체 호스팅 러너 및 에서 레이블 사용을 참조하세요 CodeBuild호스팅된 GitHub 작업 러너에서 지원되는 레이블 재정의.

작업 워크플로 업데이트 GitHub YAML

GitHub 작업 워크플로의 runs-on 설정으로 이동하여 GitHub 업데이트YAML하여 빌드 환경을 구성합니다. 이렇게 하려면 다음 중 하나를 수행할 수 있습니다.

  • 프로젝트 이름과 실행 ID를 지정할 수 있습니다. 이 경우 빌드는 컴퓨팅, 이미지, 이미지 버전 및 인스턴스 크기에 기존 프로젝트 구성을 사용합니다. 프로젝트 이름은 GitHub 작업 작업의 AWS관련 설정을 특정 CodeBuild 프로젝트에 연결하는 데 필요합니다. 에 프로젝트 이름을 포함하면 YAML CodeBuild 가 올바른 프로젝트 설정으로 작업을 호출할 수 있습니다. 실행 ID를 제공하면 CodeBuild 는 빌드를 특정 워크플로 실행에 매핑하고 워크플로 실행이 취소되면 빌드를 중지합니다. 자세한 내용은 github 컨텍스트 섹션을 참조하세요.

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

    <project-name> 는 이전 단계에서 생성한 프로젝트의 이름과 일치합니다. 일치하지 않으면 CodeBuild 가 웹후크를 처리하지 않고 작업 워크플로가 GitHub 중단될 수 있습니다.

    다음은 GitHub 작업 워크플로의 예입니다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 작업 러너로 지원되는 이미지 계산 목록은 섹션을 참조하세요. 레이블의 컴퓨팅 유형과 이미지가 프로젝트의 환경 설정을 재정의합니다. 또는 Lambda 컴퓨팅 빌드의 환경 설정을 재정의 CodeBuild EC2하려면 다음 구문을 사용합니다.

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

    다음은 GitHub 작업 워크플로의 예입니다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!"
  • 레이블에서 빌드에 사용되는 플릿을 재정의할 수 있습니다. 이렇게 하면 지정된 플릿을 사용하도록 프로젝트에 구성된 플릿 설정이 재정의됩니다. 자세한 내용은 예약된 용량 플릿에서 빌드 실행 단원을 참조하십시오. 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 작업 워크플로의 예입니다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!"
  • 사용자 지정 이미지에서 GitHub 작업 작업을 실행하려면 CodeBuild 프로젝트에서 사용자 지정 이미지를 구성하고 이미지 재정의 레이블을 제공하지 않아도 됩니다. CodeBuild 는 이미지 재정의 레이블이 제공되지 않은 경우 프로젝트에 구성된 이미지를 사용합니다.

  • 선택적으로 CodeBuild 가 지원하는 레이블 이외의 레이블을 제공할 수 있습니다. 이러한 레이블은 빌드의 속성을 재정의할 목적으로 무시되지만 웹후크 요청에 실패하지는 않습니다. 예를 들어 레이블testLabel로 를 추가해도 빌드가 실행되지 않습니다.

참고

GitHub호스팅된 러너에서 제공하는 종속성을 환경에서 사용할 CodeBuild 수 없는 경우 워크플로 실행에서 GitHub 작업을 사용하여 종속성을 설치할 수 있습니다. 예를 들어 작업을 사용하여 빌드 환경에 Python을 setup-python 설치할 수 있습니다.

buildspec 명령 실행 INSTALL, PRE_ BUILD및 POST_BUILD 단계

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

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

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

자체 호스팅 GitHub 작업 빌드에서 buildspec 재정의를 사용할 때 몇 가지 제한이 있습니다.

  • CodeBuild 는 단계에서 자체 호스팅된 러너가 실행되므로 BUILD 단계 중에 buildspec 명령을 실행하지 않습니다BUILD.

  • CodeBuild 는 DOWNLOAD_SOURCE 단계 중에 기본 또는 보조 소스를 다운로드하지 않습니다. buildspec 파일이 구성된 경우 해당 파일만 프로젝트의 기본 소스에서 다운로드됩니다.

  • PRE_BUILD 또는 INSTALL 단계에서 빌드 명령이 실패하면 는 자체 호스팅 러너를 시작 CodeBuild 하지 않으며 GitHub 작업 워크플로 작업을 수동으로 취소해야 합니다.

  • CodeBuild 는 만료 시간이 1시간인 DOWNLOAD_SOURCE 단계 중에 러너 토큰을 가져옵니다. PRE_BUILD 또는 INSTALL 단계가 1시간을 초과하면 GitHub 자체 호스팅 러너가 시작되기 전에 러너 토큰이 만료될 수 있습니다.

3단계: 결과 검토

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

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

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

작업 로그 로드.

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

작업의 로그입니다.

필터 GitHub 작업 웹후크 이벤트(AWS CloudFormation)

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

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 FilterGroups: - - Type: EVENT Pattern: WORKFLOW_JOB_QUEUED - Type: WORKFLOW_NAME Pattern: \[CI-CodeBuild\]

필터 GitHub 작업 웹후크 이벤트(AWS CDK)

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

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 작업 웹후크 이벤트(Terraform)

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

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