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

如何用GitHub Action实现Maven版本发布、部署及快照更新?

解决GitHub Action部署SpringBoot Release到Artifactory并升级SNAPSHOT版本的问题

你的核心问题是流程顺序搞反了——当前代码先把版本改成SNAPSHOT,再部署,导致推送到Artifactory的是SNAPSHOT版本,而非Release版本。同时还有配置文件写入、Git权限的小问题,下面是修正后的完整工作流:

name: Deploy Release & Bump Snapshot Version

on:
  push:
    branches: [ main ]

jobs:
  deploy-and-bump:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
        with:
          fetch-depth: 0 # 确保能获取完整Git历史,用于打tag
          token: ${{ secrets.GITHUB_TOKEN }} # 赋予推送代码和tag的权限

      - name: Set up JDK 17
        uses: actions/setup-java@v4
        with:
          java-version: '17'
          distribution: 'temurin'
          cache: maven

      - name: Make mvnw executable
        run: chmod +x mvnw

      - name: Get current release version
        id: get_version
        run: |
          export RELEASE_VERSION=$(./mvnw help:evaluate -Dexpression=project.version -q -DforceStdout)
          echo "release_version=$RELEASE_VERSION" >> $GITHUB_OUTPUT
          # 可选:防止部署SNAPSHOT版本
          if [[ $RELEASE_VERSION == *-SNAPSHOT ]]; then
            echo "Current version is SNAPSHOT, aborting release deployment"
            exit 1
          fi

      - name: Deploy release to Artifactory
        run: |
          # 正确写入Artifactory配置文件
          echo "${{ secrets.SETTINGS_XML }}" > ~/.m2/settings.xml
          # 用mvnw执行部署,可选跳过测试
          ./mvnw deploy -DskipTests

      - name: Create and push Git Tag
        run: |
          git config user.name "GitHub Action"
          git config user.email "action@github.com"
          git tag -a v${{ steps.get_version.outputs.release_version }} -m "Release v${{ steps.get_version.outputs.release_version }}"
          git push origin v${{ steps.get_version.outputs.release_version }}

      - name: Bump version to next SNAPSHOT
        run: |
          # 升级minor版本并设置为SNAPSHOT
          ./mvnw build-helper:parse-version versions:set -DnewVersion=\${parsedVersion.majorVersion}.\${parsedVersion.nextMinorVersion}.0-SNAPSHOT versions:commit
          # 提交版本变更
          git add pom.xml
          NEW_VERSION=$(./mvnw help:evaluate -Dexpression=project.version -q -DforceStdout)
          git commit -m "Bump version to $NEW_VERSION"
          # 推送版本变更到main分支
          git push origin main

关键修正说明:

  1. 调整执行顺序:先部署当前的Release版本,再升级为SNAPSHOT,确保Artifactory收到的是正式Release包
  2. 修复Settings.xml写入:用>重定向符将Secrets中的配置内容写入本地文件,之前的代码缺少重定向,无法生成有效配置
  3. 提前获取Release版本:在修改版本前拿到当前正式版本,用于部署和打tag
  4. Git权限配置:通过actions/checkout的token参数,赋予Action推送代码和tag的权限
  5. 版本校验(可选):防止误将SNAPSHOT版本部署到Artifactory
  6. 统一用mvnw:全程使用项目自带的Maven wrapper,避免环境Maven版本不一致导致的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 11:39:35