2017-05-21 34 views
1

我试图使用标准maven发布插件和Bitbucket管道发布我的maven项目。我创建了我自己的docker映像,并使用通过密码保护的私钥。我的Bitbucket帐户允许来自此Docker镜像的提交,并且Bitbucket管道可以在构建时通过环境变量注入私钥密码。如何使用标准maven插件发布时将密码传递给私钥

问题是,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> 

我使用的是最新的版本和单片机插件,分别为2.5.3和1.9.5

在我的pom.xml有服务器属性

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

和我的供应链管理的URL就像

<scm> 
    <url>https://bitbucket.org/user/repo</url> 
    <developerConnection>scm:git:[email protected]:user/repo</developerConnection 
    <connection>scm:git:[email protected]:user/repo</connection> 
</scm> 

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

任何想法如何解决?

回答

1

我设法使用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发布插件使用。

相关问题