0

我有一个参数化构建,它在 dsl 文件中定义为

Thread thr = Thread.currentThread()
def build = thr?.executable
def resolver = build.buildVariableResolver

Map<String, JobParam> paramMap = JobConstants.PARAM_MAP
for (String key : paramMap.keySet()) {
    paramMap.put(key, new JobParam(paramMap.get(key),  (String)resolver.resolve(key)))
}

……

现在我正在尝试测试这个 dsl 文件并编写以下测试代码

public void testJob() {
    JobManagement jm = new MemoryJobManagement()
    File f = new File("jobs/PipelinesCreator.groovy")
    DslScriptLoader.runDslEngine f.text, jm
}

但这给了我以下错误:javaposse.jobdsl.dsl.DslScriptException:(脚本,第 13 行)没有这样的属性:类的可执行文件:java.lang.Thread

我试图遵循 job-dsl-core 中的现有测试(https://github.com/jenkinsci/job-dsl-plugin/blob/785de7f877fdbe8fc56b8b2423ae76ec9c59fa66/job-dsl-core/src/test/groovy/javaposse/jobdsl/ dsl/DslScriptLoaderSpec.groovy#L238 ) 来运行 groovy 脚本。

如何解决此问题并使我的测试成功执行。

4

1 回答 1

0

我将首先回答您的问题: http ://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html 中记录的“java.lang.Thread”没有属性“可执行文件”,您试图在“def build = thr?.executable”行中引用它。

看起来您正试图直接从 Groovy 调用 Jenkins Job Dsl 插件,而实际上它的设计目的是用作 jenkins 作业中的一个步骤。在 Jenkins UI 中,可以通过添加“处理作业 DSL”步骤在“构建”部分找到。 在此处输入图像描述

然后将其指向您的 groovy 文件:“jobs/PipelinesCreator.groovy”。

但需要明确的是,如果您上面提到的第一个代码片段是“jobs/PipelinesCreator.groovy”的内容,那么由于同样的原因仍然会失败 - 您尝试访问的属性不存在。

于 2015-11-24T00:04:49.767 回答