如何在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/*
注意事项
- 默认的
GITHUB_TOKEN已满足权限要求,无需额外配置个人密钥;- 可根据需求调整产物保留时长,最长可在仓库设置的Actions配置中调整为400天;
- 如果打tag时对应的commit构建产物还未生成或者构建失败,工作流会直接报错终止,避免发布无效资产。
内容的提问来源于stack exchange,提问作者kibudude
相关产品推荐
相关产品推荐

