Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jenkins共享库中的库变量_Jenkins_Jenkins Shared Libraries - Fatal编程技术网

jenkins共享库中的库变量

jenkins共享库中的库变量,jenkins,jenkins-shared-libraries,Jenkins,Jenkins Shared Libraries,我在repo中有一个Jenkins共享库,通常是文件夹结构: vars utils.groovy 在utils.groovy中,我有一些函数: void funcA() {} void funcB() {} 现在我想定义一个常数,该模块中的所有函数都可以使用,但当我尝试此操作时: String common='hi' void funcA() {println "A ${common}"} void funcB() {println "B ${common}"} 我得到一个例外,即co

我在repo中有一个Jenkins共享库,通常是文件夹结构:

vars
  utils.groovy
在utils.groovy中,我有一些函数:

void funcA() {}
void funcB() {}
现在我想定义一个常数,该模块中的所有函数都可以使用,但当我尝试此操作时:

String common='hi'
void funcA() {println "A ${common}"}
void funcB() {println "B ${common}"}
我得到一个例外,即common不是一个存在的符号:

groovy.lang.MissingPropertyException: No such property: common for class: utils
目前,我正在通过以下方法绕过这个问题:

String _getCommon() {
    return 'hi'
}
void funcA() {String common=_getCommon(); println "A ${common}"}
void funcB() {String common=_getCommon(); println "B ${common}"}

看起来CPS类加载器不支持简单属性。 然而,事实证明,您可以使用以下内容:

class InnerClass {
    static String myProperty = 'Hi'
}

String setCommon(String value) {
    InnerClass.myProperty = value
}

String getCommon() {
    return InnerClass.myProperty
}

void funcA() {println "A ${common}"}
void funcB() {println "B ${common}"}
您还可以从Jenkins文件中访问该属性,如:

@Library('cpsLibFoo') _

utils.funcA()
utils.common = 'baz'
utils.funcB()
输出将是:

[Pipeline] echo
A Hi
[Pipeline] echo
B baz
[Pipeline] End of Pipeline

模块级变量可通过@字段定义:

import groovy.transform.Field
@Field var =...
void func() {println var}
同一个库中的其他模块也可以按照通常的方式引用它。假设上述内容是在utils.groovy中定义的,则另一个.groovy可能有:

void func() {println utils.var}

谢谢你的发帖,我不会想到的。但是我发现了一个更简单的方法,我已经发布了。Access甚至可以从Jenkins文件本身内部工作(使用
utils.var
)。实际上,使用此解决方案,您无法从管道内部重写
utils.var
。如果您想这样做(例如配置),请使用Joerg S.的解决方案works@MarcusHeld只需在库中定义一个setter函数。在我的解决方案中,您不需要Joerg定义的innerclass,代码也简单得多。我尝试了一下,但从另一个脚本设置变量不起作用。由于某种原因,它最终为空。好的,我的代码中会有另一个,我很确定我已经完成了,但可能没有。