переменная библиотеки в общей библиотеке jenkins - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть общая библиотека 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}"}

Ответы [ 2 ]

0 голосов
/ 15 сентября 2018

Переменные уровня модуля могут быть определены через @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 .

0 голосов
/ 15 сентября 2018

Похоже, что загрузчик классов 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}"}

Имея это, вы также можете получить доступ к собственности из вашего Jenkinsfile, например:

@Library('cpsLibFoo') _

utils.funcA()
utils.common = 'baz'
utils.funcB()

Вывод будет:

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