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

如何基于Maven pom版本条件触发GitHub Action的执行步骤

实现方案

1. 提取POM版本号存入环境变量

你可以直接调用Maven自带的help:evaluate插件获取当前POM的版本号,然后写入GitHub Actions内置的GITHUB_ENV文件,后续所有步骤都可以直接读取这个环境变量:

- name: 提取POM版本号
  run: echo "POM_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout)" >> $GITHUB_ENV

参数-q是静默输出,-DforceStdout会直接把版本号打印到标准输出,不会携带多余的Maven运行日志。

2. 按分支和版本号控制步骤执行

直接使用GitHub Actions的if条件语法,结合内置的字符串匹配函数endsWith做判断即可,同时可以排除PR触发的场景,完全对齐你之前在Jenkins里的逻辑:

  • develop分支执行条件:if: github.ref == 'refs/heads/develop' && endsWith(env.POM_VERSION, '-SNAPSHOT') && github.event_name != 'pull_request'
  • main/master分支执行条件:if: contains(fromJson('["refs/heads/main", "refs/heads/master"]'), github.ref) && !endsWith(env.POM_VERSION, '-SNAPSHOT') && github.event_name != 'pull_request'

完整Workflow示例

name: Maven 发布流程
on:
  push:
    branches:
      - develop
      - main
      - master
  pull_request: # 预留PR触发的其他校验逻辑,发布逻辑会自动排除PR

jobs:
  publish:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: 配置JDK
        uses: actions/setup-java@v4
        with:
          java-version: '17' # 替换为你项目实际使用的JDK版本
          distribution: 'temurin'
          cache: maven
      - name: 提取POM版本号
        run: echo "POM_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout)" >> $GITHUB_ENV
      - name: 打印版本号(可选,用于调试)
        run: echo "当前POM版本为 ${{ env.POM_VERSION }}"

      # 推送到develop分支且版本为SNAPSHOT时执行
      - name: 发布SNAPSHOT版本到Maven仓库
        if: github.ref == 'refs/heads/develop' && endsWith(env.POM_VERSION, '-SNAPSHOT') && github.event_name != 'pull_request'
        run: mvn deploy # 替换为你实际的发布命令

      # 推送到main/master分支且版本不为SNAPSHOT时执行
      - name: 发布正式版本到Maven仓库
        if: contains(fromJson('["refs/heads/main", "refs/heads/master"]'), github.ref) && !endsWith(env.POM_VERSION, '-SNAPSHOT') && github.event_name != 'pull_request'
        run: mvn deploy # 替换为你实际的发布命令

可选优化方案

如果你不想在每个步骤里写复杂的if条件,也可以把分支和版本的匹配逻辑提前放到job级别的if条件,拆分两个独立的job分别处理SNAPSHOT和正式版本的发布,逻辑会更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 14:24:05