如何在Jenkins管道中使用运行参数

时间:2016-04-06 15:14:15

标签: jenkins jenkins-workflow

我试图在我的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

我只想将一些用户选择的上游项目构建与最终构建相结合。

2 个答案:

答案 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