我试图在我的Jenkins文件中使用这个看似简单的模式:
def params = input message: 'Define versions to use:', parameters: [
[
$class: 'RunParameterDefinition',
description: '',
filter: 'SUCCESSFUL',
name: 'pr1_run',
projectName: 'MyProject1'
], [
$class: 'RunParameterDefinition',
description: '',
filter: 'SUCCESSFUL',
name: 'pr2_run',
projectName: 'MyProject2'
]
]
// ...
step([
$class: 'CopyArtifact',
fingerprintArtifacts: true,
projectName: 'MyProject1', // resorted to this
selector: [
$class: 'ParameterizedBuildSelector',
parameterName: '${params.pr1_run}'
],
target: _dir
])
有了上述内容,我得到了
java.io.NotSerializableException: org.jenkinsci.plugins.workflow.job.WorkflowRun
我也试过SpecificBuildSelector
:
step([
$class: 'CopyArtifact',
fingerprintArtifacts: true,
projectName: 'MyProject1',
selector: [
$class: 'SpecificBuildSelector',
buildNumber: params.pr1_run.number
],
target: 'pr1'
])
我得到了
org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use field hudson.model.Run number
我只想将一些用户选择的上游项目构建与最终构建相结合。
答案 0 :(得分:1)
好吧,Script Security Plugin 1.18.1并且仍然获得org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use method hudson.model.Run getNumber
。
什么有效
def pr1_number = (''+params.pr1_run).split('#')[1]
然后在CopyArtifact中明确设置param = null
并使用pr1_number
。
这只是表明Pipeline的东西还没有为任何项目间的行动做好准备。
答案 1 :(得分:0)
这两个问题都是同一问题的症状,RunParameterValue.getValue()
会返回实时Run
对象,而getNumber()
- 或者更一般地说,buildEnvironment
会更合适来自Pipeline。我提交JENKINS-34101来跟踪此事。
如果您设法绕过NotSerializableException
(也许只是幸运),RejectedAccessException
可以通过批准该方法¹作为管理员来解决。您应始终将SpecificBuildSelector
与管道一起使用(参见JENKINS-33577)。
¹更新脚本安全插件,因此系统会要求您批准method hudson.model.Run getNumber()
,而不是field hudson.model.Run number
。