首页 文章

基础设施与maven,Jenkins,Nexus

提问于
浏览
31

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

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

在开发人员的PC上,我将默认maven设置复制到添加此部分的C:\ Users .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 回答

  • 17

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

  • 1

    我不需要对我的项目pom.xml进行任何更改 . 相反,在jenkins "Post-build Actions"中我选择了"Deploy artifacts to Maven repository"然后选择"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>
    
  • 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 add(这是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 .

  • 1

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

    我认为的优点:

    • 更可移植(我们在生命周期的不同阶段使用不同的存储库),每个Jenkins实例都知道它自己的存储库

    • 对于阅读詹金斯工作的人来说更加明显

    • 更符合詹金斯的做事方式

  • 16

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

    -Dusername=<> -Dpassword=<>
    

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

相关问题