2014-06-05 117 views
2

我有一個在Jenkins中運行的多模塊maven項目。我想將最終的工件(來自程序集構建的RPM)部署到Nexus服務器。我認爲沒有理由部署中間工件(因此沒有「mvn clean deploy」),因爲這會在我不需要的服務器上產生額外的垃圾。我們正在嘗試建立一個持續交付管道,所以我們不會部署SNAPSHOT版本 - 永遠。 Jenkins的各種插件似乎都集中在部署所有工件上。我怎麼才能部署我選擇的那個?如何將Jenkins中的特定工件部署到Nexus中?

編輯:

經過再三考慮,我願意來部署所有的文物承上啓下如果所有構建完成後的部署情況。如果我要走這條路線,我想使用「部署工件到maven存儲庫」後期構建操作。這個工具看起來很糟糕,因爲它缺少指定用戶名/密碼的功能。我知道這可以在settings.xml中指定,但顯然只有「.m2」中的一個。它似乎沒有看到我爲此構建指定的settings.xml。

對於重新部署工件,這看起來也很糟糕。在「Jenkins權威指南」中有一些verbage,但它談到了「本地」settings.xml。我所有的構建都發生在Jenkins奴隸身上,所以這不是一種選擇,甚至對詹金斯體系結構也沒有意義。

回答

0

這是我想出的醜陋的黑客。如果有人有一個更好的主意,我會很樂意給其他人「正確的」答案:

我意識到我需要部署父pom.xml和程序集。我在兩個獨立的後期構建步驟中做了這個。首先,我選擇了「調用頂級Maven目標」和Maven版本的「Maven」(我認爲這使用Jenkins版本的Maven,我不想在系統上放置不同的版本)。我用目標爲:

-s svn-admin/settings.xml -N deploy 

這隻部署父pom nexus與我指定的settings.xml。

當我想部署rpm時,會發生很大的黑客攻擊。我嘗試了一個「部署文件」目標,但沒有一個變量,我可以擴展到版本號,我無法指定確切的文件和通配符不擴展。相反,我做了一個「執行shell」選項,並用捲髮我發現here

env 
UPLOAD_FILE=assembly/target/ips-${POM_VERSION}-x.x86_64.rpm 
DESTINATION=http://mvnrepo01/nexus/content/repositories/releases/com/bla/ips/assembly/${POM_VERSION}/assembly-${POM_VERSION}.rpm 
sha1sum ${UPLOAD_FILE} | awk -F" " '{print $1}' | curl -v -u admin:password --upload-file - ${DESTINATION}.sha1 
md5sum ${UPLOAD_FILE} | awk -F" " '{print $1}' | curl -v -u admin:password --upload-file - ${DESTINATION}.md5 
curl -v -u admin:password --upload-file ${UPLOAD_FILE} ${DESTINATION} 

UPLOAD_FILE=assembly/pom.xml 
DESTINATION=http://mvnrepo01/nexus/content/repositories/releases/com/bla/ips/assembly/${POM_VERSION}/assembly-${POM_VERSION}.pom 
sha1sum ${UPLOAD_FILE} | awk -F" " '{print $1}' | curl -v -u admin:password --upload-file - ${DESTINATION}.sha1 
md5sum ${UPLOAD_FILE} | awk -F" " '{print $1}' | curl -v -u admin:password --upload-file - ${DESTINATION}.md5 
curl -v -u admin:password --upload-file ${UPLOAD_FILE} ${DESTINATION} 

就像我說的,這是一個醜陋的黑客。我很確定有些元數據文件沒有得到更新,但rpm,它是pom,並且它們的校驗和正在上傳。

0

您可以在'構建後操作'下使用'將工件部署到Maven倉庫'。看看這個answer

+0

不會部署所有構建的工件?這不是我想要的。我只想要最終的工件(一個rpm),並且根據需要它是父級pom。 – Jared

+0

顯然,如果你使用.m2/settings.xml中有用戶名密碼(我正在檢查svn中的settings.xml),你只能這樣做。 – Jared

1

如果你還需要通用的方法。

使用執行shell選項並手動使用mvn deploy命令,您可以在作業中傳遞您的版本和其他諸如groupID等參數作爲參數,如果您維護單獨的作業來構建並上傳,則會生成。

例:

出口M2_HOME =/PATH/TO /軟件/ Apache的行家-3.0。4 PATH = $ M2_HOME/bin中:$ JAVA_HOME/bin中:$ PATH 出口PATH

MVN -v

MVN部署:部署文件-Durl = http://someorg:8081/nexus/content/repositories/t1.snapshot/ -DrepositoryId = t1.snapshot -DartifactId =的artifactId -DgroupId = groupID -Dpackaging = zip -Dfile = $ {WORKSPACE} /filename.zip --Dversion = 1.0 -TEST-SNAPSHOT -s「/path/to/.m2/settings.xml」

相關問題