Jenkins文件maven custom settings.xml

Jenkins文件maven custom settings.xml,maven,jenkins,jenkins-pipeline,jenkins-groovy,Maven,Jenkins,Jenkins Pipeline,Jenkins Groovy,我有一个包含几个maven步骤的Jenkins文件,如何在整个管道中指定自定义maven设置以避免在eac步骤中使用withMaven() 我的理想解决方案是可以在“工具”管道部分设置,但找不到的东西: tools { maven 'maven3' jdk 'openjdk-1.8' } 有了Maven(..)DSL就意味着在阶段范围内,这就是我认为它不能在其他阶段重用的原因 但是你可以用另一种方式,也就是 如果Jenkins master和代理具有docker运行时,您可以轻

我有一个包含几个maven步骤的Jenkins文件,如何在整个管道中指定自定义maven设置以避免在eac步骤中使用withMaven()

我的理想解决方案是可以在“工具”管道部分设置,但找不到的东西:

tools {
    maven 'maven3'
    jdk 'openjdk-1.8'
}
有了Maven(..)DSL就意味着在阶段范围内,这就是我认为它不能在其他阶段重用的原因

但是你可以用另一种方式,也就是

  • 如果Jenkins master和代理具有docker运行时,您可以轻松实现目标:
  • 声明性Jenkins文件

    pipeline {
        agent {
           docker {
             image 'maven:3-alpine'
             args  '-v /tmp:/tmp'
           }  
        }
        
        stages {
            stage("version bump") {
                steps {
                    sh "mvn versions:set -DnewVersion=1.0.3-SNAPSHOT"
                }
            }
            stage("build") {
                steps {
                    sh "mvn clean install"
                }
            }
            stage("deploy") {
                steps {
                    sh "mvn deploy"
                }
            }
        }
        
    }
    
    node {
    
        docker.image('maven:3-alpine').inside {
            stage('version bump') {
                sh 'mvn versions:set -DnewVersion=1.0.3-SNAPSHOT'
            }
            stage('build') {
                sh 'mvn clean install'
            }
            stage('deploy') {
                sh 'mvn deploy'
            }
        }
    }
    
    脚本化Jenkins文件

    pipeline {
        agent {
           docker {
             image 'maven:3-alpine'
             args  '-v /tmp:/tmp'
           }  
        }
        
        stages {
            stage("version bump") {
                steps {
                    sh "mvn versions:set -DnewVersion=1.0.3-SNAPSHOT"
                }
            }
            stage("build") {
                steps {
                    sh "mvn clean install"
                }
            }
            stage("deploy") {
                steps {
                    sh "mvn deploy"
                }
            }
        }
        
    }
    
    node {
    
        docker.image('maven:3-alpine').inside {
            stage('version bump') {
                sh 'mvn versions:set -DnewVersion=1.0.3-SNAPSHOT'
            }
            stage('build') {
                sh 'mvn clean install'
            }
            stage('deploy') {
                sh 'mvn deploy'
            }
        }
    }
    
  • 如果您的Jenkins主机或代理安装了ApacheMaven,
    mvn
    命令将在任何命令行
    sh
    bat
  • 脚本化管道示例

    node {
      def mvn="mvn --batch-mode -s path/to/settings.xml -Dmaven.repo.local=${WORKSPACE}/.m2"
    
      stage('version bump') {
         sh "${mvn} versions:set -DnewVersion=1.0.3-SNAPSHOT"
      }
      stage('build') {
         sh "${mvn} clean install"
      }
      stage('deploy') {
         sh "${mvn} deploy"
      }
    }
    
    有了Maven(..)DSL就意味着在阶段范围内,这就是我认为它不能在其他阶段重用的原因

    但是你可以用另一种方式,也就是

  • 如果Jenkins master和代理具有docker运行时,您可以轻松实现目标:
  • 声明性Jenkins文件

    pipeline {
        agent {
           docker {
             image 'maven:3-alpine'
             args  '-v /tmp:/tmp'
           }  
        }
        
        stages {
            stage("version bump") {
                steps {
                    sh "mvn versions:set -DnewVersion=1.0.3-SNAPSHOT"
                }
            }
            stage("build") {
                steps {
                    sh "mvn clean install"
                }
            }
            stage("deploy") {
                steps {
                    sh "mvn deploy"
                }
            }
        }
        
    }
    
    node {
    
        docker.image('maven:3-alpine').inside {
            stage('version bump') {
                sh 'mvn versions:set -DnewVersion=1.0.3-SNAPSHOT'
            }
            stage('build') {
                sh 'mvn clean install'
            }
            stage('deploy') {
                sh 'mvn deploy'
            }
        }
    }
    
    脚本化Jenkins文件

    pipeline {
        agent {
           docker {
             image 'maven:3-alpine'
             args  '-v /tmp:/tmp'
           }  
        }
        
        stages {
            stage("version bump") {
                steps {
                    sh "mvn versions:set -DnewVersion=1.0.3-SNAPSHOT"
                }
            }
            stage("build") {
                steps {
                    sh "mvn clean install"
                }
            }
            stage("deploy") {
                steps {
                    sh "mvn deploy"
                }
            }
        }
        
    }
    
    node {
    
        docker.image('maven:3-alpine').inside {
            stage('version bump') {
                sh 'mvn versions:set -DnewVersion=1.0.3-SNAPSHOT'
            }
            stage('build') {
                sh 'mvn clean install'
            }
            stage('deploy') {
                sh 'mvn deploy'
            }
        }
    }
    
  • 如果您的Jenkins主机或代理安装了ApacheMaven,
    mvn
    命令将在任何命令行
    sh
    bat
  • 脚本化管道示例

    node {
      def mvn="mvn --batch-mode -s path/to/settings.xml -Dmaven.repo.local=${WORKSPACE}/.m2"
    
      stage('version bump') {
         sh "${mvn} versions:set -DnewVersion=1.0.3-SNAPSHOT"
      }
      stage('build') {
         sh "${mvn} clean install"
      }
      stage('deploy') {
         sh "${mvn} deploy"
      }
    }
    

    整个管道避免在eac步骤中使用withMaven()。
    您需要多少次
    withMaven(…)
    ?4次,我使用configFileProvider而不是withMaven(),并将fileId参数化,工作正常,您只需设置一次“fieldId”参数,。。。但它保留了4个重复的代码块。为什么要使用withMaven 4次?你能展示这些东西吗?
    整个管道避免在eac步骤中使用withMaven()。
    你需要多少次
    withMaven(…)
    ?4次,我使用configFileProvider而不是withMaven(),并将fileId参数化,效果很好,使用它你只需设置“fieldId”参数一次,。。。但它保留了4个重复的代码块。为什么要使用withMaven 4次?你能给我看看那些东西吗?