如何在仓库1合并至master分支时触发仓库2的GitHub CI工作流
不能直接在on.push.branches字段里配置其他仓库的分支实现跨仓库触发,这个配置项仅监听当前仓库内的分支推送事件,对其他仓库产生的事件完全不生效。
要实现仓库1合并代码到master时自动触发仓库2的CI,用「仓库2开放工作流调用入口 + 仓库1合并时主动发起调用」的方案即可,你现有的仓库2配置已经满足基础要求,只需要补少量配置:
配置步骤
1. 确认仓库2的基础配置
你仓库2里名为run autotests的工作流已经配置了workflow_dispatch触发项,本身就支持被外部调用,只需要提前完成权限准备:
- 进入仓库2的设置页,找到Actions > General配置项
- 下滑到Workflow permissions板块,确保工作流运行权限没有做过度限制
- 如果两个仓库不在同一账号/组织下,提前准备一个有仓库2工作流操作权限的访问令牌。
2. 在仓库1添加触发工作流
在仓库1的.github/workflows/目录下新建任意名称的yml配置文件,内容参考如下:
name: 触发仓库2自动化测试 on: push: branches: [master] # 如果只需要PR合并到master时触发,注释掉上面的push配置,启用下面的配置 # pull_request: # branches: [master] # types: [closed] jobs: trigger: runs-on: ubuntu-latest steps: - name: 调用仓库2工作流 uses: actions/github-script@v7 with: github-token: ${{ secrets.REPO2_TRIGGER_TOKEN }} script: | // PR触发时放开下面的注释,避免PR未合并就触发 // if (context.payload.pull_request && !context.payload.pull_request.merged) return await github.rest.actions.createWorkflowDispatch({ owner: '替换为仓库2的所属账号/组织名', repo: '替换为仓库2的仓库名称', workflow_id: '替换为仓库2中run autotests对应的yml文件名,比如autotest.yml', ref: 'master' })
3. 配置访问凭证
- 生成一个个人访问令牌(PAT):如果仓库2是私有仓库,给令牌勾选repo全权限;如果是公开仓库,勾选public_repo和workflow权限即可
- 把生成的令牌保存到仓库1的Actions Secrets中,命名为
REPO2_TRIGGER_TOKEN,和上面配置里的引用名保持一致
补充说明
- 如果需要把仓库1的提交ID、触发人等信息传到仓库2的测试流程里,可以在仓库2的
workflow_dispatch配置下新增inputs字段定义参数,在仓库1的调用代码里传入对应参数值即可 - 如果两个仓库同属一个组织,可以直接用组织级别的内置令牌,不用单独生成个人PAT,只要给组织令牌开通跨仓库工作流调用权限就行,安全性更高
内容的提问来源于stack exchange,提问作者Leonid
相关产品推荐
相关产品推荐

