我正在尝试在Gitlab服务器上托管的多模块项目上执行mvn release:prepare
。
我的主POM的pom.xml
包含:
<scm>
<connection>scm:git:http://my-git-server.example.com/git/somebody/my-project.git</connection>
<url>http://my-git-server.example.com/git/somebody/my-project</url>
</scm>
当我mvn release:prepare -DautoVersionSubmodules=true
时,它编译所有内容并运行测试,但随后失败:
[INFO] Executing: /bin/sh -c cd /home/somebody/git/my-project && git tag -F /tmp/maven-scm-1594218362.commit my-project-1.0.0
[INFO] Working directory: /home/somebody/git/my-project
[INFO] Executing: /bin/sh -c cd /home/somebody/git/my-project && git push http://my-git-server.example.com/git/somebody my-project-1.0.0
[INFO] Working directory: /home/somebody/git/my-project
...
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.3.2:prepare (default-cli) on project iwes-lib-master: Unable to tag SCM
[ERROR] Provider message:
[ERROR] The git-push command failed.
[ERROR] Command output:
[ERROR] fatal: repository 'http://my-git-server.example.com/git/somebody/' not found
[ERROR] -> [Help 1]
所以它告诉我maven-release-plugin认为我的Git存储库的父目录是存储库,在那里拯救。
添加developerConnection
无济于事。
尝试使用SVN时,“Access Denied:
”失败<scm>
<connection>scm:git:http://my-git-server.example.com/git/somebody/my-project.git</connection>
<developerConnection>ssh://git@my-git-server.example.com:10022/somebody/my-project.git</developerConnection>
<url>http://my-git-server.example.com/git/somebody/my-project</url>
</scm>
给了我:
[INFO] Executing: /bin/sh -c cd /home/jra/Documents/git/my-project && git push ssh://git@my-git-server.example.com:10022/somebody my-project-master-1.0.0
....
[ERROR] Access denied.
因此,它再次使用父目录。
如何强制发布插件使用我在那里声明的真实URL?
答案 0 :(得分:2)
编辑:我在这里提出的解决方法对release:perform
不起作用,事实上,直到今天我才找到可行的解决方案。我正在手动进行发布,我将在下面介绍。
我对此问题进行了更多调查,我认为这是一个错误。我为它提交了一份JIRA:MRELEASE-900
我转储了maven-release-plugin
,我现在正在通过以下方式手动执行发布(例如:版本1.3.0,快照版本是1.3.0-SNAPSHOT):
git checkout master && git pull
只是为了确定git checkout -b release-1.3 && git push -u origin release-1.3
cd path/to/my/master/project
mvn versions:set
,它要求我指定1.3.0-SNAPSHOT
的新版本,我输入1.3.0
git commit -a
所以新版本已签入git tag release-1.3.0
git push && git push --tags
- 此时,分支release-1.3.0
中有一个标记release-1.3
,其中所有相关的POM版本号均为1.3.0
git checkout master
git merge release-1.3
- 尚未提交,我首先更新版本。mvn versions:set
,设置新的SNAPSHOT版本,根据我的惯例,这将是1.4.0-SNAPSHOT
git commit -a
git push
然后,我可以在标记release-1.3.0
上创建Jenkins作业或我喜欢的内容来处理发布。
- 旧答案供以下参考 -
在探索并尝试各种各样的事情后,我取得了一些进展:我必须让maven-release-plugin认为my-project.git
是一个目录,并在URL中添加一个虚假文件。
以下作品:
<scm>
<connection>scm:git:http://my-git-server.example.com/git/somebody/my-project.git/.git</connection>
<developerConnection>scm:git:http://my-git-server.example.com/git/somebody/my-project.git/.git</developerConnection>
<url>http://my-git-server.example.com/git/somebody/my-project</url>
</scm>
与tSSH相同:
<scm>
<connection>scm:git:http://my-git-server.example.com/git/somebody/my-project.git/.git</connection>
<developerConnection>ssh://git@my-git-server.example.com:10022/somebody/my-project.git/.git</developerConnection>
<url>http://my-git-server.example.com/git/somebody/my-project</url>
</scm>
现在release:prepare
有效,但release:perform
失败,因为它想从ssh://git@my-git-server.example.com:10022/somebody/my-project.git/.git
下载。
答案 1 :(得分:2)
我在同一个问题上遇到了类似的问题
mvn deploy scm:tag
我使用gitlab安装,也不允许这样的通话
[INFO] Executing: /bin/sh -c cd /home/user/prog/gitlab/test-user_server && git tag -F /tmp/maven-scm-482134407.commit test-user_server-1.1-SNAPSHOT
[INFO] Working directory: /home/user/prog/gitlab/test-user_server
[INFO] Executing: /bin/sh -c cd /home/user/prog/gitlab/test-user_server && git push user@gitlab.my.server:testplus/test-user_server.git refs/tags/test-user_server-1.1-SNAPSHOT
[INFO] Working directory: /home/user/prog/gitlab/test-user_server
[ERROR] Provider message:
[ERROR] The git-push command failed.
[ERROR] Command output:
[ERROR] Permission denied, please try again.
问题是这个电话
/bin/sh -c cd /home/user/prog/gitlab/test-user_server && git push user@gitlab.my.server:testplus/test-user_server.git refs/tags/test-user_server-1.1-SNAPSHOT
但是这个调用并不是必需的,因为我在git存储库的根目录中启动了mvn。而是像下面那样的命令行调用。
git push origin refs/tags/test-user_server-1.1-SNAPSHOT
所以我将我的pom.xml中的scm配置修改为如下所示的字符串,它对我来说就像魅力一样。
<scm>
<developerConnection>scm:git:origin</developerConnection>
</scm>
我是在Linux操作系统下开发的,所以我没有测试它是否也适用于Windows系统。
答案 2 :(得分:2)
正如一些人所说,这些解决方法可以使工作成为发布的准备阶段而不是执行阶段(在我的情况下就是这样)。 我终于通过找到输入数据以放置developperConnection标记的正确方法来完成一个完整的发布工作:
<scm>
<developerConnection>scm:git:git@gitlab.company.com:groupProject/project.git</developerConnection>
<tag>HEAD</tag>
</scm>
在我的案例中接受了许多其他URL格式,但最终在发布的执行或准备阶段失败(scm:git:ssh:// git @ gitlab ...例如有这个问题)。 我不知道这个解决方案是否特定于Gitlab或者我的项目,但我花了很多时间找到这个解决方法......
答案 3 :(得分:0)
我有同样的问题,在我的情况下,插件推送远程使用正确版本更新的pom,但是当试图生成标记时它失败,因为它试图将标记推送到父目录。
按下以掌握使用正确版本更新的pom
git push git@myGitLabURL:parent/project.git refs/heads/master:refs/heads/master
但是当它试图推动标签时
push git@myGitLabURL:parent refs/tags/v1.46
有人解决了吗?
答案 4 :(得分:0)
在Windows 10上(如果使用gitlab),scm部分可能看起来像(例如):
<scm>
<url>https://gitlab.yourdomain.com/yourproject</url>
<connection>scm:git:https://gitlab.yourdomain.com/yourproject.git</connection>
<developerConnection>scm:git:https://gitlab.yourdomain.com/yourproject.git</developerConnection>
<tag>HEAD</tag>
</scm>
在mvn
命令行中(在下面)提供用户名和密码可以解决运行shell提示脚本时Maven-on-Windows10失败或读取用户名错误:
mvn release:clean release:prepare -Dusername=someUserName -Dpassword=somePassword
但:如果您需要在用户名和密码中提供非标准字符(例如fred@somedomain.com
和some#pwd!
方面),则需要使用URL编码在命令行上如下:
mvn release:clean release:prepare -Dusername=fred%40somedomain.com -Dpassword=some%23pwd%21