在jenkins共享库代码中访问环境变量

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)

Pet*_*ahn 9

看起来处理这个问题的唯一方法是将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)


Dil*_*era 5

我相信您可以如下填充环境变量,共享库可以访问该环境变量。

詹金斯文件

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)