2016-08-17 62 views
0

我试图自动化测试詹金斯常规DSL脚本,喜欢这里:如何在测试DSL脚本时对虚拟jenkins设置环境变量?

https://github.com/sheehan/job-dsl-gradle-example

我觉得这个想法是非常简单的,我有什么用的设置环境变量的虚拟詹金斯的问题。我跟着指示操作:

https://wiki.jenkins-ci.org/display/JENKINS/Unit+Test

具体“如何设置环境变量”部分,增加了以下我的测试执行:

import hudson.slaves.EnvironmentVariablesNodeProperty 
import hudson.EnvVars 

/** 
* Tests that all dsl scripts in the jobs directory will compile. 
*/ 
class JobScriptsSpec extends Specification { 
    @Shared 
    @ClassRule 
    JenkinsRule jenkinsRule = new JenkinsRule() 


    EnvironmentVariablesNodeProperty prop = new EnvironmentVariablesNodeProperty(); 
    EnvVars envVars = prop.getEnvVars(); 


    @Unroll 
    void 'test script #file.name'(File file) { 
     given: 
     envVars.put("ENVS", "dev19"); 
     jenkinsRule.jenkins.getGlobalNodeProperties().add(prop); 
     JobManagement jm = new JenkinsJobManagement(System.out, [:], new File('.')) 

     when: 
     new DslScriptLoader(jm).runScript(file.text) 

     then: 
     noExceptionThrown() 

     where: 
     file << jobFiles 
    } 

然而,当我运行的实际试验之一脚本,我仍然看到以下内容:

Failed tests 


test script Build.groovy 
Expected no exception to be thrown, but got 'javaposse.jobdsl.dsl.DslScriptException' 
    at spock.lang.Specification.noExceptionThrown(Specification.java:118) 
    at com.dslexample.JobScriptsSpec.test script #file.name(JobScriptsSpec.groovy:40) 
Caused by: javaposse.jobdsl.dsl.DslScriptException: (script, line 3) No such property: ENVS for class: script 

脚本Build.groovy使用变量“$ {} ENVS”(就好像它是由parame提供在Jenkins的种子工作中),它在Jenkins中实际运行时按预期工作...所以在测试jenkins上下文中设置这些“参数”或env变量的任何方法?的我如何使用可变ENVS在Build.groovy

实施例:

def envs = '-' 
"${ENVS}".eachLine{ 
    def env = it 
    envs+=env+'-' 
} 
envs.substring(0,envs.length()-1) 

job('Build'+envs) { 
... 
} 

回答

1

JenkinsJobManagement构造的第二个参数是地图上的环境变量,这将是在DSL脚本可用的。

Map<String, String> envVars = [ 
    FOO: 'BAR' 
] 
JobManagement jm = new JenkinsJobManagement(System.out, envVars, new File('.')) 
+0

查看您的源代码时应该多加注意,谢谢!这是否记录在其他地方? – sloven