本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
排查 webhook 的问题
问题:您在中设置的 webhook 教程:配置 CodeBuild-hosted GitHub 操作运行器 无法运行或您的工作流程任务处于挂起状态。 GitHub
可能的原因:
-
您的 webhook 工作流程作业事件可能无法触发构建。检查响应日志以查看响应或错误消息。
-
由于标签配置,您的作业分配给了不正确的运行程序代理。当单个工作流程运行中一个作业的标签少于另一个作业时,就会出现此问题。例如,如果您在同一个工作流程运行中具有两个带有以下标签的作业:
-
作业 1:
codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }} -
作业 2:
codebuild-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标签。 -
推荐的解决方案:
在同一个工作流程运行中创建多个作业时,请为每个作业使用相同数量的标签覆盖,或者为每个作业分配一个自定义标签,例如 job1 或 job2。
为每项任务分配自己独特的自定义标签是最可靠的选择。它确保任何作业的标签集都不是另一个任务的子集。当每个作业都带有其他作业没有的标签时,无论每个作业使用多少其他替代项,都只将每个作业与为其创建的运行器进行 GitHub 匹配。在以下工作流程中,每个作业都有唯一的标签(job1和job2)。尽管作业 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!"
如果错误仍然存在,请按照以下说明调试问题。
-
在处打开 GitHub 控制台
https://github.com/以查看存储库的 webhook 设置。在此页面上,您将看到为您的存储库创建的 webhook。user-name/repository-name/settings/hooks -
选择 “编辑” 并确认启用 Webhook 以传送工作流任务事件。
-
导航至最近传输选项卡,找到相应的
workflow_job.queued事件,然后展开该事件。 -
查看 P ayload 中的标签字段,确保其符合预期。
-
最后,查看 “响应” 选项卡,因为其中包含从返回的响应或错误消息 CodeBuild。
-
或者,您可以使用的 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 之前,启用了部署保护
可能的原因: CodeBuild 获取与 Act GitHub ions 任务相关的部署和环境(如果存在),以验证部署是否获得批准。如果 CodeBuild 无法获取部署或环境,则可能会过早触发 CodeBuild 构建。
推荐的解决方案:验证与您的 CodeBuild 项目关联的凭据是否具有内部部署和操作的读取权限 GitHub。