Код вашей совместно используемой библиотеки выполняется вне контекста CPS рабочего процесса, поэтому закрытие, которое вы передаете сценарию vars, не распознает свойство env
. Вы можете решить эту проблему, передав ссылку на сценарий рабочего процесса. Если вы называете свою функцию следующим образом
PublishGitHub(this) {
echo "This is a body with version: ${env.VERSION}"
}
и вы применяете небольшую модификацию к сценарию vars/PublishGitHub.groovy
, например:
#!/usr/bin/env groovy
def call(config, body) {
body.resolveStrategy = Closure.DELEGATE_FIRST
body.delegate = config
echo "\u001B[32mINFO: Publishing...\u001B[m"
body()
echo "\u001B[32mINFO: End Publish...\u001B[m"
}
тогда вы успешно запустите свой конвейер:
[Pipeline] {
[Pipeline] withEnv
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Publish WebAPI)
[Pipeline] echo
[32mINFO: Start Publish...[m
[Pipeline] echo
[32mINFO: Publishing...[m
[Pipeline] echo
This is a body with version: v1.3.537
[Pipeline] echo
[32mINFO: End Publish...[m
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
Если вы хотите ограничить область действия совместно используемой библиотеки, вы всегда можете просто передать env
вместо this
и изменить vars/PublishGitHub.groovy
на что-то вроде этого:
#!/usr/bin/env groovy
def call(env, body) {
def config = [
env: env
]
body.resolveStrategy = Closure.DELEGATE_FIRST
body.delegate = config
echo "\u001B[32mINFO: Publishing...\u001B[m"
body()
echo "\u001B[32mINFO: End Publish...\u001B[m"
}
В этом сценарии вы предоставляете вашей общей библиотеке доступ только к переменным среды.