我正在尝试使用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声明管道样本")
答案 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安装。
必须注册设置文件后:
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
中的机密文件凭据然后您可以像这样使用此设置文件
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'
}
}
}
}