提问人:user3146966 提问时间:11/9/2023 更新时间:11/13/2023 访问量:28
Jenkins - 将变量从一个阶段传递到另一个阶段中的函数
Jenkins - Pass a variable from a stage to a function inside another stage
问:
在 Jenkins 中,我想将变量的值从一个阶段传递到另一个阶段的函数(在库中定义)。我使用 env 变量进行了测试,但该函数将采用变量的初始值。我的 Jenkinsfile 代码是:
@Library('shared-library')_
pipeline {
agent any
environment {
TF_WORK_DIR = '.'
}
stages {
stage('Set-Environment') {
steps {
script {
println("----------------------------Init Script-----------------------------")
TF_WORK_DIR = "file"
}}
}
stage('Init') {
steps {
script{
println("TF_WORK_DIR in init is ${TF_WORK_DIR}")
if (TF_WORK_DIR != ".") {
println("TF_WORK_DIR in if condition init is ${TF_WORK_DIR}")
function()
}
else {
println("TF_WORK_DIR in else condition init is ${TF_WORK_DIR}")
function()
}
}
}
}
}}
我的函数是
def call(timeoutMinutes = 10) {
try {
echo "TF_WORK_DIR inside function ${TF_WORK_DIR}"
} catch (Exception e) {
currentBuild.result = 'FAILURE'
echo "An error occurred: ${e.getMessage()}\n"
}}
电流输出为
----------------------------Init Script-----------------------------
TF_WORK_DIR in TF init is file
TF_WORK_DIR in if condition TF init is file
TF_WORK_DIR inside function .
预期输出
----------------------------Init Script-----------------------------
TF_WORK_DIR in init is file
TF_WORK_DIR in if condition init is file
TF_WORK_DIR inside function file
我还尝试在管道外部而不是环境集团内部定义变量,但它不起作用 我错过了什么吗?如何使函数取TF_WORK_DIR的更新值?
谢谢。
答:
0赞
Sam Kisada
11/9/2023
#1
您需要在声明性管道之外定义变量:
#library function
def myFunc(
Map source_config = [:],
Map updates = [:]){
updates.each{ k,v ->
source_config[k] = v
}
return source_config
}
def Map myMap = [:]
pipeline {
agent any
stages{
stage('a'){
steps{
script{
myMap.paramA = 'test'
myMap.paramB = 'test'
}
}
}
stage('B'){
steps{
script{
myMap = myFunc( myMap, [ paramA :134])
print(myMap.paramA)
}
}
}
}
}
评论
0赞
user3146966
11/13/2023
这对我不起作用。相同的行为。
0赞
Sam Kisada
12/19/2023
@user3146966,您需要从函数中返回一些东西来更新变量。查看更新的答案
0赞
user3146966
11/13/2023
#2
最后,我更改了函数代码以接受参数,并将该变量作为参数传递。谢谢。
评论
environment