2017-05-21 66 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發佈插件使用。

相關問題