当前位置: 首页 > 面试题库 >

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

宋建本
2023-03-14
问题内容

我今天将詹金斯从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阶段触发子作业,我都得到相同的结果。

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


问题答案:

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



 类似资料:
  • 问题内容: 当我定义一个自定义类型时,基础类型的类型似乎对我是否可以按原样将其传递给函数还是需要对其进行转换有所不同。 问题是: 为什么和起作用,但不起作用? https://play.golang.org/p/buKNkrg5y- 在这里,当我运行此函数时,它会抱怨,尽管它是基础类型。但是当我打电话或他们成功运行时。 问题答案: 和 您的新类型是2种不同的不同类型。在预期的地方,您必须传递typ

  • 使用,并希望将常量/参数传递给自定义映射器 我的目的地具有 Map 类型的字段

  • 我想从另一个作业中获取参数,就像我们从另一个作业中复制工件一样。 考虑2个詹金斯作业A和B。拉链制品。 我的要求:我希望作业B将所有参数传递给作业A中的构建#30。(我使用复制工件插件从作业A的#30复制.zip)如何从不同的jenkins作业获取参数?

  • 问题内容: 我是cron工作的新手,不确定是否会奏效。 为了安全起见,我考虑过制作一个一页脚本,该脚本查找某些GET值(用户名,密码和安全代码),以确保只有计算机和知道这3种信息的人才能运行该命令。 我制作了脚本,并且可以在浏览器中运行该脚本,但是可以使用GET值运行cron作业吗? 一个例子就是我跑步 这可能吗? 问题答案: 仅当通过Web服务器调用脚本时,&关联数组才被初始化。通过命令行调用时

  • 问题内容: 这在Django 1.9中用form_kwargs修复。 我有一个看起来像这样的Django表单: 我称这种形式的东西是这样的: 登录用户在哪里。这按预期工作。 我的问题是,我现在想将此单一表单转换为表单集。我不知道的是在创建表单集时如何将会员信息传递给各个表单。根据文档来制作一个表单集,我需要做这样的事情: 然后我需要这样创建它: 现在如何以这种方式将affiliate = requ

  • 有时对一个类的某些方面进行 参数化(parameterize)是很有用的。例如, 你可能需要管理不同版本的 gem 软件包,既可以为每一种版本创建分离的单独的类, 也可以使用继承和覆盖,为一个类传递一个版本号作为参数。 操作步骤 声明参数作为如下类定义的一部分: class eventmachine( $version ) { package { "eventmachine": pro