如何用相似但不同的Git标签触发对应Github Actions工作流
用特定Git标签分别触发GitHub Actions生产与预发布部署
问题背景
现有两个GitHub Action分别负责生产版本和预发布版本的发布,当前配置为:
- 生产部署:推送
v*格式标签时触发
name: Deploy production on: push: tags: - 'v*'
- 预发布部署:向
develop分支推送提交时触发
name: Deploy staging on: push: branches: - develop
现需调整为通过特定格式的Git标签分别触发两个Action:
- 生产环境标签:匹配
v0.0.0至v99.99.99,对应正则/^v\d{1,2}\.\d{1,2}\.\d{1,2}/i - 预发布环境标签:匹配
v0.0.0-rc.0至v99.99.99-rc.99,对应正则/^v\d{1,2}\.\d{1,2}\.\d{1,2}-rc\.\d{1,2}/i
自行尝试的配置存在问题,求正确实现方案。
正确配置方案
GitHub Actions的on.push.tags使用glob通配符模式而非标准正则,且需注意:若on.push下同时配置branches和tags,会触发逻辑AND(需同时满足分支推送和标签推送才会执行),这不符合需求,因此需移除分支配置,仅保留标签匹配规则。
生产环境Action配置
匹配vX.Y.Z格式标签(X/Y/Z为1-2位数字):
name: Deploy production on: push: tags: - 'v[0-9][0-9]?.[0-9][0-9]?.[0-9][0-9]?'
[0-9][0-9]?表示匹配1位或2位数字,刚好覆盖0-99的范围- 无需分支配置,只要推送符合格式的标签就会触发生产部署
预发布环境Action配置
匹配vX.Y.Z-rc.N格式标签(X/Y/Z/N为1-2位数字):
name: Deploy staging on: push: tags: - 'v[0-9][0-9]?.[0-9][0-9]?.[0-9][0-9]?-rc.[0-9][0-9]?'
- 同样用
[0-9][0-9]?限制数字位数,确保仅匹配符合要求的预发布标签 - 注意Action名称需对应为
Deploy staging,避免和生产配置混淆
关键提示
- 避免同时在
on.push下配置branches和tags,否则会导致触发条件过于严格 - GitHub Actions的glob模式不支持正则的
{1,2}语法,需用[0-9][0-9]?实现1-2位数字的匹配 - 上述配置为精确格式匹配,不会误触发带额外后缀的标签(如
v1.2.3-beta不会触发生产部署)
内容的提问来源于stack exchange,提问作者Levente Otta
相关产品推荐
相关产品推荐

