访问jenkins共享库代码中的环境变量
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了访问jenkins共享库代码中的环境变量相关的知识,希望对你有一定的参考价值。
当我使用新的共享库时,我无法访问任何src类的环境变量,该类由Jenkinsfile直接执行或通过var / * .groovy脚本执行。即使我将withEnv添加到var / * groovy脚本中,此问题仍然存在。
将环境变量传播到jenkins共享库src类执行的诀窍是什么?
Jenkinsfile
withEnv(["FOO=BAR2"]) {
println "Jenkinsfile FOO=${FOO}"
library 'my-shared-jenkins-library'
lib.displayEnv()
共享库var / lib.groovy
def displayEnv() {
println "Shared lib var/lib FOO=${FOO}"
MyClass c = new MyClass()
}
共享库src / MyClass.groovy
class MyClass() {
MyClass() {
throw new Exception("Shared lib src/MyClass FOO=${System.getenv('FOO')")
}
}
**运行结果**
Jenkinsfile FOO=BAR
Shared lib var/lib FOO=BAR
java.lang.Exception: Shared lib src/MyClass FOO=null
...
答案
肯定看起来处理这个的唯一方法是将这个从Jenkins文件传递到var / lib.groovy并从该对象中获取
Jenkinsfile
withEnv(["FOO=BAR2"]) {
library 'my-shared-jenkins-library'
lib.displayEnv(this)
var / lib.groovy
def displayEnv(script) {
println "Shared lib var/lib FOO=${FOO}"
MyClass c = new MyClass(script)
}
src类
MyClass(def script) {
throw new Exception("FOO=${script.env.FOO}")
}
另一答案
我相信你可以填充环境变量,如下所示,共享库可以访问。
Jenkinsfile
env.FOO="BAR2"
library 'my-shared-jenkins-library'
lib()
瓦尔/ lib.groovy
def call(){
echo ("FOO: ${FOO}")
echo ("FOO:"+env.FOO)
}
另一答案
另一种方法是使用“steps”变量:
在Jenkinsfile中
mypackages.myclass.mymethod(steps)
在src
class myclass implements Serializable {
void mymethod(steps) {
String myEnvVar = steps.sh(returnStdout: true, script: "env | grep 'myVar' | cut -f 2- -d '='")
}
}
另一答案
不确定专家会对解决方案说些什么,但我能够使用evaluate从共享库中访问我的Jenkinsfile中定义的变量。
Jenkinsfile
myVar = "abc"
瓦尔/ test.groovy
String myVar = evaluate("myVar")
另一答案
对我来说,这才有效。
Jenkinsfile:
@Library('jenkins-library') _
pipeline {
agent any
environment {
FOO = 'bar'
}
stages {
stage('Build') {
steps {
script {
buildImage()
...
库vars / buildImage.groovy:
def call() {
println(this.env.FOO)
println(env.FOO)
}
因此,要将环境传递给库中的类,只需在this
中使用vars/yourfunc.groovy
即可。
以上是关于访问jenkins共享库代码中的环境变量的主要内容,如果未能解决你的问题,请参考以下文章