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

如何在GitHub Actions中将构建产物关联至Release页面?

解决GitHub Actions自动创建Release并关联构建产物的问题

先给你一个可直接复用的完整工作流配置,再逐个拆解你的问题:

name: Auto Create Release with Artifacts

on:
  # 推送v开头的tag时自动触发
  push:
    tags:
      - 'v*'
  # 支持手动触发,允许输入版本tag
  workflow_dispatch:
    inputs:
      tag_version:
        description: 'Release版本tag(如v1.0.2)'
        required: true

jobs:
  build-and-release:
    runs-on: ubuntu-latest
    steps:
      - name: 拉取代码
        uses: actions/checkout@v4

      - name: 构建项目(替换成你的实际构建命令)
        run: |
          # 示例:npm构建生成dist目录,可根据项目替换为mvn、go build等命令
          npm install
          npm run build
        env:
          ARTIFACT: dist.zip

      - name: 打包构建产物
        run: zip -r ${{ env.ARTIFACT }} dist/

      - name: 获取Release用的tag
        id: get_tag
        run: |
          # 区分触发来源:push tag触发用GITHUB_REF,手动触发用输入的tag
          if [[ "${{ github.event_name }}" == "push" ]]; then
            echo "tag=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
          else
            echo "tag=${{ github.event.inputs.tag_version }}" >> $GITHUB_OUTPUT
          fi

      - name: 创建Release并上传产物
        uses: softprops/action-gh-release@v2
        with:
          tag_name: ${{ steps.get_tag.outputs.tag }}
          name: Release ${{ steps.get_tag.outputs.tag }}
          files: ${{ env.ARTIFACT }}
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

问题1:打tag推送后工作流未触发,Release显示源码

  • 原因:
    1. 工作流未配置tag触发规则,GitHub Actions不会自动监听tag推送事件;
    2. GitHub默认会在推送tag时自动生成包含源码的Release,但这个自动生成的Release不会关联你的自定义构建产物。
  • 解决:
    在on字段中添加push: tags: ['v*'],让工作流仅在推送v开头的tag时触发;同时用softprops/action-gh-release工具手动创建Release并上传构建产物,覆盖默认的源码Release。

问题2:手动触发时出现Error: ⚠️ GitHub Releases requires a tag错误

  • 原因:手动触发工作流时未传递合法的tag参数,而创建Release必须指定一个有效的tag。
  • 解决:
    添加workflow_dispatch触发规则并定义tag_version输入参数,让手动触发时用户可输入tag;在工作流中通过github.event.inputs.tag_version获取该值,传递给Release创建步骤。

问题3:为什么创建Release需要指定本地路径,不能直接用已上传的artifact

  • 原因:
    upload-artifact的作用是将构建产物暂存到GitHub的Artifact存储中,供后续job跨环境使用或在Actions页面下载,但GitHub Release的上传工具仅能读取当前Runner环境中的本地文件,无法直接访问Artifact存储内的文件。
  • 说明:
    如果构建和Release在同一个job中,完全不需要使用upload-artifact,直接用构建后的本地文件路径即可;如果拆分多个job(如一个job构建上传artifact,另一个job下载并创建Release),则需要在Release的job中先添加actions/download-artifact步骤,将artifact下载到Runner本地,再指定该路径上传到Release。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 14:45:27