我目前面临的问题是,詹金斯试图从外部访问/替换sh脚本中的env变量,而该属性是在容器内部定义的:
stage('Run phpunit') {
agent {
docker { image 'php:7.2-alpine' }
}
steps {
sh """
apk add --no-cache ${PHPIZE_DEPS}
pecl install xdebug
docker-php-ext-enable xdebug
php vendor/bin/phpunit --colors=never --log-junit build/junit.xml --coverage-clover build/clover.xml
"""
}
}
Jenkins失败,并显示以下消息:
groovy.lang.MissingPropertyException: No such property: PHPIZE_DEPS for class: groovy.lang.Binding
at groovy.lang.Binding.getVariable(Binding.java:63)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.java:242)
at org.kohsuke.groovy.sandbox.impl.Checker$6.call(Checker.java:288)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:292)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:268)
答案 0 :(得分:2)
问题在于Groovy使用与Bash相同的"${VAR}"
语法。只需使用$
来使\
转义,它将起作用:
sh """ apk add --no-cache \${PHPIZE_DEPS} ...