在 Jenkins 中配置 Maven 设置

Config maven setting in Jenkins

我的项目有 3 个 maven 模块,它们是通过 nodejs 脚本构建的。

现在我想与 Jenkin 和 Nexus 集成。我的 Jenkin 构建配置如下所示:

我还在 Provide configuration files build step in Build 部分添加了我的 maven settings.xml 但是它没有用。 Maven 仍然失败,无法解析我的 Nexus 存储库中的依赖项。

在我的本地 Maven settings.xml 我已经为 Nexus 存储库和另一个存储库添加了一些配置。

你能给我解释一下这个案例吗?我是 Jenkin 的新手。

提前致谢。

I also add my maven settings.xml in Provide configuration files

等等...您永远不必这样做:任何 Maven 命令都会在 $HOME/.m2/settings.xml 中查找 settings.xml 文件:您只需要确保用户 运行 Jenkins slave(实际执行作业的地方)确实在该特定文件夹中有该文件。
然后确保用户可以先在本地 maven 项目上使用 mvn clean install。一旦成功,您就可以尝试您的 Jenkins 构建。

我只是找到了一种解决方法,将 mvn-settings.xml 直接添加到我的文件夹并编辑 运行 命令,例如:

mvn clean install -s mvn-settings.xml

我想出了一个结合问题和答案的解决方案(均来自 Anh)。 Anh 解决问题的方法是我们必须包含 settings.xml ,它可能包含凭据(在我的例子中,它有一些机密信息),它不应该是存储库的一部分(如突出显示的sigi 的评论)。

这就是我避免这种风险的方法(一步一步):

  1. 从 Jenkins 主页转到管理 Jenkins > 托管文件
  2. 点击添加一个新配置 > Maven settings.xml > 保持 ID 未编辑(最好)> 提交
  3. 提供一个名称以便于识别和评论(如有必要),然后将 xml 内容复制粘贴到内容区域。单击提交。
  4. 转到项目的构建配置,在 Build Environment 部分下,选中 Provide Configuration files 选项。
  5. 从文件下拉列表中,选择您在上面第 3 步中添加的文件。
  6. 现在的重点是填写目标字段。提供一个文件名(或者如果你需要的话,相对于你的项目的路径)。如果您需要在构建配置的其他部分使用该配置(这些来自配置文件提供程序插件),您还可以选择填写一个变量名。
  7. 现在在构建部分,提供以下命令从签出的项目路径中获取 settings.xml 文件(jenkins 复制到那里供您使用):
    clean install -s settings.xml

请注意,我在 Jenkins 中创建的构建项目是 Maven 项目。

转到您的作业配置

比构建部分

添加构建步骤:- 调用顶级 Maven 目标并填写 Maven 版本和目标

然后单击“高级”按钮并提及 设置 文件路径,如图中所述

还有一个方法:

  1. 这是对 @Anh N. Nguyen 答案的扩展,但注意不要在源代码管理中存储秘密。
  2. @Harikrishnan更简单,步骤更少,不需要任何额外的插件(config-file-provider)

步骤:

  1. 配置mvn-settings.xml从环境变量中读取机密。
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">
  <servers>
    <server>
      <id>nexus</id>
      <username>${env.NEXUS_USER}</username>
      <password>${env.NEXUS_PASSWORD}</password>
    </server>
  </servers>
</settings>
  1. 您现在可以在源代码管理中签入它,完全安全。
  2. 在作业环境变量中公开您的 Jenkins 凭据机密(声明性管道的语法)
pipeline {
  agent {...}
  environment {
    NEXUS_CREDS = credentials('NexusArtifactoryLogin')
    NEXUS_USER = "$NEXUS_CREDS_USR"
    NEXUS_PASSWORD = "$NEXUS_CREDS_PSW"
  }
  stages {
    ...
    stage('Build') {
      steps {
          \assuming mvn-settings.xml is at root/current folder, otherwise provide absolute or relative path
          sh 'mvn -s mvn-settings.xml clean install'
      }
    }
    ...
  }
}

描述了一个过程here。对于 Maven 构建作业,

  1. 使用管理 Jenkins/Manage 凭据为您的远程存储库添加 username/password 凭据。
  2. 使用管理 Jenkins/Managed 文件添加新的 Maven 设置文件。复制您 settings.xml 的内容。省略 <servers> 部分,但在 <profile> 中引用远程回购服务器 ID 和 URL。还可以从托管文件向导的弹出菜单中按名称添加远程存储库 ID 和 select 凭据。
  3. 对于您的 Maven 作业,在 Configure/Build/Advanced.../Settings File/Provided settings.xml 下,select 您的托管设置文件的名称来自弹出菜单。

当您触发构建时,Jenkins 会将带有您的凭据的 <server> 元素注入临时设置文件。

只需将您的 settings.xml 文件放入您的代码库中,然后 运行 mvn clean install -s