詹金斯共享库中的库变量
library variable in jenkins shared library
我在回购协议中有一个 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 加载程序不支持简单属性。
然而事实证明你可以使用类似的东西:
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}"}
有了这个,您还可以从 Jenkinsfile 中访问 属性,例如:
@Library('cpsLibFoo') _
utils.funcA()
utils.common = 'baz'
utils.funcB()
输出将是:
[Pipeline] echo
A Hi
[Pipeline] echo
B baz
[Pipeline] End of Pipeline
模块级变量可以通过@Field定义:
import groovy.transform.Field
@Field var =...
void func() {println var}
同一个库中的其他模块也可以按照通常的方式引用它。例如,假设上面的内容是在 utils.groovy 中定义的,那么 other.groovy 可能有:
void func() {println utils.var}
参见http://docs.groovy-lang.org/latest/html/gapi/groovy/transform/Field.html。
我在回购协议中有一个 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 加载程序不支持简单属性。 然而事实证明你可以使用类似的东西:
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}"}
有了这个,您还可以从 Jenkinsfile 中访问 属性,例如:
@Library('cpsLibFoo') _
utils.funcA()
utils.common = 'baz'
utils.funcB()
输出将是:
[Pipeline] echo
A Hi
[Pipeline] echo
B baz
[Pipeline] End of Pipeline
模块级变量可以通过@Field定义:
import groovy.transform.Field
@Field var =...
void func() {println var}
同一个库中的其他模块也可以按照通常的方式引用它。例如,假设上面的内容是在 utils.groovy 中定义的,那么 other.groovy 可能有:
void func() {println utils.var}
参见http://docs.groovy-lang.org/latest/html/gapi/groovy/transform/Field.html。