代码之家  ›  专栏  ›  技术社区  ›  MeowCode

带有自定义设置的jenkins声明性管道.xml

  •  8
  • MeowCode  · 技术社区  · 7 年前

    我想建立一个詹金斯 声明性管道 和马文在一起。到目前为止,我可以让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工具也无法工作。(例如,profile foo。)使用mavensettingsconfig,它会爆炸:

    缺陷!源单元“workflowscript”中的“规范化”阶段出现异常意外的nullpointerexception….

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

    (文档待办事项 https://wiki.jenkins.io/display/JENKINS/Pipeline+Maven+Plugin . 它实际上说“todo提供一个带有jenkins声明性管道的示例”)

    4 回复  |  直到 7 年前
        1
  •  12
  •   Francois Marot    7 年前

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

    希望有帮助

        2
  •  3
  •   Walery Strauch Lia    7 年前

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

    declare a maven installation

    必须注册设置文件后:

    manage jenkins > Managed files
    

    并添加设置文件

    之后,您可以对注册表文件使用WithMaven函数,如下所示:

    steps {
        withMaven(maven: 'M3', mavenSettingsConfig: 'mvn-setting-xml') {
            sh "mvn clean install "
        }
    }
    
        3
  •  0
  •   rohit thomas    7 年前

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

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

    因此,现在每当maven运行时,它都会在您指定的路径中找到settings.xml文件

    p.s.这是一个maven命令,您可以使用它在命令行上运行

    希望有帮助:)

        4
  •  0
  •   pan    6 年前

    也可以使用来自 Credentials Binding Plugin

    在詹金斯创建一个秘密文件: 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'
          }
        }
      }
    }