GitHub Actions如何复用构建逻辑在新建标签时自动上传Release构建产物
实现方案
你完全不需要新建独立工作流重复编写构建逻辑,直接修改现有CI配置即可100%复用已有的依赖安装、编译、校验流程,仅需两处改动就能实现打tag自动发布Release并上传构建产物的需求。
步骤1:扩展工作流触发规则
在现有on配置块中新增tag推送的触发匹配,修改后触发配置如下:
on: push: branches: [ master ] tags: - 'v*' # 匹配v开头的版本tag,可根据你的tag命名规则自行调整匹配规则 pull_request: workflow_dispatch:
步骤2:新增条件触发的Release发布步骤
在现有build任务的末尾新增两个步骤,通过条件判断让这两个步骤仅在tag推送触发工作流时执行,普通master分支推送、PR触发时不会运行这部分逻辑,不会影响原有CI校验流程。
新增的配置如下,注意要放在原有的upload binaries步骤之后:
- name: Create version release id: create_release if: startsWith(github.ref, 'refs/tags/') uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: ${{ github.ref_name }} release_name: Release ${{ github.ref_name }} draft: false prerelease: false - name: Upload build assets to release if: startsWith(github.ref, 'refs/tags/') uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: build/bin/ asset_name: build-output-${{ github.ref_name }}.tar.gz asset_content_type: application/gzip
说明
- 原有所有CI逻辑(依赖安装、编译、代码格式校验、普通构建产物上传)在所有触发场景下都会正常执行,没有冗余重复代码
- 条件判断
startsWith(github.ref, 'refs/tags/')会自动识别当前触发源是否为tag推送,非tag场景下发布步骤会自动跳过 - 原配置中的
actions/upload-artifact@v3是将产物上传到工作流工件存储,供工作流运行详情页下载,和Release附件上传互不冲突 - 如果后续需要拆分多工作流复用逻辑,也可以将构建逻辑抽为可复用工作流,但对当前场景来说,直接加条件步骤是维护成本最低的实现方式
内容的提问来源于stack exchange,提问作者Jeff L
相关产品推荐
相关产品推荐

