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

如何在GitHub Actions中复用同一commit对应的构建产物

实现方案

核心逻辑是给commit.yml构建的产物绑定对应commit SHA作为唯一标识,release.yml触发时根据当前tag对应的commit SHA检索匹配的已上传产物直接下载复用。

第一步:配置commit.yml(提交触发构建+上传产物)

触发条件为代码提交时运行,构建完成后将产物以携带当前commit SHA的命名上传,设置足够长的保留时间。
示例配置:

name: Commit Build
on:
  push:
    branches: ["*"] # 匹配所有分支的提交事件

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: 检出代码
        uses: actions/checkout@v4

      - name: 执行构建
        run: |
          # 此处替换为你自己的构建命令,比如npm install && npm run build
          echo "构建完成"
          mkdir -p ./dist
          echo "test build content" > ./dist/build.txt

      - name: 上传构建产物
        uses: actions/upload-artifact@v4
        with:
          # 产物名绑定当前commit SHA,作为唯一匹配标识
          name: build-assets-${{ github.sha }}
          path: ./dist # 替换为你实际的构建产物输出目录
          retention-days: 90 # 产物保留90天,可根据需求调整

第二步:配置release.yml(打tag触发+复用已有产物)

触发条件为推送tag时运行,首先根据当前tag对应的commit SHA,检索同仓库下对应commit的已成功构建的产物,下载后直接作为发布资产。
示例配置:

name: Release Publish
on:
  push:
    tags: ["v*"] # 匹配你的版本tag规则,比如v1.0.0这类v开头的tag

permissions:
  actions: read # 授予读取其他工作流产物的权限
  contents: write # 授予创建Release、上传发布资产的权限

jobs:
  release:
    runs-on: ubuntu-latest
    steps:
      - name: 检出代码
        uses: actions/checkout@v4

      - name: 下载对应commit的构建产物
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          # 查询对应commit SHA的成功构建产物ID
          ARTIFACT_ID=$(gh api repos/${{ github.repository }}/actions/artifacts \
            --jq ".artifacts[] | select(.name == \"build-assets-${{ github.sha }}\" and .workflow_run.head_sha == \"${{ github.sha }}\" and .workflow_run.conclusion == \"success\") | .id" | head -n 1)
          
          if [ -z "$ARTIFACT_ID" ]; then
            echo "未找到对应commit的有效构建产物,请先确保该commit的Commit Build工作流已成功运行"
            exit 1
          fi

          # 下载并解压产物
          gh api repos/${{ github.repository }}/actions/artifacts/$ARTIFACT_ID/zip > build-assets.zip
          unzip build-assets.zip -d ./dist

      - name: 创建Release并上传资产
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          # 创建Release,将dist目录下的产物作为发布资产上传
          gh release create ${{ github.ref_name }} \
            --title "Release ${{ github.ref_name }}" \
            --generate-notes \
            ./dist/*

注意事项

  1. 默认的GITHUB_TOKEN已满足权限要求,无需额外配置个人密钥;
  2. 可根据需求调整产物保留时长,最长可在仓库设置的Actions配置中调整为400天;
  3. 如果打tag时对应的commit构建产物还未生成或者构建失败,工作流会直接报错终止,避免发布无效资产。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 04:09:02