mvn释放,使用特定的私钥将其推送到git

  • 本文关键字:git 私钥 释放 mvn git maven ssh
  • 更新时间 :
  • 英文 :


我希望有人能帮上忙。我正在尝试在pom.xml中配置mvn release插件,以便将更新的pom版本和标记作为release:prepare的一部分推送到git repo。至关重要的是,它需要使用特定用户的ssh私钥,因为这最终将成为我们CI堆栈的一部分。

pom.xml中,我目前有一个非常简单的发布插件配置:

<build>
<plugins>
<!-- release plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.5.3</version>
</plugin>

pom中的scm设置如下所示:

<scm>
<connection>scm:git:git://ssh@bitbucket.org/**account**/**project**.git</connection>
<developerConnection>scm:git:ssh://git@bitbucket.org/**account**/**project**.git</developerConnection>
<url>https://bitbucket.org/**account**/**project**</url>
</scm>

我在pom中有以下属性(尽管不确定是否使用了它——我在一个松散相关的问题上找到了它的参考(:

<properties>
<project.scm.id>bitbucket.org</project.scm.id>

最后,我在mvn的settings.xml中有以下内容:

<servers>
<server>
<id>bitbucket.org</id>
<privateKey>~/.ssh/bitbucket-read-write-access</privateKey>
<passphrase></passphrase>
</server>

私钥文件~/.ssh/bitbucket-read-write-access存在,并且该文件夹中没有其他密钥(我故意删除了默认的id_rsa(

当我运行mvn release:perform时,当它试图推送到回购时失败:

[INFO] Executing: /bin/sh -c cd /home/nathanrussell/projects/**project** && git push ssh:********@bitbucket.org/**account**/**project**.git refs/heads/master:refs/heads/master
[INFO] Working directory: /home/nathanrussell/projects/**project**
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 13.162 s
[INFO] Finished at: 2018-11-09T15:25:36Z
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.5.3:prepare (default-cli) on project **project**: Unable to commit files
[ERROR] Provider message:
[ERROR] The git-push command failed.
[ERROR] Command output:
[ERROR] git@bitbucket.org: Permission denied (publickey).
[ERROR] fatal: Could not read from remote repository.
[ERROR] 
[ERROR] Please make sure you have the correct access rights
[ERROR] and the repository exists.

我能让它正确推送的唯一方法是将文件~/.ssh/bitbucket-read-write-access重命名为~/.ssh/id_rsa,这让我相信:

  • 与私钥关联的用户对repo具有正确的权限,并且公钥与repo用户正确关联
  • 我对pom.xml和/或settings.xml的配置在选择/使用所需私钥方面不太正确

(在有人建议之前,我不能简单地将密钥重命名为~/.ssh/id_rsa,因为当我们在CI堆栈上运行它时,它已经有了一个用于其他目的的默认ssh密钥(

非常感谢您对此的任何想法或帮助


一些附加信息:
如果我先执行export GIT_SSH_COMMAND="ssh -i ~/.ssh/bitbucket-read-write-access",然后执行git push,它会推送fine,这进一步使我相信私钥/公钥配置正确;而mvn配置是错误的。

为了实现这一点,我使用了我在原始问题中所写的GIT_SSH_COMMAND方法的变体。

虽然GIT_SSH_COMMAND在我的开发机器上工作,但我们CI堆栈上的git版本很旧(1.7.1(,不支持GIT_SSH_COMMAND!(GIT_SSH_COMMAND在2.10中引入(

我通过GIT_SSH环境变量和shell脚本的组合实现了这一点

export GIT_SSH=/var/home/teamcity/.ssh/ssh-using-bitbucket-read-write-access.sh

$ cat /var/home/teamcity/.ssh/ssh-using-bitbucket-read-write-access.sh
#!/bin/bash
ssh -i ~/.ssh/bitbucket-read-write-access $*

这感觉有点像黑客,但它有效。

有一个更清洁的解决方案;只需使用

ssh-add ~/.ssh/path-to-key

最新更新