You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

PR分支中首个Workflow执行成功后,第二个Workflow未触发的问题求助

PR分支中首个Workflow执行成功后,第二个Workflow未触发的问题求助

兄弟我太懂你这种拆分完CI/CD却卡触发的糟心了!之前我把一个大Workflow拆成3个的时候,也踩过PR分支触发后续流程的坑,咱们一步步排查解决~

首先,核心问题基本绕不开GitHub Actions在PR上下文里的权限限制触发事件配置不对这两个点,咱们一个个来捋:

1. 先检查第二个Workflow的触发配置

假设你的第二个处理发布的Workflow叫release.yml,你得先确保它能接收到第一个Workflow的完成信号。比如这样配置:

# release.yml
name: Handle release
on:
  # 先开个手动触发,方便你测试
  workflow_dispatch:
  # 监听第一个Workflow的完成事件
  workflow_run:
    workflows: ["Run build and unit tests"]  # 这里必须和你第一个Workflow的name完全一致,多一个空格都不行!
    types:
      - completed
    branches: ["**"]  # 确保覆盖你的PR分支

另外,在这个Workflow的job里,记得加个条件,只在第一个Workflow成功时才运行:

jobs:
  release:
    runs-on: ubuntu-latest
    # 只在第一个Workflow成功完成时才启动
    if: ${{ github.event.workflow_run.conclusion == 'success' }}
    steps:
      - name: 拉取代码
        uses: actions/checkout@v4
      # 这里放你的发布相关步骤

2. 给第一个Workflow加足够的权限

PR分支里跑的Workflow,默认的GITHUB_TOKEN权限非常有限,连触发其他Workflow的权限都没有!所以你得在第一个validate.yml里明确加上权限:

# validate.yml
name: Run build and unit tests
on:
  push:
    branches: ["**"]
  pull_request:
    branches: ["**"]

jobs:
  build-test:
    runs-on: ubuntu-latest
    # 必须加这行权限配置,不然触发不了后续Workflow
    permissions:
      contents: read
      workflows: write
    steps:
      - name: 拉取代码
        uses: actions/checkout@v4
      # 这里放你的构建、单元测试步骤...

3. 如果你是用主动触发(不是workflow_run监听)的方式

要是你是在第一个Workflow的最后一步主动调用第二个,那得用actions/github-script来触发,还要注意PR分支的ref问题:
比如在validate.yml的测试步骤后加:

- name: 触发发布Workflow
        if: ${{ success() }}  # 只有测试成功才触发
        uses: actions/github-script@v6
        with:
          script: |
            await github.rest.actions.createWorkflowDispatch({
              owner: context.repo.owner,
              repo: context.repo.repo,
              workflow_id: 'release.yml',  # 填第二个Workflow的文件名
              ref: context.head_ref  # 这里用head_ref才是PR的源分支,别用ref(那是合并后的分支)
            })

4. 最后排查PR的特殊情况

  • 如果是同一个仓库内的PR分支:上面的配置基本就能解决,要是还不行,去第一个Workflow的日志里找触发步骤的报错,大概率是权限没开对。
  • 如果是fork过来的PR分支:那GitHub的安全限制更严,默认的GITHUB_TOKEN完全没权限触发原仓库的Workflow,这种情况要么你得用存在仓库Secrets里的个人访问令牌(PAT)(只给workflow权限就行),要么就只能等PR合并到主分支后再触发发布流程。

对了,测试的时候可以先手动触发第二个Workflow,确认它本身能正常跑,再去看第一个Workflow的触发逻辑,这样能快速排除是第二个Workflow本身的问题还是触发的问题~

火山引擎 最新活动