如何在GitHub Actions中根据标签名触发对应作业
GitHub Actions 标签条件作业配置方案
标签变量引用方式
GitHub Actions 内置的上下文变量 github.ref_name 可直接获取当前触发的引用名称:当触发事件为标签推送时,该变量值为完整标签名;分支推送、PR、手动触发等场景下,该变量值为对应分支名或触发引用名。
条件判断规则配置
你需要将两个作业重命名(同一工作流内不允许重名作业),分别为其添加互斥的if触发条件:
- Azure专属作业触发条件:仅当触发事件为标签推送、且标签名包含
azure时运行 - 通用作业触发条件:所有不满足上述专属作业条件的场景下运行
条件判断使用GitHub Actions内置的contains()函数匹配字符串,判断标签是否包含目标关键词。
完整配置示例
name: Build Image on: push: # 可选:如果只希望监听标签推送,可移除下方branches配置 tags: - '**' branches: - '**' pull_request: workflow_dispatch: jobs: # Azure专属作业 build-image-azure: name: Build Azure Image Job runs-on: [ self-hosted ] # 触发条件:推送标签+标签包含azure if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') && contains(github.ref_name, 'azure') }} steps: - uses: actions/checkout@v4 # 建议升级到官方维护的最新版本 - name: Run Build Step run: | ANSIBLE_VERSION=$(cat VERSION) docker images # 此处可添加azure专属构建逻辑 # 通用作业 build-image-general: name: Build General Image Job runs-on: [ self-hosted ] # 触发条件:不满足azure专属作业的所有场景 if: ${{ ! (github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') && contains(github.ref_name, 'azure')) }} steps: - uses: actions/checkout@v4 - name: Run Build Step run: | ANSIBLE_VERSION=$(cat VERSION) docker images # 此处可添加通用构建逻辑
额外说明
- 条件表达式必须放在
${{ }}包裹符内才能被GitHub Actions正确解析 - 配置中使用
startsWith(github.ref, 'refs/tags/')是为了严格限定仅标签推送场景生效,避免分支名包含azure时误触发专属作业 - 如果需要在手动触发时也能选择运行azure版本,可以给
workflow_dispatch增加输入参数,调整对应if条件即可。
内容的提问来源于stack exchange,提问作者Danny
相关产品推荐
相关产品推荐

