我正在开发的项目使用 maven-release 插件来管理版本并将工件发布到包注册表。为了在 GitLab CI 管道的上下文中使用它,到目前为止,我使用了 SSH 密钥解决方法,这使得这项工作可行:
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 "[email protected]" # 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 帐户绑定,并且需要比访问令牌更多的设置,所以我现在想切换到这些密钥。为此,我必须使用这样的 https-remote:
https://oauth2:$TOKEN@$REPO_URL
(变量名称在这里应该是不言自明的)。但令我困惑的是,我还没有设法让 Maven 使用 git 远程。
首先,我尝试在脚本中的一个步骤中设置 git 远程,如下所示:
git remote set-url --push https://oauth2:$TOKEN@$REPO_URL
。在管道的日志中,我可以看到 Maven 忽略了 git 远程并尝试推送到在 pom.xml
中设置的 ssh 远程: [INFO] Executing: /bin/sh -c cd '/builds/dev/pipeline-test' && 'git' 'push' 'git@****/pipeline-test.git' 'refs/heads/main:refs/heads/main'
(实际存储库 URL 已编辑,git@***
部分是它应该在的位置)说 https://...
但没有)。mvn -B -DconnectionUrl=scm:git:$REMOTE ...
有人曾经这样做过并可以告诉我如何强制 Maven Release 插件推送到不同的 git 远程吗?
要使
maven-release-plugin
使用gitlabproject access token
,您可以按照以下步骤操作:
Access Token
权限的 Gitlab api
Variable
,我们称之为 MavenReleaseToken
pom.xml
中修改 scm
:<scm> <connection>scm:git:https://root:[email protected]/gitlab/demo.git</connection>
<url>https://gitlab.company.de/gitlab/demo.git</url>
<tag>HEAD</tag> </scm>
mvn
命令中使用 -Dusername=root -Dpassword=$MavenReleaseToken
有关更多信息,请参阅:https://blog.ordix.de/maven-release-mit-der-gitlab-ci