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

如何配置GitHub工作流:依赖前置工作流且仅在标签推送时运行

GitHub工作流实现:推送触发测试+标签推送自动发布(依赖测试通过)

方案一:单工作流多阶段(推荐,和Azure DevOps逻辑一致)

把构建测试和发布打包放到同一个工作流里,通过needs设置依赖,同时给发布阶段添加标签触发的条件,完全匹配你在Azure DevOps里的使用习惯。

完整配置示例:

name: 构建测试与发布
on: [push]  # 所有推送事件都触发这个工作流

jobs:
  # 第一个job:所有推送都执行构建与测试
  build-test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      # 替换成你的实际构建、测试命令
      - name: 执行项目构建
        run: npm run build
      - name: 运行单元测试
        run: npm run test

  # 第二个job:仅标签推送时执行,且依赖build-test成功完成
  publish:
    needs: build-test  # 必须等build-test job成功结束才会启动
    runs-on: ubuntu-latest
    # 条件:仅当推送的是标签时运行
    if: startsWith(github.ref, 'refs/tags/')
    steps:
      - uses: actions/checkout@v4
      # 替换成你的实际打包、发布步骤
      - name: 打包应用工件
        run: npm run package
      - name: 创建GitHub Release并上传工件
        uses: softprops/action-gh-release@v2
        with:
          files: dist/*  # 替换成你的工件路径

方案优势

  • 逻辑直观,和Azure DevOps的阶段依赖完全对应,学习成本低
  • 所有流程在同一个工作流文件里,便于维护和查看运行日志
  • 标签推送时会自动先跑构建测试,通过后无缝执行发布,非标签推送只跑测试,满足快速反馈需求

方案二:两个独立工作流(适合拆分场景)

如果必须把构建测试和发布拆成两个独立的工作流文件,可以通过workflow_run触发+条件判断实现依赖和标签限制。

第一个工作流(构建测试:.github/workflows/build-test.yml)

所有推送都触发,负责构建和测试:

name: 构建测试
on: [push]

jobs:
  build-test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: 执行构建
        run: npm run build
      - name: 运行测试
        run: npm run test

第二个工作流(发布打包:.github/workflows/publish.yml)

仅当第一个工作流成功完成,且触发第一个工作流的事件是标签推送时才运行:

name: 发布打包
on:
  workflow_run:
    workflows: ["构建测试"]  # 对应第一个工作流的名称
    types: [completed]  # 仅当第一个工作流完成时触发

jobs:
  publish:
    runs-on: ubuntu-latest
    # 双重条件:第一个工作流成功,且原事件是标签推送
    if: ${{ github.event.workflow_run.conclusion == 'success' && startsWith(github.event.workflow_run.head_branch, 'refs/tags/') }}
    steps:
      - uses: actions/checkout@v4
        with:
          ref: ${{ github.event.workflow_run.head_sha }}  # 检出标签对应的提交代码
      - name: 打包应用
        run: npm run package
      - name: 创建Release并上传工件
        uses: softprops/action-gh-release@v2
        with:
          files: dist/*

注意事项

  • 要确保workflows字段的值和第一个工作流的name完全一致
  • 通过head_sha检出对应提交,避免打包代码和测试的版本不一致
  • 可以添加branches字段限定触发分支,比如只允许主分支的标签推送触发发布

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 22:15:36