一尘不染

预定义参数不再传递给子作业

jenkins

我今天将詹金斯从1.618升级到2.3。这包括安装它推荐的一堆插件(大多数是管道插件及其依赖性)。

自升级以来,每当某项工作开始另一项工作时,我都会收到一个新错误(或至少是新的不良行为)。除非子作业已定义了这些键,否则将忽略作为“预定义参数”传递给子项的任何值。

让我说明一下:假设我有parent一份child工作。

Parent发布会child通过“触发其他项目参数构建”生成后行动。在该“构建后操作”的FOO=BAR定义中,已定义了“预定义参数” 。

在Jenkins 1.618中,child以这种方式触发时,它将被FOO设置为参数,值为BAR

但是在2.3中,FOO未在的构建上进行设置child

如果我进行了修改,child因此该FOO参数始终是该作业的参数,则它将FOO=BAR从中提取该设置parent。这是不可接受的解决方法,因为我们以这种方式传递了数十个参数,并且在两端定义它们太脆弱了,并且违反了“不要重复自己”的原则。

无论是通过“在其他项目上触发参数化的构建”后生成操作还是通过MultiJob项目的MultiJob阶段触发子作业,我都得到相同的结果。

这是有意的更改吗?它以前是否损坏过,而我们只是使用不正确?还是这是一个错误?


阅读 248

收藏
2020-07-25

共1个答案

一尘不染

根据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

2020-07-25