本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
本教程向您展示如何配置 CodeBuild 项目以运行 Action GitHub s 作业。有关将 GitHub 操作与配合使用的更多信息, CodeBuild 请参阅教程:配置 CodeBuild托管的 GitHub操作运行器。
要完成本教程,您首先必须:
-
使用个人访问令牌、Secrets Manager 密钥、 OAuth 应用程序或 GitHub 应用程序进行连接。如果您想连接 OAuth 应用程序,则必须使用 CodeBuild 控制台进行连接。如果您想创建个人访问令牌,则可以使用 CodeBuild 控制台或使用 ImportSourceCredentials API。有关更多说明,请参阅 GitHub 和 GitHub 企业服务器访问权限 CodeBuild。
-
Connect CodeBuild 到您的 GitHub 账户。为此,您可以执行以下操作之一:
-
您可以在控制台中添加 GitHub 为源提供商。您可以使用个人访问令牌、Secrets Manager 密钥、 OAuth 应用程序或 GitHub 应用程序进行连接。有关说明,请参阅 GitHub 和 GitHub 企业服务器访问权限 CodeBuild。
-
您可以通过 ImportSourceCredentials API 导入您的 GitHub 证书。只有使用个人访问令牌才能执行此操作。如果您使用 OAuth 应用程序进行连接,则必须改为使用控制台进行连接。有关说明,请参阅 GitHub 使用访问令牌 (CLI) 连接 。
注意
只有当你的账户还没有连接时, GitHub 才需要这样做。
-
第 1 步:使用 webhook 创建 CodeBuild项目
在此步骤中,您将创建一个带有 webhook 的 CodeBuild 项目,并在 GitHub 控制台中对其进行审核。您也可以选择 E GitHub nterprise 作为您的源提供商。要了解有关在 GitHub 企业版中创建 webhook 的更多信息,请参阅GitHub 手动 webhook。
使用 webhook 创建 CodeBuild 项目
在 https://console.aws.amazon.com/codesuite/codebuild
/home 中打开 AWS CodeBuild 控制台。 -
创建构建项目。有关信息,请参阅创建构建项目(控制台)和运行构建(控制台)。
-
在项目类型中,选择运行器项目。
在 Runner 中:
-
对于跑步者提供商,请选择GitHub。
-
对于运行器位置,请选择存储库。
-
在 “存储库” 下的 “存储库 URL” 中,选择https://github.com/user-name/存储库名称。
注意
默认情况下,您的项目将仅接收单个存储库的
WORKFLOW_JOB_QUEUED
事件。如果您想接收组织或企业内所有存储库的事件,请参阅GitHub 全局和组织 webhook。 -
-
-
在环境中:
-
选择支持的环境映像和计算。请注意,您可以选择在 GitHub 操作工作流程 YAML 中使用标签来覆盖图像和实例设置。有关更多信息,请参阅 第 2 步:更新您的 GitHub操作工作流程 YAML
-
-
在 Buildspec (构建规范) 中:
-
请注意,除非将
buildspec-override:true
作为标签添加,否则系统会忽略 buildspec。相反, CodeBuild 将覆盖它以使用设置自托管运行器的命令。
-
-
-
继续使用默认值,然后选择创建构建项目。
-
打开 GitHub 控制台,验证是否已创建一个 webhook 并已启用 webhook 来传送工作流作业事件。
https://github.com/
user-name
/repository-name
/settings/hooks
第 2 步:更新您的 GitHub操作工作流程 YAML
在此步骤中,您将更新 GitHub 操作工作流程 YAML 文件GitHub
更新你的 GitHub操作工作流程 YAML
导航到 GitHub 操作工作流程 YAML 中的runs-on
GitHub
-
您可以指定项目名称和运行 ID,在这种情况下,构建将使用计算、映像、映像版本和实例大小的现有项目配置。需要项目名称才能将 Actions 作业的 AWS相关设置链接到特定 CodeBuild项目。 GitHub 通过在 YAML 中包含项目名称 CodeBuild ,可以调用具有正确项目设置的作业。通过提供运行 ID, CodeBuild 会将您的构建映射到特定的工作流程运行,并在取消工作流程运行时停止构建。有关更多信息,请参阅
github
上下文。 runs-on: codebuild-
<project-name>
-${{ github.run_id }}-${{ github.run_attempt }}注意
请确保您的名称与您在上一步中创建的项目名称
<project-name>
相匹配。如果不匹配, CodeBuild 则不会处理 webhook, 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 操作运行器支持的图像有关精选图片的列表,请参阅。有关使用自定义图像的信息,请参阅 CodeBuild托管的操作运行器支持的 GitHub 标签覆盖。标签中的计算类型和映像将覆盖项目的环境设置。要覆盖 CodeBuild EC2 或 Lambda 计算版本的环境设置,请使用以下语法:
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 }} - fleet:myFleet - image:arm-3.0 steps: - run: echo "Hello World!"
-
要在自定义图像上运行 Actions GitHub 作业,您可以在 CodeBuild 项目中配置自定义图像,避免提供图像覆盖标签。 CodeBuild 如果未提供图像覆盖标签,则将使用项目中配置的图像。
-
或者,您可以在 CodeBuild 支持的标签之外提供标签。在覆盖构建的属性时会忽略这些标签,但不会导致 webhook 请求失败。例如,添加
testLabel
作为标签不会阻止构建运行。
注意
如果 GitHub托管运行器提供的依赖项在 CodeBuild环境中不可用,则可以在工作流程运行中使用 Acti GitHub ons 安装依赖项。例如,您可以使用 setup-python
在 INSTALL、PRE_BUILD 和 POST_BUILD 阶段运行 buildspec 命令
默认情况下,在运行自托管 GitHub 的 Actions 版本时 CodeBuild 会忽略所有 buildspec 命令。要在构建期间运行 buildspec 命令,可以将 buildspec-override:true
作为后缀添加到标签中:
runs-on: - codebuild-
<project-name>
-${{ github.run_id }}-${{ github.run_attempt }} - buildspec-override:true
通过使用此命令, CodeBuild 将在容器的主源文件夹actions-runner
中创建一个名为的文件夹。当 Ac GitHub tions 运行器在该BUILD
阶段启动时,运行器将在actions-runner
目录中运行。
在自托管的 Actions 版本中使用 buildspec 覆盖有几个限制 GitHub :
-
CodeBuild 在此
BUILD
阶段不会运行 buildspec 命令,因为自托管运行器将在该BUILD
阶段运行。 -
CodeBuild 在此
DOWNLOAD_SOURCE
阶段不会下载任何主要或次要来源。如果您配置了 buildspec 文件,则只会从项目的主源下载该文件。 -
如果构建命令在
PRE_BUILD
或INSTALL
阶段失败, CodeBuild 则无法启动自托管运行器,并且需要手动取消 GitHub 操作工作流程作业。 -
CodeBuild 在该阶段获取跑步者令牌,该
DOWNLOAD_SOURCE
阶段的到期时间为一小时。如果您的PRE_BUILD
或INSTALL
阶段超过一小时,则运行器令牌可能会在 GitHub 自托管运行器启动之前过期。
步骤 3:检查您的结果
每当 GitHub 操作工作流程运行时, CodeBuild 都会通过 webhook 接收工作流程作业事件。对于工作流程中的每个作业, CodeBuild 启动构建以运行临时操作 GitHub 运行器。该运行器负责执行单个工作流作业。作业完成后,运行器和关联的构建过程会立即终止。
要查看您的工作流程作业日志,请导航到中的 GitHub存储库,选择操作,选择所需的工作流程,然后选择要查看日志的特定作业。
当任务等待中的自托管运行器接管时,您可以在日志中 CodeBuild查看请求的标签。

作业完成后,您将能够查看该作业的日志。

GitHub 操作运行器配置选项
您可以在项目配置中指定以下环境变量来修改自托管运行器的安装配置。
CODEBUILD_CONFIG_GITHUB_ACTIONS_ORG_REGISTRATION_NAME
-
CodeBuild 会将自托管的运行器注册到指定为该环境变量值的组织名称。有关在组织级别注册运行器和必要权限的更多信息,请参阅为组织的 just-in-time运行器创建配置
。 CODEBUILD_CONFIG_GITHUB_ACTIONS_RUNNER_GROUP_ID
-
CodeBuild 会将自托管的运行器注册到存储为该环境变量值的整数运行器组 ID。默认情况下,此值为 1。有关自托管运行器组的更多信息,请参阅使用群组管理对自托管运行器的访问权限
。
筛选 GitHub 操作 webhook 事件 ()AWS CloudFormation
AWS CloudFormation
模板的以下 YAML 格式部分创建一个筛选条件组,该组在计算结果为 true 时会触发构建。以下筛选器组指定了工作流名称与正则表达式匹配的 Actions 工作流任务请求\[CI-CodeBuild\]
。 GitHub
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 操作 webhook 事件 ()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 操作 webhook 事件 (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"
}
}
}