如何用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
关键修正说明:
- 调整执行顺序:先部署当前的Release版本,再升级为SNAPSHOT,确保Artifactory收到的是正式Release包
- 修复Settings.xml写入:用
>重定向符将Secrets中的配置内容写入本地文件,之前的代码缺少重定向,无法生成有效配置 - 提前获取Release版本:在修改版本前拿到当前正式版本,用于部署和打tag
- Git权限配置:通过
actions/checkout的token参数,赋予Action推送代码和tag的权限 - 版本校验(可选):防止误将SNAPSHOT版本部署到Artifactory
- 统一用mvnw:全程使用项目自带的Maven wrapper,避免环境Maven版本不一致导致的问题
内容的提问来源于stack exchange,提问作者Caos Develop
相关产品推荐
相关产品推荐

