You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GitHub Actions手动触发工作流间自动共享制品?

解决方案:跨手动触发工作流自动获取制品Run ID

GitHub Actions没有原生的跨工作流持久化共享环境变量或输出的机制,但可以通过以下几种方案实现自动获取workflowA的run-id,无需手动输入:

方案1:将run-id写入仓库文件持久化

在workflowA执行末尾添加步骤,把当前run-id写入仓库的一个专用文件,提交并推送到仓库。workflowB触发时拉取最新代码,读取该文件即可获取目标run-id。

workflowA示例步骤:

- name: 保存workflowA的run-id到文件
  run: echo "${{ github.run_id }}" > .workflowA_latest_run_id

- name: 提交并推送文件到仓库
  uses: stefanzweifel/git-auto-commit-action@v5
  with:
    commit_message: "Update workflowA latest run-id"
    file_pattern: .workflowA_latest_run_id

workflowB示例步骤:

- name: 读取workflowA的run-id
  run: |
    RUN_ID=$(cat .workflowA_latest_run_id)
    echo "WORKFLOW_A_RUN_ID=$RUN_ID" >> $GITHUB_ENV

- name: 下载workflowA生成的制品
  uses: actions/download-artifact@v4
  with:
    name: 你的制品名称
    run-id: ${{ env.WORKFLOW_A_RUN_ID }}
    repo: ${{ github.repository }}

方案2:利用仓库自定义环境变量存储run-id

在workflowA中通过GitHub API更新仓库的自定义环境变量,将run-id存入其中。workflowB触发时直接读取该变量即可。

workflowA示例步骤(需确保GITHUB_TOKEN拥有repo权限):

- name: 更新仓库环境变量保存run-id
  run: |
    curl -L \
      -X PATCH \
      -H "Accept: application/vnd.github+json" \
      -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \
      -H "X-GitHub-Api-Version: 2022-11-28" \
      https://api.github.com/repos/${{ github.repository }}/actions/variables/WORKFLOW_A_LATEST_RUN_ID \
      -d '{"value":"${{ github.run_id }}"}'

workflowB示例步骤:

- name: 下载workflowA生成的制品
  uses: actions/download-artifact@v4
  with:
    name: 你的制品名称
    run-id: ${{ vars.WORKFLOW_A_LATEST_RUN_ID }}
    repo: ${{ github.repository }}

方案3:通过GitHub Releases关联run-id

在workflowA完成后,创建或更新一个固定标签的Release,将run-id写入Release描述。workflowB触发时通过API获取该Release信息,提取出目标run-id。

workflowA示例步骤:

- name: 创建/更新Release存储run-id
  uses: actions/create-release@v1
  env:
    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  with:
    tag_name: workflowA-latest
    release_name: workflowA 最新制品运行记录
    body: |
      最新run-id: ${{ github.run_id }}
    draft: false
    prerelease: false

workflowB示例步骤:

- name: 获取workflowA的run-id
  run: |
    RUN_ID=$(curl -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \
      https://api.github.com/repos/${{ github.repository }}/releases/tags/workflowA-latest | \
      jq -r '.body | split("最新run-id: ")[1]')
    echo "WORKFLOW_A_RUN_ID=$RUN_ID" >> $GITHUB_ENV

- name: 下载workflowA生成的制品
  uses: actions/download-artifact@v4
  with:
    name: 你的制品名称
    run-id: ${{ env.WORKFLOW_A_RUN_ID }}
    repo: ${{ github.repository }}

注意事项

  • 所有方案都需要确保workflowA拥有足够权限(比如GITHUB_TOKEN需包含repo范围权限)
  • 若需保留workflowA的历史run-id,可调整方案(比如方案1用带时间戳的文件名,方案3创建多个Release)
  • 方案1会产生额外的仓库提交,若介意提交记录,优先选择方案2或3

内容的提问来源于stack exchange,提问作者Nir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 11:13:12