GitHub Actions中workflow_run未触发:关联工作流问题排查求助
GitHub Actions工作流触发问题排查与解决
以下是针对第一个工作流完成后第二个未触发的排查点和解决方法:
1. 核对第二个工作流的workflow_run配置
确保第二个工作流的配置完全匹配第一个工作流的名称,同时明确指定触发类型为completed:
on: workflow_run: workflows: ["Terraform Staging Destroy"] # 必须和第一个工作流名称完全一致,包括大小写、空格 types: - completed # 必须指定该类型,否则不会触发
2. 确认第一个工作流的运行状态
workflow_run仅在第一个工作流进入completed状态时触发,如果第一个工作流被取消、跳过或者中途失败终止(未走到completed状态),都不会触发第二个工作流。可以在GitHub仓库的「Actions」页面查看第一个工作流的最终状态。
3. 配置第一个工作流的权限
第一个工作流需要具备actions: write权限才能触发后续工作流,在第一个工作流中添加权限配置:
permissions: actions: write # 必须配置该权限,否则无法触发其他工作流 contents: read # 根据实际需求添加其他必要权限
4. 匹配分支过滤规则
如果第二个工作流有分支限制,要确保和第一个工作流的运行分支一致。比如第一个工作流仅在staging分支运行,第二个工作流可以添加分支过滤:
on: workflow_run: workflows: ["Terraform Staging Destroy"] types: - completed branches: ["staging"] # 限定仅当第一个工作流在staging分支运行时触发
另外,PR关闭触发的第一个工作流,要确认PR的目标分支是staging,否则分支不匹配也会导致第二个工作流不触发。
完整配置示例
第一个工作流(Terraform Staging Destroy)
name: "Terraform Staging Destroy" on: push: branches: ["staging"] pull_request: branches: ["staging"] types: ["closed"] permissions: actions: write contents: read jobs: destroy-job: runs-on: ubuntu-latest steps: - name: 拉取代码 uses: actions/checkout@v4 - name: 执行测试 run: echo "运行测试用例..." - name: 休眠120秒 run: sleep 120
第二个工作流(Terraform Staging Apply)
name: "Terraform Staging Apply" on: workflow_run: workflows: ["Terraform Staging Destroy"] types: - completed branches: ["staging"] jobs: apply-job: runs-on: ubuntu-latest steps: - name: 拉取代码 uses: actions/checkout@v4 - name: 执行Terraform Apply run: echo "执行Terraform部署..."
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

