基础设施与maven,Jenkins,Nexus

时间:2011-08-05 01:01:14

标签: maven jenkins nexus

我们正在使用maven。我想设置基础架构,以便自动构建的工件将转到Nexus存储库。然后他们可以被开发人员使用。

我已经为我们的项目设置了一份Jenkins工作。 我在同一台服务器上安装了Nexus。

在开发者的PC上,我将默认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存储库?

5 个答案:

答案 0 :(得分:17)

要将工件部署到Nexus,您需要在pom中加入distributionManagement section。 Nexus附带了已为快照和版本设置的特定存储库。您应该为每个提供正确的路径,以便maven将快照和发布工件部署到正确的存储库。然后,只要您部署工件(通常使用mvn deploy或使用maven release plugin),工件就会部署在那里。默认情况下,Nexus已启用写入身份验证,因此您需要确保将具有正确凭据的server section添加到将要部署工件的任何人的settings.xml中。 Jenkins可以像任何其他用户一样对待。如果你有它deploy作为它的构建,那么每个构建将部署到Nexus。还有一个用于部署工件的构建后操作,以防您希望稍后在Jenkins工作中发生工件。

答案 1 :(得分:17)

我不需要对我的项目pom.xml进行任何更改。相反,在jenkins“Post-build Actions”中,我选择了“将工件部署到Maven存储库”,然后选择“Advanced”并将存储库URL设置为http://nexusserver:8081/nexus/content/repositories/releases,将存储库ID设置为deploymentRepo

在jenkins机器的~/.m2/settings.xml我添加了

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

</settings>

答案 2 :(得分:12)

更新pom.xml

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

然后为maven ~/.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>

更新:稍后我们离开了Snapshot存储库并使用maven-release-plugin只需要发布类型的存储库。

答案 3 :(得分:1)

如果这是一个Jenkins问题而不是Maven问题,我建议使用内置的Jenkins“部署工件到Maven存储库”大多数情况下的Post build Action。

我认为的优点:

  • 更具可移植性(我们在生命周期的不同阶段使用不同的存储库),每个Jenkins实例都知道它自己的存储库
  • 阅读Jenkins工作的人更明显
  • 更符合Jenkins的做事方式

答案 4 :(得分:1)

maven-release-plugin的maven目标参数可用于传递nexus存储库身份验证

-Dusername=<> -Dpassword=<>

使用jenkins项目,maven命令行,用于nexus repo身份验证