如何仅在推送新版本(含新标签)时触发GitHub Action?
如何仅在推送新标签时触发GitHub Action
完全可以做到!你只需要在GitHub Action的工作流配置文件里精准设置触发条件,就能实现只在推送新标签时运行Action,同时跳过master分支的普通代码推送,也不需要额外创建发布分支。
核心配置方法
在你的.github/workflows/目录下的YAML配置文件里,把on字段设置为仅监听带有特定格式标签的推送事件:
name: 仅标签触发的Action on: push: # 匹配所有以v开头的标签,比如v1.0.0、v2.1.3-beta,可根据需求调整规则 tags: - 'v*' # 明确排除master分支的推送(可选,让触发逻辑更严谨) branches-ignore: - 'master'
关键细节说明
- 标签匹配规则:
tags: ['v*']会匹配所有以v开头的标签,如果你需要更严格的语义化版本匹配,可以改成['v[0-9]+.[0-9]+.[0-9]+'],避免误触发非版本类标签。 - 排除分支推送:加上
branches-ignore: ['master']后,就算有人同时推送标签和master分支代码,也只会触发一次Action,且单纯推送master分支时不会触发。 - 测试验证:配置完成后,你可以用
git tag v1.0.0 && git push origin v1.0.0推送一个新标签,此时Action会自动启动;而直接推送master分支代码,Action不会运行。
额外技巧:区分正式版与预发布标签
如果需要针对正式版标签(如v1.0.0)和预发布标签(如v1.0.0-beta)执行不同逻辑,可以用if条件判断:
jobs: build: runs-on: ubuntu-latest steps: - name: 执行正式版发布逻辑 if: startsWith(github.ref, 'refs/tags/v') && !contains(github.ref, '-') run: echo "正在处理正式版本发布" - name: 执行预发布版逻辑 if: startsWith(github.ref, 'refs/tags/v') && contains(github.ref, '-') run: echo "正在处理预发布版本发布"
这样就能根据标签格式灵活执行对应操作啦!
内容的提问来源于stack exchange,提问作者mrvnklm




