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

时间:2018-06-06 18:22:28

标签: 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"
            }
       }
   }
}

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

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

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

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

4 个答案:

答案 0 :(得分:11)

我的建议是使用配置文件提供程序插件: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'
    }
}

希望有所帮助

答案 1 :(得分:2)

你必须在jenkins中声明和maven安装 manage jenkins > Managed files 并添加名为M3的maven安装。

declare a maven installation

必须注册设置文件后:

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

并添加您的设置文件

在此之后,你可以使用WithMaven函数和你的注册表文件:

CREATE TABLE `images` (
  `image_id` int(11) NOT NULL,
  `image_name` varchar(255) CHARACTER SET utf8 NOT NULL,
  `image_title` varchar(255) CHARACTER SET utf8 NOT NULL ,
  `image_alternative` varchar(255) CHARACTER SET utf8 NOT NULL ,
  `image_folder` varchar(255) CHARACTER SET utf8 NOT NULL ,
  `image_status` int(11) NOT NULL ,
  `date` datetime DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

答案 2 :(得分:0)

我有这个问题你所要做的就是在你的行中添加这一小段代码

def mvnSettings = 'Location of the file'
  sh "mvn clean install --settings ${mvnSettings} -P foo"

所以现在,只要maven运行,它就会在您指定的PATH中找到settings.xml文件

P.S。它是一个maven命令,可用于在命令行上运行

希望有所帮助:)

答案 3 :(得分:0)

还可以使用Credentials Binding Plugin

中的机密文件凭据

在jenkins中创建一个秘密文件: enter image description here

然后您可以像这样使用此设置文件

pipeline {
    environment {
    MVN_SET = credentials('maven_settings')
  }
  agent {
    docker 'maven:3-alpine'
  }
  stages {
    stage('mvn test settings') {
      steps {
        sh 'mvn -s $MVN_SET help:effective-settings'
      }
    }
  }
}