教程:配置 CodeBuild托管的 GitHub操作运行器 - AWS CodeBuild

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

教程:配置 CodeBuild托管的 GitHub操作运行器

本教程向您展示如何配置 CodeBuild 项目以运行 Action GitHub s 作业。有关使用 GitHub 操作的更多信息, CodeBuild 请参阅教程:配置 CodeBuild托管的 GitHub操作运行器。

要完成本教程,您首先必须:

  • 使用个人访问令牌、Secrets Manager 密钥、OAuth应用程序或 GitHub 应用程序进行连接。如果您想连接OAuth应用程序,则必须使用 CodeBuild 控制台进行连接。如果您想创建个人访问令牌,则可以使用 CodeBuild 控制台或使用ImportSourceCredentials API。有关更多说明,请参阅 GitHub 和 GitHub 企业服务器访问权限 CodeBuild

  • Connect CodeBuild 到您的 GitHub 账户。为此,您可以执行以下操作之一:

    注意

    只有当你的账户还没有连接时, GitHub 才需要这样做。

第 1 步:使用 webhook 创建 CodeBuild项目

在此步骤中,您将创建一个带有 webhook 的 CodeBuild 项目,并在 GitHub 控制台中对其进行审核。您也可以选择 E GitHub nterprise 作为您的源提供商。要了解有关在 GitHub 企业版中创建 webhook 的更多信息,请参阅GitHub 手动 webhook

使用 webhook 创建 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

    • 主要来源 webhook 事件中:

      • 对于 Webhook(可选),选择 “每次将代码更改推送到此存储库时重建”。

      • 对于事件类型,选择 WORKFLOW_ JOB _ QUEUED。启用此功能后,构建将仅由 Actions GitHub工作流程作业事件触发。

        注意

        CodeBuild 仅当 Webhook 具有包含 WORKFLOW_ JOB _ 事件过滤器的筛选器组时,才会处理 GitHub 操作工作流作业QUEUED事件。

        将配置构建为仅由 Action GitHub s 工作流程作业事件触发。
    • 环境中:

    • Buildspec (构建规范) 中:

      • 请注意,除非作为标签添加,否则buildspec-override:true您的构建规范将被忽略。相反, CodeBuild 将覆盖它以使用设置自托管运行器的命令。

  3. 继续使用默认值,然后选择创建构建项目

  4. 打开 GitHub 控制台,验证是否已创建一个 webhook 并已启用 webhook 来传送工作流作业事件。https://github.com/user-name/repository-name/settings/hooks

第 2 步:更新您的 GitHub操作工作流程 YAML

在此步骤中,您将在中更新 GitHub 操作工作流程YAML文件GitHub以配置您的构建环境并在中使用 GitHub Actions 自托管运行器。 CodeBuild有关更多信息,请参阅对自托管运行器使用标签和。 CodeBuild托管的操作运行器支持的 GitHub 标签覆盖

更新您的 GitHub操作工作流程 YAML

导航到 GitHub 操作工作流程中的runs-on设置GitHub并进行更新YAML,以配置您的构建环境。为此,您可以执行以下操作之一:

  • 您可以指定项目名称和运行 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 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 }} - image:arm-3.0 - instance-size:small steps: - run: echo "Hello World!"
  • 要在自定义图像上运行 Actions GitHub 作业,您可以在 CodeBuild 项目中配置自定义图像,避免提供图像覆盖标签。 CodeBuild 如果未提供图像覆盖标签,则将使用项目中配置的图像。

  • 或者,您可以在 CodeBuild 支持的标签之外提供标签。为了覆盖构建的属性,这些标签将被忽略,但不会让 webhook 请求失败。例如,添加testLabel为标签不会阻止构建的运行。

注意

如果 GitHub托管运行器提供的依赖项在 CodeBuild环境中不可用,则可以在工作流程运行中使用 Acti GitHub ons 安装依赖项。例如,您可以使用setup-python操作为您的构建环境安装 Python。

运行 buildspec 命令INSTALL,PRE即BUILD、_ 和 POST _ 阶段 BUILD

默认情况下,在运行自托管 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_BUILDINSTALL阶段失败, CodeBuild 则无法启动自托管运行器,并且需要手动取消 GitHub 操作工作流程作业。

  • CodeBuild 在该阶段获取跑步者令牌,该DOWNLOAD_SOURCE阶段的到期时间为一小时。如果您的PRE_BUILDINSTALL阶段超过一小时,则运行器令牌可能会在 GitHub 自托管运行器启动之前过期。

第 3 步:查看您的结果

每当 GitHub 操作工作流程运行时, CodeBuild 都会通过 webhook 接收工作流程作业事件。对于工作流程中的每个作业, CodeBuild 启动构建以运行临时的 Actions GitHub 运行器。运行器负责执行单个工作流程作业。作业完成后,运行器和相关的构建过程将立即终止。

要查看您的工作流程作业日志,请导航到中的 GitHub存储库,选择操作,选择所需的工作流程,然后选择要查看日志的特定作业

当任务等待中的自托管运行器接管时,您可以在日志中 CodeBuild查看请求的标签。

正在加载作业日志。

任务完成后,您将能够查看该任务的日志。

任务日志。

筛选 GitHub 操作 webhook 事件 ()AWS CloudFormation

AWS CloudFormation 模板的以下YAML格式部分创建了一个筛选器组,该过滤器组的计算结果为 true 时会触发构建。以下筛选器组指定 Acti GitHub ons 工作流任务请求,其工作流程名称与正则表达式匹配\[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 操作 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" } } }