如何触发与调用者同分支的依赖GitHub Workflow?
解决方法
当通过workflow_dispatch手动触发特定分支的build-image后,要让deploy-image也从该分支触发(运行对应分支的workflow逻辑),可以通过以下两种方式解决:
方法一:在build-image中触发对应分支的deploy-image(推荐)
直接在build-image的workflow末尾添加步骤,当构建完成且成功时,触发对应分支的deploy-image workflow:
name: build-image on: workflow_dispatch: branches: [ '*' ] # 保留原有的其他触发条件 push: branches: [ master ] jobs: build: runs-on: ubuntu-latest steps: # 你的构建步骤 - name: Build image run: echo "Building image..." # 添加触发deploy的步骤 - name: Trigger deploy workflow on same branch if: success() uses: actions/github-script@v6 with: script: | await github.rest.actions.createWorkflowDispatch({ owner: context.repo.owner, repo: context.repo.repo, workflow_id: 'deploy-image.yml', ref: context.ref, // 自动使用当前build-image运行的分支 })
这样,当你在分支feature/test手动触发build-image后,构建完成会自动触发feature/test分支的deploy-image workflow,完全使用该分支下的部署逻辑。
方法二:调整deploy-image的checkout逻辑(适用于仅需拉取分支代码)
如果你只需要让deploy-image拉取触发分支的代码(workflow逻辑仍使用默认分支的),可以修复actions/checkout的配置,同时确认上下文变量的准确性:
name: deploy-image on: workflow_run: workflows: [ "build-image" ] types: - completed jobs: deploy: runs-on: ubuntu-latest steps: - name: Debug workflow context run: | echo "Trigger branch: ${{ github.event.workflow_run.head_branch }}" echo "Trigger commit SHA: ${{ github.event.workflow_run.head_sha }}" - uses: actions/checkout@v3 with: ref: ${{ github.event.workflow_run.head_sha }} # 使用commit SHA比分支名更准确,避免分支名冲突
使用head_sha而非head_branch是因为如果触发build-image的是PR分支或存在分支名冲突时,head_sha能精准定位到对应的代码版本。如果调试后发现变量为空,说明workflow_run上下文未正确传递,此时推荐使用方法一。
内容的提问来源于stack exchange,提问作者Ayush Mandowara
相关产品推荐
相关产品推荐

