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

GitLab CI中用Access Token配置Maven Release Plugin失败求助

问题

我负责的项目使用maven-release plugin管理版本并将构件发布到包仓库。此前在GitLab CI流水线中采用SSH密钥方案实现该插件功能,对应的CI配置如下:

release-job:
  image: maven:3.9.6-eclipse-temurin-17-focal
  stage: release
  rules:
    - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $VERSION'
  script:
    - git config --global user.email "bla@bla.org" # just putting some stuff in here
    - git config --global user.name "GitLab"
    - mvn -B -DscmCommentPrefix="[skip ci]" release:prepare release:perform -DreleaseVersion=$VERSION --settings settings.xml

由于SSH密钥绑定特定用户GitLab账号且配置繁琐,我计划切换为Access Token,需使用https://oauth2:$TOKEN@$REPO_URL格式的HTTPS远程仓库地址。但尝试多次均无法让Maven使用该远程地址:

  1. 在脚本中执行git remote set-url --push https://oauth2:$TOKEN@$REPO_URL,但Maven仍尝试推送至pom.xml中配置的SSH远程地址;
  2. 通过参数mvn -B -DconnectionUrl=scm:git:$REMOTE ...传入远程地址,同样被Maven忽略。

我查阅了Maven官方文档相关内容并尝试了所有可行选项,但结果始终一致。请问如何强制Maven Release插件推送至指定的Git远程仓库?

解决方案

核心修复思路

Maven Release插件会优先读取pom.xml中的SCM配置,同时依赖Git本地配置的远程仓库地址。要强制使用HTTPS+Access Token的地址,需要同时覆盖Git远程配置和Maven插件的SCM参数:

  • 仅设置--push地址不足以覆盖插件读取的默认远程地址,需同时更新origin的主URL和push URL;
  • 插件在推送版本标签和分支时默认使用developerConnection配置,仅传connectionUrl会被忽略,需同时指定两个参数。

修改后的GitLab CI配置

release-job:
  image: maven:3.9.6-eclipse-temurin-17-focal
  stage: release
  rules:
    - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $VERSION'
  variables:
    # 自动将GitLab默认的SSH仓库地址转为HTTPS+Token格式
    HTTPS_REPO_URL: "${CI_REPOSITORY_URL/git@/https://oauth2:$RELEASE_TOKEN@}"
  script:
    - git config --global user.email "bla@bla.org"
    - git config --global user.name "GitLab"
    # 覆盖Git远程仓库的fetch和push地址
    - git remote set-url origin "$HTTPS_REPO_URL"
    - git remote set-url --push origin "$HTTPS_REPO_URL"
    # 强制指定Maven Release插件使用的SCM连接地址
    - mvn -B -DscmCommentPrefix="[skip ci]" 
        -DconnectionUrl=scm:git:$HTTPS_REPO_URL 
        -DdeveloperConnectionUrl=scm:git:$HTTPS_REPO_URL 
        release:prepare release:perform 
        -DreleaseVersion=$VERSION 
        --settings settings.xml

关键注意事项

  • Access Token权限:确保$RELEASE_TOKEN是GitLab项目级/组级Access Token,需勾选read_repository和write_repository权限;
  • 敏感信息存储:将$RELEASE_TOKEN存入GitLab CI的受保护变量中,避免泄露;
  • pom.xml配置冲突:如果pom.xml中硬编码了SSH格式的SCM地址,必须通过上述Maven参数覆盖,否则插件会优先读取pom中的配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 04:43:29