当前位置: 首页 > 知识库问答 >
问题:

在针对虚拟 jenkins 测试 DSL 脚本时如何设置环境变量?

吴经略
2023-03-14

我正在尝试自动测试 Jenkins groovy dsl 脚本,如下所示:

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

我认为这个想法非常简单,我遇到的问题是为虚拟Jenkins设置环境变量。我遵循这里的说明:

https://wiki.jenkins-ci.org/display/JENKINS/Unit测试

特别是“如何设置环境变量”部分,并将以下内容添加到我的测试执行器中:

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中运行时,它会按预期工作…那么有什么方法可以在测试詹金斯上下文中设置这些“参数”或环境变量呢?

我如何在Build.groovy中使用ENVS变量的例子:

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

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

共有1个答案

阳俊德
2023-03-14

JenkinsJobManagement 构造函数的第二个参数是环境变量映射,它将在 DSL 脚本中可用。

Map<String, String> envVars = [
    FOO: 'BAR'
]
JobManagement jm = new JenkinsJobManagement(System.out, envVars, new File('.'))
 类似资料:
  • 问题内容: 我正在尝试设置脚本以增加Xcode项目的内部版本号。我进行了一次API调用以获取当前的内部版本号,然后我希望对其进行递增,然后将该新的版本号用作环境变量,以便Xcode插件可以使用它。 我安装了EnvInject插件,但是我不知道如何将var从我的shell脚本中获取到环境变量中。 这设置为我需要的值,但是如何将其分配给环境变量,以便以后在工作中访问它? 问题答案: 添加一个构建步骤以

  • 问题内容: 我有一个bash脚本,用于设置环境变量并运行命令 现在,我想使用python代替bash,因为我想计算传递给命令的一些参数。 我试过了 和 其次是 但由于未设置LD_LIBRARY_PATH,因此程序总是放弃。 我怎样才能解决这个问题? 感谢帮助! (如果我在调用python脚本之前导出LD_LIBRARY_PATH,则一切正常,但我希望python确定路径并将环境变量设置为正确的值)

  • 问题内容: 我有一个脚本来设置交叉编译所需的所有变量。这只是其中的一部分: 如果这样做,所有环境变量都将导入到当前的Shell会话中,并且可以编译我的示例。 是否可以在cmake中导入这些变量?如果是,怎么办? 更多细节: 我正在使用ELDK v 5.4,它的安装脚本生成一个脚本,该脚本设置所有环境变量 我找到了本教程,该教程说明了如何手动设置交叉编译,但没有说明如何使用脚本来设置所有内容 如果我

  • 问题内容: 在我的项目文件夹中,创建了venv文件夹。 当我在VS Code中运行命令时,我的venv文件夹未显示。我像这里建议的那样上了一层,但是VS Code没有看到我的虚拟解释器。 我错过了什么? 问题答案: PS: 我已经使用vs代码已有一段时间了,发现了另一种在vs代码中显示虚拟环境的方法。 通过命令提示符转到上级文件夹。 键入并回车。[为我在Windows和Linux上工作。] 这也应

  • Yii 2 官方兼容 Codeception 测试框架, 你可以创建以下类型的测试: 单元测试 - 验证一个独立的代码单元是否按照期望的方式运行; 功能测试 - 在浏览器模拟器中以用户视角来验证期望的场景是否发生 验收测试 - 在真实的浏览器中以用户视角验证期望的场景是否发生。 Yii 为包括 yii2-basic 和 yii2-advanced 在内的应用模板脚手架提供全部三种类型的即用测试套件

  • 问题内容: 从代码移动到新机器(可能运行不同的OS)相对简单并且给出相同结果的意义上来说,主要的工作之一就是确保代码的可移植性。 来自Python背景,我习惯了虚拟环境的概念。与所需软件包的简单列表一起使用时,这可以确保安装的软件包和库在任何计算机上都可用,而不会引起太多麻烦。当然,这不能保证- 不同的操作系统都有自己的缺点和特点-但这可以为您提供95%的解决方案。 R中是否存在这样的东西?即使它