首页 > 解决方案 > 具有自定义 settings.xml 的 Jenkins 声明式管道

问题描述

我正在尝试使用 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"
            }
       }
   }
}

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

漏洞!源单元“WorkflowScript”中“规范化”阶段的异常意外 NullpointerException....

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

(文档 TODO 在https://wiki.jenkins.io/display/JENKINS/Pipeline+Maven+Plugin。它实际上说“TODO 提供了一个带有 Jenkins 声明式管道的示例”)

标签: mavenjenkinsjenkins-pipeline

解决方案


我的建议是使用 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'
        }
    }
}

希望能帮助到你


推荐阅读