如何让私有仓库repo1的Build工作流触发repo2非main分支的Deploy工作流?
解决方案
核心原因
GitHub 的repository_dispatch事件默认仅触发目标仓库默认分支(如main)中的工作流。若要触发非默认分支的工作流,必须在触发请求中明确指定目标分支的ref参数。
具体配置步骤
1. 配置repo2的Deploy工作流
在repo2的目标分支(比如dev)中创建或修改.github/workflows/deploy.yml,确保监听repository_dispatch事件:
name: Deploy on: repository_dispatch: types: [trigger-deploy] # 自定义事件类型,需与触发请求中的类型一致 jobs: deploy: runs-on: self-hosted steps: - name: Checkout target branch code uses: actions/checkout@v4 with: ref: ${{ github.event.client_payload.ref }} # 拉取触发请求指定的分支代码 # 这里添加你的部署步骤
2. 在repo1的Build工作流中添加触发逻辑
在repo1的Build工作流末尾,通过curl发送repository_dispatch请求,必须指定ref参数指向repo2的目标分支:
name: Build on: [push] jobs: build: runs-on: self-hosted steps: # 这里添加你的构建步骤 - name: Trigger repo2 Deploy workflow if: success() # 仅当构建成功时触发 run: | curl -X POST \ -H "Authorization: token ${{ secrets.REPO2_DISPATCH_TOKEN }}" \ -H "Accept: application/vnd.github.v3+json" \ https://api.github.com/repos/<你的用户名>/repo2/dispatches \ -d '{ "event_type": "trigger-deploy", "client_payload": { "ref": "dev" # 替换为repo2中要触发工作流的分支名 } }'
3. 配置权限令牌
- 生成一个GitHub个人访问令牌(PAT),需包含
repo权限(因涉及私有仓库)。 - 在repo1的「Settings -> Secrets and variables -> Actions」中添加该令牌,命名为
REPO2_DISPATCH_TOKEN。
关键注意事项
- 确认repo2的目标分支中确实存在
.github/workflows/deploy.yml文件,且分支名称拼写无误。 - 自托管运行器需能正常访问GitHub API,内网环境需确保网络连通性。
- 触发请求中的
event_type必须与repo2工作流中repository_dispatch.types的取值完全匹配。
内容的提问来源于stack exchange,提问作者Mariem SOUSSI
相关产品推荐
相关产品推荐

