如何配置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
相关产品推荐
相关产品推荐

