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

问题描述 投票:0回答:3

我今天将 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
集。这是一个不可接受的解决方法,因为我们以这种方式传递了数十个参数,并且在两端定义它们太脆弱并且违反了“不要重复自己”原则。

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

这是有意的改变吗?是不是以前坏了,只是我们使用方法不对?或者这是一个错误?

jenkins
3个回答
28
投票

根据 Jenkins 2 安全更新,可以通过设置绕过它:

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


4
投票

有2种解决方案:

  1. 命令行:
    java -Dhudson.model.ParametersAction.keepUndefinedParameters=true -jar jenkins.war
  2. 常规代码:
    import jenkins.model.*; System.setProperty("hudson.model.ParametersAction.keepUndefinedParameters", "true")

2
投票

我找不到关于如何为 Linux 盒子进行设置的完整答案。经过几个小时的交叉参考指南后,这就是最终的成果。这些 Jenkins 配置应该有几种风格。我使用 Ubuntu 风格来回答这个问题。

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

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

如果您遇到了我遇到的相同问题,那么这应该可以解除您的障碍。您的情况可能会有所不同:)我最终使用了一个启动脚本来结合 Jenkins 提出的解决方案来利用该功能。

© www.soinside.com 2019 - 2024. All rights reserved.