Pet*_*ahn 5 jenkins-shared-libraries
当我使用新的共享库时,我无法访问任何由Jenkinsfile或通过var / *。groovy脚本直接执行的src类的环境变量。即使我将withEnv添加到var / * groovy脚本中,该问题仍然存在。
使环境变量传播到jenkins共享库src类执行的诀窍是什么?
詹金斯档案
withEnv(["FOO=BAR2"]) {
println "Jenkinsfile FOO=${FOO}"
library 'my-shared-jenkins-library'
lib.displayEnv()
Run Code Online (Sandbox Code Playgroud)
共享库var / lib.groovy
def displayEnv() {
println "Shared lib var/lib FOO=${FOO}"
MyClass c = new MyClass()
}
Run Code Online (Sandbox Code Playgroud)
共享库src / MyClass.groovy
class MyClass() {
MyClass() {
throw new Exception("Shared lib src/MyClass FOO=${System.getenv('FOO')")
}
}
Run Code Online (Sandbox Code Playgroud)
**运行结果**
Jenkinsfile FOO=BAR
Shared lib var/lib FOO=BAR
java.lang.Exception: Shared lib src/MyClass FOO=null
...
Run Code Online (Sandbox Code Playgroud)
看起来处理这个问题的唯一方法是将Jenkins 文件中的this传递到 var/lib.groovy 并从该对象中收获
詹金斯档案
withEnv(["FOO=BAR2"]) {
library 'my-shared-jenkins-library'
lib.displayEnv(this)
Run Code Online (Sandbox Code Playgroud)
var/lib.groovy
def displayEnv(script) {
println "Shared lib var/lib FOO=${FOO}"
MyClass c = new MyClass(script)
Run Code Online (Sandbox Code Playgroud)
}
源类
MyClass(def script) {
throw new Exception("FOO=${script.env.FOO}")
}
Run Code Online (Sandbox Code Playgroud)
我相信您可以如下填充环境变量,共享库可以访问该环境变量。
詹金斯文件
env.FOO="BAR2"
library 'my-shared-jenkins-library'
lib()
Run Code Online (Sandbox Code Playgroud)
vars/lib.groovy
def call(){
echo ("FOO: ${FOO}")
echo ("FOO:"+env.FOO)
}
Run Code Online (Sandbox Code Playgroud)