首页 > 解决方案 > 如何在自定义 groovy 类中使​​用 Jenkins Job DSL API

问题描述

这样的事情是否可能,即使用主 DSL 脚本之外的类中的 JobDSL API?

//main_jobdsl_script.groovy:
new JobCreator().createJob()
//JobCreator.groovy:
job("new-job") {
  steps {
    batchFile("Hello World")
  }
}

运行它时出现错误

13:03:18 ERROR: No signature of method: JobCreator.job() is applicable for argument types:
(org.codehaus.groovy.runtime.GStringImpl, StartJobCreator$_createJob_closure1)
values: ["new-job", de.dbh.jobcreation.StartJobCreator$_createStartJob_closure1@374d293]

我想避免主脚本变得太大和混乱,而是将代码分成几个脚本/类。

标签: jenkinsgroovyjenkins-job-dsl

解决方案


对的,这是可能的。当前脚本可以访问所有 API 方法,因此您需要将其传递给自定义类。

//main_jobdsl_script.groovy:
new JobCreator(this).createJob()
//JobCreator.groovy:

class JobCreator {

    private final Object context

    JobCreator(Object context) {
        this.context = context
    }

    void createJob() {
        context.job('new-job') {
            steps {
                batchFile('Hello World')
            }
        }
    }
}

推荐阅读