我今天将詹金斯从1.618升级到2.3。这包括安装它推荐的一大堆插件(主要是Pipeline插件及其依赖项)。
自升级以来,每当作业开始另一项工作时,我都会收到一个新错误(或者至少是一个新的不需要的行为)。传递给子节点的任何值为"预定义参数"除非子作业已经定义了这些键,否则将被忽略。
让我说明一下:我们说我有一份parent
工作和一份child
工作。
Parent
通过"触发器参数化构建在其他项目上启动child
"构建后行动。在该构建后动作的定义中,在"预定义参数"下,我定义了FOO=BAR
。
在Jenkins 1.618中,当child
以这种方式触发时,它会FOO
设置为参数,值为BAR
。
但在2.3中,FOO
的{{1}}版本未设置child
。
如果我修改child
以使FOO
始终是该作业的参数,则会从FOO=BAR
中选择parent
集。这是一种令人无法接受的解决方法,因为我们以这种方式传递了几十个参数,并且在两端定义它们太脆弱了,并且违反了“不要重复自己”的注意事项。原理
无论我是否通过其他项目的" Trigger参数化构建触发子作业,我都得到了相同的结果。构建后动作或通过MultiJob项目的MultiJob阶段。
这是预期的改变吗?以前它坏了,我们只是错误地使用它?或者这是一个错误吗?
答案 0 :(得分:21)
根据Jenkins 2 Security updates,您可以通过设置:
来绕过它hudson.model.ParametersAction.keepUndefinedParameters =真
要验证此解决方法,请转到Manage Jenkins - >脚本控制台,然后运行:
System.setProperty("hudson.model.ParametersAction.keepUndefinedParameters", "true")
要使其永久化,请将Jenkins参数更改为以下(并在之后重新启动Jenkins):
在Windows上编辑Jenkins主目录中的 jenkins.xml ,例如:
<arguments>
-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle
-Dhudson.model.ParametersAction.keepUndefinedParameters=true
-jar "%BASE%\jenkins.war" --httpPort=8080
</arguments>
对于大多数Linux发行版,您可以在文件中修改 JENKINS_ARGS :
/ etc / default / jenkins (或jenkins-oc)
对于CentOS,修改文件中的 JENKINS_JAVA_OPTIONS :
/ etc / sysconfig / jenkins (或jenkins-oc)
以下是受此问题影响的报告插件列表,并且已经存在一个漏洞: https://wiki.jenkins-ci.org/display/JENKINS/Plugins+affected+by+fix+for+SECURITY-170
答案 1 :(得分:2)
我找不到关于如何为linux盒子设置这个的Start-to-End答案。经过几个小时的交叉引用指南,这就是最终的工作。这些Jenkins配置应该有几种风格。我正在使用Ubuntu风格来回答这个问题。
$JENKINS_HOME
的设置位置。默认情况下,它应该在~/.jenkins
,但我没有设置此服务器,因此我不得不深入挖掘一些配置文件。如果你也这样做,这就是我必须做的事情:
/etc/default/jenkins
检查vi
的内容以获取$JENKINS_HOME
的值 - 我的/var/lib/$NAME
已经$NAME
,并且文件位于jenkins
到/etc/libs/jenkins
,所以它是$JENKINS_HOME
init.groovy.d
路径cd
的目录 - 如果该目录不存在,请创建一个,然后sudo
。如果需要,可能必须使用init.groovy.d
.groovy
目录中创建一个以params.groovy
结尾的新文件 - 我刚刚调用我的import jenkins.model.*;
System.setProperty("hudson.model.ParametersAction.keepUndefinedParameters", "true")
# Let numeric = ['lots', 'a', 'columns']
保存并关闭,然后重新启动Jenkins服务器。
如果您遇到与我相同的相同的问题,那应该取消阻止。您的里程可能会有所不同:)我最终使用了一个启动脚本来将该功能与this solution proposed by Jenkins结合使用。
答案 2 :(得分:2)
有一些解决方案
java -Dhudson.model.ParametersAction.keepUndefinedParameters=true -jar jenkins.war
import jenkins.model.*;
System.setProperty("hudson.model.ParametersAction.keepUndefinedParameters", "true")