如何参数化 job-dsl 代码块,例如权限

How to parametrize job-dsl code blocks e.g. permissions

我想创建几个不同属性的工作。纯字符串属性工作得很好,就像这里的例子 https://github.com/sheehan/job-dsl-gradle-example/blob/master/src/jobs/example4Jobs.groovy

此外,我想参数化授权块中的权限。

我创建了一个闭包 (auth) 并想在作业定义中调用它,但这不起作用。

[
    [
        environment  : 'qa',
        auth: {
            permissions('dev', [
                'hudson.model.Item.Read'
            ])
        }
    ],
    [
        environment  : 'prod',
        auth: {
            permissions('admin', [
                'hudson.model.Item.Read',
                'hudson.model.Item.Build',
                'hudson.model.Item.Cancel'
            ])
        }
    ]
].each { Map config ->
    pipelineJob("job-${config.environment}") {
        displayName("job ${config.environment}")
        authorization {
            config.auth()
        }
    }
}

我收到以下错误:

ERROR: (script, line 5) No signature of method: script.permissions() is applicable for argument types: (java.lang.String, java.util.ArrayList) values: [admin, [hudson.model.Item.Read]]

作业 dsl 声明中的每个闭包都有一个 delegate 对象。 因此,如果您将该对象作为参数传递给您的闭包,您可以使用它来调用该方法。

[
    [
        environment  : 'qa',
        auth: { authorization ->
            authorization.permissions('dev', [
                'hudson.model.Item.Read'
            ])
        }
    ],
    [
        environment  : 'prod',
        auth: { authorization ->
            authorization.permissions('admin', [
                'hudson.model.Item.Read',
                'hudson.model.Item.Build',
                'hudson.model.Item.Cancel'
            ])
        }
    ]
].each { Map config ->
    pipelineJob("job-${config.environment}") {
        displayName("job ${config.environment}")
        authorization {
            config.auth(delegate)
        }
    }
}