如何在Jenkins Job DSL中创建可扩展的基础作业?

埃里克·B

我正在尝试创建一个基础工作,以减少我们工作之间的重复。我做了以下工作,但是不起作用:

def baseJob(Map m, Closure c = {}) {
    type = m.type ?: 'dev'
    pipelineJob("prefix-${m.name}") {
        parameters {
            stringParam('ONE', 'one', 'Description one')
        }
        c()
    }
}

baseJob(type: 'release', name: 'test') {
    parameters { // <-- Fails here
        stringParam('TWO', 'two', 'Description two')
    }
}

我收到以下错误:

错误:(脚本,第12行)方法的无签名:script.parameters()适用于参数类型:(script $ _run_closure1 $ _closure4)值:[script $ _run_closure1 $ _closure4 @ 18b249b3]

预期的工作如下:

def baseJob(Map m, Closure c = {}) {
    type = m.type ?: 'dev'
    pipelineJob("prefix-${m.name}") {
        parameters {
            stringParam('ONE', 'one', 'Description one')
        }
        parameters { // <-- This is fine
            stringParam('TWO', 'two', 'Description two')
        }
        c()
    }
}

baseJob(type: 'release', name: 'test')

所以问题不在于我打过parameters多次电话问题似乎是我parameters从闭包内部调用

我想相信有一种执行关闭的方法,因此可以parameters正确调用。但是,我怀疑我必须先了解更多有关Groovy和Jenkins Job DSL的知识,然后才能弄清楚。所以我希望有人知道如何做到这一点。

如果您有替代解决方案来完成可扩展的基础工作,那也是一个有效的答案。

埃里克·B

您只需要将要调用的闭包的代理设置为您所在的闭包的代理即可:

def baseJob(Map m, Closure c = {}) {
    type = m.type ?: 'dev'
    pipelineJob("prefix-${m.name}") {
        parameters {
            stringParam('ONE', 'one', 'Description one')
        }
        c.delegate = delegate // <-- Just add this line
        c()
    }
}

baseJob(type: 'release', name: 'test') {
    parameters {
        stringParam('TWO', 'two', 'Description two')
    }
}

delegate 包含当前正在执行的闭包的委托。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Jenkins Job DSL Groovy脚本中设置监视器视图的作业顺序?

如何在Jenkins Job DSL中设置内部名称?

如何在Jenkins中使用Job DSL插件删除脚本?

如何在Jenkins Job中删除Docker映像

如何在Jenkins Job执行中包括域用户

Jenkins Job DSL:在作业步骤中在groovyScript中使用参数

如何在Jenkins工作流(管道)插件中执行Job DSL脚本

如何在Jenkins Job DSL插件的上下文中使用共享/通用的常规方法

如何在Jenkins Git插件中指定Job DSL签出超时?

如何在Jenkins Job DSL中使用带有条件步骤的foreach

Jenkins Job DSL Script 用于创建文件夹创建作业

如何在python中将jenkins作业配置config.xml转换为YAML格式以用于jenkins-job-builder?

如何在Jenksin Job DSL脚本中获取种子作业的名称?

使用Jenkins Job DSL在Jenkins中使用Artifactory配置作业

如何在Jenkins Job Builder中运行Maven生成的jar文件

如何在Jenkins Job中克隆github组织的私有存储库

如何在Jenkins的Build-Job中参数化Branch的结帐?

从Jenkins Pipeline调用Job DSL

Jenkins Job DSL 不带参数

Jenkins Job API扩展点

Jenkins job-dsl-plugin:如何将环境变量注入Ivy作业?

job-dsl-从gitlab repo分支创建作业时如何传递凭据?

如何为 Job DSL 创建的多分支作业设置发现模式

如何使用Job DSL配置Jenkins GitHubPullRequestBuilder插件

指向git repo作为jenkins job dsl job的来源?

在容器中运行Jenkins Job

如何在 Laravel 中模拟 Job 对象?

如何在Jenkins DSL中添加上游作业

使用Pipeline Job和Groovy脚本创建新的Jenkins作业