在Jenkins中配置Maven设置

9
我的项目有 3 个 maven 模块,它们是通过 nodejs 脚本构建的。
现在我想集成 Jenkin 和 Nexus。我的 Jenkin 构建配置如下: Build config 我还在“提供配置文件”构建步骤中的“构建”部分添加了我的 maven settings.xml,但它没有起作用。Maven 仍然失败,并且无法解决我的 Nexus 存储库中的依赖项。
在我的本地 maven settings.xml 中,我已经为 Nexus 存储库和另一个存储库添加了一些配置。
你能帮助我解决这个问题吗?我对 Jenkin 还很陌生。
先感谢您。
8个回答

11

我提出了一个解决方案,将问题和答案(都来自Anh)结合起来。 Anh的解决方案存在问题,即我们必须包含可能包含凭据的settings.xml文件(在我的情况下,它包含一些机密信息),这不应该是存储库的一部分(正如sigi在评论中指出的那样)。

以下是我避免风险的步骤:

  1. 从Jenkins主页进入Jenkins管理 > 管理的文件
  2. 点击添加新配置 > Maven settings.xml > 保持ID不变(最好)> 提交
  3. 提供易于识别的名称并在必要时进行注释,然后复制粘贴xml内容到内容区域。 点击提交。Adding configuration XML
  4. 进入您项目的构建配置,在构建环境节选项中,勾选提供配置文件选项。
  5. 从文件下拉菜单中选择您在第3步中添加的文件。
  • 现在的关键是填写目标字段。提供一个文件名(或相对于你的项目的路径,如果你需要这样)。你也可以选择填写变量名,如果你需要配置在构建配置的其他部分中使用(这些来自Config file provider插件)。提供配置文件
  • 现在在构建部分,提供以下命令从检出的项目路径中获取settings.xml文件(Jenkins已经将其复制到该路径下供您使用):
    clean install -s settings.xml
  • 请注意,我在Jenkins中创建的构建项目是一个Maven项目。


    10

    我刚找到了一种解决方法,通过在我的文件夹中直接添加mvn-settings.xml并编辑运行命令:

    mvn clean install -s mvn-settings.xml
    

    7
    不这样做的主要原因是:settings.xml文件可能包含不应该出现在你的代码库中的密码。 - sigi
    1
    你可以使用Jenkins凭据插件的密钥文件来缓解风险。 - mushuweasel

    4

    我也在提供配置文件中添加了我的maven settings.xml

    等等...你根本不需要这样做: 任何maven命令都会在$HOME/.m2/settings.xml文件夹中查找settings.xml文件: 你只需要确保运行Jenkins从机(实际执行任务的地方)的用户在该文件夹中拥有该文件。
    然后确保用户可以在本地maven项目上使用 mvn clean install 命令。一旦这个已经工作了,你就可以尝试你的Jenkins构建。


    Maven在本地成功运行,Jenkins中的Maven设置内容与本地设置相同。 - Anh N. Nguyen
    1
    确保Jenkins从机使用与测试maven命令时相同的账户。 - VonC
    我不明白你的意思。现在我是通过点击“立即构建”链接手动构建的。 - Anh N. Nguyen
    @AnhN.Nguyen,请检查用户是否实际运行作业:在您的作业结果页面上,单击“环境变量”,并检查USERNAME或HOME,以查看作业是否实际上是使用与本地测试maven相同的用户运行的。 - VonC

    4

    还有一种方法:

    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'
          }
        }
        ...
      }
    }
    

    2
    这种方法在Jenkins流水线中非常简单和易于使用。 - srnjak
    1
    这是一种更简单更安全的解决方案。对我很有效,谢谢。 - Deepak Rao

    1

    在此输入图像描述进入你的JOB配置

    然后到“构建”部分

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

    然后点击“高级”按钮,并在图像中提到的位置提及设置文件路径


    1
    将你的settings.xml文件放入代码库中,然后运行mvn clean install -s 。

    0

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

    1. 使用“管理Jenkins/管理凭据”添加远程仓库的用户名/密码凭据。
    2. 使用“管理Jenkins/管理文件”添加新的Maven设置文件。复制您的settings.xml的内容。省略部分,但在中引用远程仓库服务器ID和URL。还要添加远程仓库ID,并从Managed Files向导中的弹出菜单中选择名称来选择凭据。
    3. 对于您的Maven作业,在“配置/构建/高级.../提供的settings.xml设置文件”下,从弹出菜单中选择您的托管设置文件的名称。

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


    0

    使用mvn -X命令运行您的作业。在日志中,您将找到Jenkins从哪里获取setting.xml文件。

    在我的情况下,我将设置文件放在/.m2/中,但在检查日志时发现它位于以下位置:/var/lib/jenkins/.m2

    [INFO] Error stacktraces are turned on.
    [DEBUG] Reading global settings from /usr/share/maven/conf/settings.xml
    [DEBUG] Reading user settings from /var/lib/jenkins/.m2/settings.xml
    [DEBUG] Using local repository at /var/lib/jenkins/.m2/repository
    

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接