2011-08-05 76 views
30

我們正在使用maven。我想建立基礎架構,以便自動構建的工件將轉到Nexus存儲庫。然後他們可以被開發人員使用。基礎設施與maven,詹金斯,Nexus

我已經爲我們的項目設置了1項工作。 我在同一臺服務器上設置了Nexus。

在開發人員的電腦上,我將默認的maven設置複製到C:\ Users {user} .m2 \ settings.xml 添加此部分。 參考文獻:

Configuring Maven to Use a Single Nexus

Maven Settings Reference

<mirror> 
    <!--This sends everything else to /public --> 
    <id>nexus</id> 
    <mirrorOf>*</mirrorOf> 
    <url>http://myserver:8081/nexus/content/groups/public</url> 
</mirror> 

(我只是按照Repository Management with Nexus書)

什麼是我的下一個步驟應該是什麼? 詹金斯的工作應該有mvn install? 如何爲公司工件創建Nexus存儲庫?

回答

16

要將工件部署到Nexus,您需要在您的pom中包含distributionManagement section。 Nexus附帶已經爲快照和發佈版本設置的特定存儲庫。你應該給每一個正確的路徑,以便maven部署快照並釋放工件到正確的回購站。然後,無論何時您部署工件 - 通常使用mvn deploy或使用maven release plugin,工件都將部署在那裏。默認情況下,Nexus具有寫驗證功能,因此您需要確保將正確憑證的server section添加到將要部署工件的任何人的settings.xml中。詹金斯幾乎可以像其他任何用戶一樣對待。如果你的版本是deploy,那麼每個版本都會部署到Nexus。如果你希望在Jenkins工作中稍後發生,還有一個用於部署構件的構建後操作。

+0

雖然這將工作使用,它迫使你的項目,知道你的神器庫的位置。看看[這個答案](http://stackoverflow.com/a/11952832/235179)讓詹金斯專門處理工件部署。 –

12

更新pom.xml

<distributionManagement> 
    ... 
    <repository> 
     <id>deploymentRepo</id> 
     <name>Internal Releases</name> 
     <url>http://nexusserver:8081/nexus/content/repositories/releases</url> 
    </repository> 
    ... 
    </distributionManagement> 

然後行家~/.m2/settings.xml加(今屬的Nexus默認部署用戶)

<server> 
    <id>deploymentRepo</id> 
    <username>deployment</username> 
    <password>deployment123</password> 
</server> 

然後mvn deploy

然後就可以使用部署神器任項目,就像標準工件一樣。 在這種情況下,添加到pom.xml中

<!-- company repositories --> 
    <repository> 
     <id>deploymentRepoReleases</id> 
     <name>Releases (Nexus)</name> 
     <url>http://nexusserver:8081/nexus/content/repositories/releases/</url> 
    </repository> 
    <repository> 
     <id>deploymentRepoSnapshots</id> 
     <name>Snapshots (Nexus)</name> 
     <url>http://nexusserver:8081/nexus/content/repositories/snapshots/</url> 
    </repository> 

UPDATE:後來我們從快照庫路程,使用maven-release-plugin只需要釋放式的倉庫當中。

16

我不需要對我的項目pom.xml進行任何更改。相反,在jenkins的「構建後行動」中,我選擇了「將構件部署到Maven存儲庫」,然後選擇「高級」,並將存儲庫URL設置爲http://nexusserver:8081/nexus/content/repositories/releases,將存儲庫ID設置爲deploymentRepo

~/.m2/settings.xml詹金斯機器上我加

<settings> 
    <servers> 
    <server> 
     <id>deploymentRepo</id> 
     <username>deployment</username> 
     <password>deployment123</password> 
    </server> 
    </servers> 
    ... 

</settings> 
+0

發行版存儲庫的Nexus默認設置是爲了只允許部署1個版本一次。你是否有第二份工作才能發佈(即部署到Nexus)? –

+1

@PaulVerest你可以添加一個Pre Step來執行Shell並運行'mvn versions:set -DnewVersion = 1。$ {BUILD_NUMBER} versions:commit',命名版本號後的版本。然後當這個Post-build Action發生時,它會將它部署爲該版本。 –

+0

@JoshJohnson這是史蒂夫布朗的回答。 我個人建議使用maven-release-plugin而不是versions-maven-plugin(版本:set) –

1

如果這是一個問題,詹金斯而非Maven的問題,我建議你使用內置的詹金斯「部署文物,Maven倉庫」後建設行動對於大多數情況。

優勢在我看來:

  • 更便攜的(我們使用不同的存儲庫的生命週期的不同階段),並且每個詹金斯實例知道它自己的倉庫
  • 更明顯,任何閱讀詹金斯工作
  • 更符合做事
1

以下Maven目標參數的行家釋放小插件詹金斯一路行來,可以用來傳遞nexu版本庫認證

-Dusername=<> -Dpassword=<> 

與詹金斯項目,Maven的命令行,爲的Nexus回購認證