带有自定义settings.xml的Jenkins声明管道

Meo*_*ode 9 maven jenkins jenkins-pipeline

我正在尝试用maven 建立一个Jenkins 声明管道.到目前为止,我可以让maven运行,但我无法使用我定义的Maven Settings.xml.

pipeline{
   agent any
   tools{
       maven 'Apache Maven 3.3'
       // without mavenSettingsConfig, my settings.xml is not used.  With it, this blows up
       mavenSettingsConfig: 'Global Maven Settings'
       jdk 'jdk9
   }
   stages {
       stage('Preparation'){
           steps{
              //code checkout stuff here--this works fine
           }
       }
       stage('Build'){
            steps{
               sh "mvn clean install -P foo"
            }
       }
   }
}
Run Code Online (Sandbox Code Playgroud)

问题似乎是mavenSettingsConfig.没有该属性,我无法弄清楚如何设置settings.xml,我的自定义maven东西不起作用.(例如,配置文件foo.)使用mavenSettingsConfig,它会爆炸:

BUG!源单元'WorkflowScript'中的'规范化'阶段中的异常意外NullpointerException ....

文档中有一个很大的TODO,它将为此提供一个示例!那我该怎么做?

(文档TODO在https://wiki.jenkins.io/display/JENKINS/Pipeline+Maven+Plugin.它实际上说"TODO提供了Jenkins声明管道的样本")

Fra*_*rot 13

我的建议是使用Config File Provider插件:https://wiki.jenkins.io/display/JENKINS/Config+File+Provider+Plugin

有了它,您可以在Jenkins的"配置文件管理"屏幕中定义一次配置文件,然后在您的管道中输入如下代码:

stage('Build'){
    steps{
       configFileProvider([configFile(fileId: 'my-maven-settings-dot-xml', variable: 'MAVEN_SETTINGS_XML')]) {
            sh 'mvn -U --batch-mode -s $MAVEN_SETTINGS_XML clean install -P foo'
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你

  • 可以将其提取到 def 函数吗?否则我需要为每个 Maven 调用使用这些行,这是我想避免的。 (3认同)
  • 跟进我的评论:您需要在创建 configFile 设置时设置 id,然后您可以使用类似 `mvn-settings-artifactory` 的东西,而不是类似 `372201c4-12a6-4846-ab43-664815c21d4e` 的东西。 (2认同)

idr*_*ene 6

您必须在 jenkins 中声明和 maven 安装, Managed Jenkins > Global Tools configuration并添加名为 M3 的 maven 安装。

声明一个 Maven 安装

在您必须注册您的设置文件后:

manage jenkins > Managed files
Run Code Online (Sandbox Code Playgroud)

并添加您的设置文件

在此之后,您可以将 WithMaven 函数与您的注册表文件一起使用,如下所示:

steps {
    withMaven(maven: 'M3', mavenSettingsConfig: 'mvn-setting-xml') {
        sh "mvn clean install "
    }
}
Run Code Online (Sandbox Code Playgroud)