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

时间:2016-05-16 20:55:28

标签: jenkins

我今天将詹金斯从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阶段。

这是预期的改变吗?以前它坏了,我们只是错误地使用它?或者这是一个错误吗?

3 个答案:

答案 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风格来回答这个问题。

  1. 获取Groovy scripting插件
  2. 辨别您$JENKINS_HOME的设置位置。默认情况下,它应该在~/.jenkins,但我没有设置此服务器,因此我不得不深入挖掘一些配置文件。如果你也这样做,这就是我必须做的事情:
    • 使用/etc/default/jenkins检查vi的内容以获取$JENKINS_HOME的值 - 我的/var/lib/$NAME已经$NAME,并且文件位于jenkins/etc/libs/jenkins,所以它是$JENKINS_HOME
  3. 将目录更改为init.groovy.d路径
  4. 搜索名为cd的目录 - 如果该目录不存在,请创建一个,然后sudo。如果需要,可能必须使用init.groovy.d
  5. .groovy目录中创建一个以params.groovy结尾的新文件 - 我刚刚调用我的import jenkins.model.*;
  6. 在我们刚刚制作的groovy文件中输入以下脚本代码:
    •   

      System.setProperty("hudson.model.ParametersAction.keepUndefinedParameters", "true")   # Let numeric = ['lots', 'a', 'columns']

  7. 保存并关闭,然后重新启动Jenkins服务器。

    如果您遇到与我相同的相同的问题,那应该取消阻止。您的里程可能会有所不同:)我最终使用了一个启动脚本来将该功能与this solution proposed by Jenkins结合使用。

答案 2 :(得分:2)

有一些解决方案

  1. commabd line
    java -Dhudson.model.ParametersAction.keepUndefinedParameters=true -jar jenkins.war
  2. 常规
    import jenkins.model.*; System.setProperty("hudson.model.ParametersAction.keepUndefinedParameters", "true")