针对虚拟詹金斯测试 DSL 脚本时如何设置环境变量?
How to set environment variables when testing DSL scripts against dummy jenkins?
我正在尝试自动测试 Jenkins groovy dsl 脚本,如下所示:
https://github.com/sheehan/job-dsl-gradle-example
我认为这个想法非常简单,我遇到的问题是为虚拟 Jenkins 设置环境变量。我按照此处的说明操作:
https://wiki.jenkins-ci.org/display/JENKINS/Unit+Test
特别是 "How to set env variables" 部分并将以下内容添加到我的测试执行程序中:
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}”(好像它是由 Jenkins 的种子作业中的参数提供的),在 Jenkins 中实际 运行ning 时按预期工作...那么有什么方法可以在测试 jenkins 上下文中设置这些 "parameters" 或 env 变量?
我如何在 Build.groovy 中使用 ENVS 变量的示例:
def envs = '-'
"${ENVS}".eachLine{
def env = it
envs+=env+'-'
}
envs.substring(0,envs.length()-1)
job('Build'+envs) {
...
}
JenkinsJobManagement
构造函数的第二个参数是 DSL 脚本中可用的环境变量映射。
Map<String, String> envVars = [
FOO: 'BAR'
]
JobManagement jm = new JenkinsJobManagement(System.out, envVars, new File('.'))
我正在尝试自动测试 Jenkins groovy dsl 脚本,如下所示:
https://github.com/sheehan/job-dsl-gradle-example
我认为这个想法非常简单,我遇到的问题是为虚拟 Jenkins 设置环境变量。我按照此处的说明操作:
https://wiki.jenkins-ci.org/display/JENKINS/Unit+Test
特别是 "How to set env variables" 部分并将以下内容添加到我的测试执行程序中:
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}”(好像它是由 Jenkins 的种子作业中的参数提供的),在 Jenkins 中实际 运行ning 时按预期工作...那么有什么方法可以在测试 jenkins 上下文中设置这些 "parameters" 或 env 变量?
我如何在 Build.groovy 中使用 ENVS 变量的示例:
def envs = '-'
"${ENVS}".eachLine{
def env = it
envs+=env+'-'
}
envs.substring(0,envs.length()-1)
job('Build'+envs) {
...
}
JenkinsJobManagement
构造函数的第二个参数是 DSL 脚本中可用的环境变量映射。
Map<String, String> envVars = [
FOO: 'BAR'
]
JobManagement jm = new JenkinsJobManagement(System.out, envVars, new File('.'))