Maven 带有custom settings.xml的Jenkins声明性管道
我正在尝试与maven建立Jenkins声明性管道。到目前为止,我可以让maven运行,但无法让它使用我定义的maven Settings.xmlMaven 带有custom settings.xml的Jenkins声明性管道,maven,jenkins,jenkins-pipeline,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 mavenSetting
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"
}
}
}
}
问题似乎是MavensetingsConfig。如果没有这个属性,我就无法确定如何设置settings.xml,我的自定义maven功能也无法工作。(例如,Profile foo)使用mavenSettingsConfig,它会爆炸:
臭虫!源单元“WorkflowScript”中的“规范化”阶段出现异常意外的NullpointerException
文档中有一个很大的TODO,它将为此提供一个示例!那我该怎么做呢
(文档TODO位于。它实际上是说“TODO使用Jenkins声明性管道提供示例”)我遇到了这个问题,您所要做的就是在行中添加这一小段代码
def mvnSettings = 'Location of the file'
sh "mvn clean install --settings ${mvnSettings} -P foo"
因此,无论何时maven运行,它都会在您指定的路径中找到settings.xml文件另外,它是一个maven命令,您可以使用它在命令行上运行
希望有帮助:)我的建议是使用配置文件提供程序插件: 使用它,您可以在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'
}
}
}
希望对您有所帮助您必须在jenkins中声明并安装maven
Managed Jenkins>Global Tools configuration
并添加名为like M3的maven安装
必须注册设置文件后:
manage jenkins > Managed files
并添加您的设置文件
在此之后,您可以对注册表文件使用WithMaven函数,如下所示:
steps {
withMaven(maven: 'M3', mavenSettingsConfig: 'mvn-setting-xml') {
sh "mvn clean install "
}
}
也可以使用来自的机密文件凭据 在jenkins中创建一个秘密文件: 然后你可以像这样使用这个设置文件
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'
}
}
}
}
使用Config File Provider插件的优点是,您可以轻松添加新的Jenkins从属,而无需预先配置其上的现有文件(如settings.xml文件):每个作业都可以在任何地方执行,而无需配置,因为所有内容都在Jenkins中,并在运行时提供。这很有效,但不使用您为配置文件指定的名称。我需要使用内部id(如果让管道生成器为管道生成配置,则可以获得该id)跟进我的评论:创建configFile设置时需要设置id,然后,您可以使用类似于
mvn设置人工制品的东西,而不是类似于372201c4-12a6-4846-ab43-664815c21d4e的东西。这可以提取到def函数吗?否则,每次maven调用我都需要这些行,这是我想要避免的。@Hervian我这样认为:-但我不确定这样做是否值得,因为有时即使以几个字符为代价,也能做到明确和简单。。。my 2 Cent我选择此解决方案,但定义不在管道括号中def mvnSettings='mvnSettings.xml'管道{…}。仅供参考:只有安装了必要的插件,withMaven步骤才可用。