3

我正在尝试使用标准的 Maven 发布插件和 Bitbucket 管道发布我的 Maven 项目。我创建了自己的 docker 镜像,私钥受密码保护。我的 Bitbucket 帐户允许来自此 docker 映像的提交,并且 Bitbucket 管道能够在构建时通过环境变量注入私钥密码。

问题是 maven 发布插件会忽略所有内容并要求输入密码,这是不可接受的手动步骤。

我在 /root/.m2 中的 settings.xml 看起来像

<server>
    <id>bitbucket.org</id>
    <privateKey>/root/.ssh/id_rsa</privateKey>
    <passphrase>${env.BB_PIPELINES_MAVEN_3_3_9_JDK_8_SSH_PASSPHRASE</passphrase>
</server>

我正在使用最新版本和 scm 插件,分别为 2.5.3 和 1.9.5

在我的 pom.xml 中有 server 属性

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

我的 scm 网址就像

<scm>
    <url>https://bitbucket.org/user/repo</url>
    <developerConnection>scm:git:git@bitbucket.org:user/repo</developerConnection
    <connection>scm:git:git@bitbucket.org:user/repo</connection>
</scm>

我试图使用 ssh-agent,它似乎可以工作,但看起来 ssh-agent 也不允许在命令行中传递密码。

任何想法如何解决?

4

1 回答 1

4

我设法使用 expect 和 ssh-agent 解决了一些问题。

在我的 .bashrc 我放

eval `ssh-agent -s`
/root/load-private-key.sh $BITBUCKET_PIPELINES_MAVEN_3_3_9_JDK_8_SSH_PASSPHRASE

我的 load-private-key.sh 文件看起来像

#!/usr/bin/expect -f
set password [lindex $argv 0];
set timeout 10
spawn ssh-add /root/.ssh/id_rsa
expect "Enter passphrase for /root/.ssh/id_rsa: "
sleep 1
send $password\n
expect "Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)"

现在每个构建会话都以加载到内存中的私钥开始,该私钥可以被标准 maven 发布插件使用。

于 2017-05-28T07:23:03.457 回答