我今天将詹金斯从1.618升级到2.3。这包括安装它推荐的一堆插件(大多数是管道插件及其依赖性)。
自升级以来,每当某项工作开始另一项工作时,我都会收到一个新错误(或至少是新的不良行为)。除非子作业已定义了这些键,否则将忽略作为“预定义参数”传递给子项的任何值。
让我说明一下:假设我有parent一份child工作。
parent
child
Parent发布会child通过“触发其他项目参数构建”生成后行动。在该“构建后操作”的FOO=BAR定义中,已定义了“预定义参数” 。
Parent
FOO=BAR
在Jenkins 1.618中,child以这种方式触发时,它将被FOO设置为参数,值为BAR。
FOO
BAR
但是在2.3中,FOO未在的构建上进行设置child。
如果我进行了修改,child因此该FOO参数始终是该作业的参数,则它将FOO=BAR从中提取该设置parent。这是不可接受的解决方法,因为我们以这种方式传递了数十个参数,并且在两端定义它们太脆弱了,并且违反了“不要重复自己”的原则。
无论是通过“在其他项目上触发参数化的构建”后生成操作还是通过MultiJob项目的MultiJob阶段触发子作业,我都得到相同的结果。
这是有意的更改吗?它以前是否损坏过,而我们只是使用不正确?还是这是一个错误?
根据Jenkins 2 Security更新,您可以通过设置以下内容来绕过它:
hudson.model.ParametersAction.keepUndefinedParameters = true
要验证此解决方法,请转到管理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