View a markdown version of this page

排查 webhook 的问题 - AWS CodeBuild

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

排查 webhook 的问题

问题:您在中设置的 webhook 教程:配置 CodeBuild-hosted GitHub 操作运行器 无法运行或您的工作流程任务处于挂起状态。 GitHub

可能的原因:

  • 您的 webhook 工作流程作业事件可能无法触发构建。检查响应日志以查看响应或错误消息。

  • 由于标签配置,您的作业分配给了不正确的运行程序代理。当单个工作流程运行中一个作业的标签少于另一个作业时,就会出现此问题。例如,如果您在同一个工作流程运行中具有两个带有以下标签的作业:

    • 作业 1codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }}

    • 作业 2codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }}instance-size:medium

    路由自托管的 Act GitHub ions 任务时, GitHub 会将任务路由到具有所有任务指定标签的任何运行器。此行为意味着为作业 1作业 2 创建的运行程序可以承担作业 1,但是由于作业 2 有附加标签,因此只能由为作业 2 创建的运行程序承担该作业。如果为作业 2 创建的运行程序承担了作业 1,则作业 2 将卡住,因为作业 1 运行程序没有 instance-size:medium 标签。

推荐的解决方案:

在同一个工作流程运行中创建多个作业时,请为每个作业使用相同数量的标签覆盖,或者为每个作业分配一个自定义标签,例如 job1job2

为每项任务分配自己独特的自定义标签是最可靠的选择。它确保任何作业的标签集都不是另一个任务的子集。当每个作业都带有其他作业没有的标签时,无论每个作业使用多少其他替代项,都只将每个作业与为其创建的运行器进行 GitHub 匹配。在以下工作流程中,每个作业都有唯一的标签(job1job2)。尽管作业 2 有额外的instance-size:medium替代,但作业 1 无法再与为作业 2 创建的运行器相匹配,因此这两个任务都不会卡住:

name: Hello World on: [push] jobs: job1: runs-on: - codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }} - job1 steps: - run: echo "Hello from Job 1!" job2: runs-on: - codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }} - instance-size:medium - job2 steps: - run: echo "Hello from Job 2!"

如果错误仍然存在,请按照以下说明调试问题。

  1. 在处打开 GitHub 控制台https://github.com/user-name/repository-name/settings/hooks以查看存储库的 webhook 设置。在此页面上,您将看到为您的存储库创建的 webhook。

  2. 选择 “编辑” 并确认启用 Webhook 以传送工作流任务事件。

    工作流作业事件已在您的 webhook 中启用。
  3. 导航至最近传输选项卡,找到相应的 workflow_job.queued 事件,然后展开该事件。

  4. 查看 P ayload 中的标签字段,确保其符合预期。

  5. 最后,查看 响应” 选项卡,因为其中包含从返回的响应或错误消息 CodeBuild。

    返回的响应或错误消息 CodeBuild。
  6. 或者,您可以使用的 API 调试 webhook 故障。 GitHub您可以使用列出存储库 webhook 的传输 API 来查看 webhook 的近期传输:

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

    找到你要调试的 webhook 交付并记下交付 ID 后,你可以使用 “获取仓库交付” webhook API 。 CodeBuild可以在以下response部分中找到对 webhook 交付负载的回应:

    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

问题:部署获得批准 CodeBuild 之前,启用了部署保护规则的 GitHub 操作会触发内部构建。

可能的原因: CodeBuild 获取与 Act GitHub ions 任务相关的部署和环境(如果存在),以验证部署是否获得批准。如果 CodeBuild 无法获取部署或环境,则可能会过早触发 CodeBuild 构建。

推荐的解决方案:验证与您的 CodeBuild 项目关联的凭据是否具有内部部署和操作的读取权限 GitHub。