Jenkins 声明式管道和自定义 Maven settings.xml

Jenkins declarative pipeline and custom maven settings.xml

我有一个 Maven 项目,它从公司网络内的私有存储库 (Nexus) 解决了它的一些依赖项。因此,它只能使用自定义 settings.xml 来构建,其中存储了私有存储库的凭据。

maven 项目由 Jenkins 使用声明式管道构建。构建作业是多分支管道。

在 Jenkins 的作业配置中,在 "Pipeline Maven Configuration" 下,我指定了一个设置文件(托管文件)和一个全局设置文件。

然而,管道本身似乎完全忽略了这个设置。

似乎要使用自定义 settings.xml,我必须将每个 mvn 调用包装到 withMaven() {...} 块或 configFileProvider () {...} 块中.

当我这样做时,它工作正常,但由于此管道中有很多 mvn 调用,这会使管道不必要地复杂。

是否有另一种方法让 maven 获取自定义 settings.xml 文件?

如果没有在管道内进行进一步配置就不会使用指定的文件,那么 "Pipeline Maven Configuration" 设置的意义何在?

目前我将采用以下方法...

将我的 maven 用户设置文件放在我的 SCM 中的 Jenkinsfile 旁边。在 jenkins 文件的“工具”部分声明要使用的 Maven:

  tools {
    maven 'Maven 3.6.3'
    jdk 'AdoptOpenJDK_8u222'
  }

然后我使用“-s”命令行选项将用户设置添加到每个 Maven 调用中:

  steps {
    sh 'mvn pmd:pmd -s usersettings.xml'
  }

仍然不喜欢重复添加用户设置,但比 运行“withMaven()”更精简 - 更快。

更新 可以用这样的 Groovy 函数包装 Maven 调用

def mvn(String cmd) {
    sh "mvn ${cmd} -s usersettings.xml"
}

整理流水线脚本:

steps {
  mvn 'pmd:pmd'
}

其他方法是使用 Pipeline Maven 集成

https://github.com/jenkinsci/pipeline-maven-plugin

node {
  stage ('Build') {

    git url: 'https://github.com/cyrille-leclerc/multi-module-maven-project'

    withMaven(
        // Maven installation declared in the Jenkins "Global Tool Configuration"
        maven: 'maven-3', // (1)
        // Use `$WORKSPACE/.repository` for local repository folder to avoid shared repositories
        mavenLocalRepo: '.repository', // (2)
        // Maven settings.xml file defined with the Jenkins Config File Provider Plugin
        // We recommend to define Maven settings.xml globally at the folder level using
        // navigating to the folder configuration in the section "Pipeline Maven Configuration / Override global Maven configuration"
        // or globally to the entire master navigating to  "Manage Jenkins / Global Tools Configuration"
        mavenSettingsConfig: 'my-maven-settings' // (3)
    ) {

      // Run the maven build
      sh "mvn clean verify"

    } // withMaven will discover the generated Maven artifacts, JUnit Surefire & FailSafe & FindBugs & SpotBugs reports...
  }
}