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

如何通过GitHub Actions基于指定Tag格式验证限制Release作业

如何在GitHub Actions作业层级匹配特定格式的Tag以执行作业

我有一个通过Maven构建的应用,快照构建成功后会创建符合<appname>-<app_build_type>-<github-actions-run_number>-<env>-origin/<branch>格式的Tag(示例:java-maven-44-dev-origin/develop)。现需通过GitHub Actions的Release工作流,仅当Tag匹配该格式时才执行maven_build作业,不匹配则跳过或失败该作业。尝试了以下两种方法均无效,请求助实现方案(仅在作业层级处理,不通过run命令):

尝试过的无效方法

方法1:

name: maven-release

on:
  workflow_dispatch:

jobs:
  checkout_code:
    runs-on: [ubuntu-latest]
    steps:
      - name: Checkout
        uses: actions/checkout@v3
        with:
          fetch-depth: 0

  maven_build:
    runs-on: [ubuntu-latest]
    if: ${{ github.ref == 'refs/tags/*-origin/develop' }}
    needs: checkout_code
    steps:
      - name: Run maven build
        run: |
          mvn clean install

方法2:

name: maven-release

on:
  workflow_dispatch:

jobs:
  checkout_code:
    runs-on: [ubuntu-latest]
    steps:
      - name: Checkout
        uses: actions/checkout@v3
        with:
          fetch-depth: 0

  maven_build:
    runs-on: [ubuntu-latest]
    if: contains(github.ref, 'refs/tags/*-origin/develop')
    needs: checkout_code
    steps:
      - name: Run maven build
        run: |
          mvn clean install

解决方案

GitHub Actions的if条件支持通过matches函数使用正则表达式进行匹配,这是实现你需求的正确方式。之前的方法无效原因:

  • 方法1使用==做精确匹配,不支持通配符*
  • 方法2的contains函数中*只是普通字符,不具备通配功能

以下是符合要求的配置,正则完全匹配你定义的Tag格式:

name: maven-release

on:
  workflow_dispatch:

jobs:
  checkout_code:
    runs-on: [ubuntu-latest]
    steps:
      - name: Checkout
        uses: actions/checkout@v3
        with:
          fetch-depth: 0

  maven_build:
    runs-on: [ubuntu-latest]
    # 正则匹配完整的Tag格式
    if: ${{ matches(github.ref, '^refs/tags/[a-zA-Z0-9-]+-[a-zA-Z0-9-]+-[0-9]+-[a-zA-Z0-9-]+-origin/[a-zA-Z0-9/]+$') }}
    needs: checkout_code
    steps:
      - name: Run maven build
        run: |
          mvn clean install

正则说明

  • ^refs/tags/:匹配github.ref的固定前缀
  • [a-zA-Z0-9-]+:匹配<appname>,允许字母、数字、连字符
  • -:格式中的分隔符
  • [a-zA-Z0-9-]+:匹配<app_build_type>
  • -:分隔符
  • [0-9]+:匹配<github-actions-run_number>(纯数字)
  • -:分隔符
  • [a-zA-Z0-9-]+:匹配<env>
  • -origin/:格式中的固定字符串部分
  • [a-zA-Z0-9/]+$:匹配<branch>,支持分支名中的/(如feature/new-function)

如果需要更严格的匹配(比如限定env只能是dev/prod),可以修改对应部分的正则,例如将[a-zA-Z0-9-]+替换为(dev|prod)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 08:25:21