我正在创建Jenkins管道,该管道使用sh调用bash脚本函数。每个阶段都是一个bash函数,用于设置一些变量,这些变量的值在下一阶段中需要。
pipeline {
agent any
stages {
stage('setName') {
steps {
sh "/home/setname.sh stackoverflow"
}
}
stage('echoName') {
steps {
sh "/home/echoname.sh"
}
}
}
}
setname.sh
#!/bin/bash
name=$1
echo "name: $name"
echoname.sh
#!/bin/bash
echo "setName: $name"
在上面的非常简单的示例中,在setname.sh
中,我设置了名称变量。现在,我需要在echoname.sh
在实际代码中,我有很多变量,因此,获取每个变量值在其文件中不是一个选择。 而且,变量将基于传递的参数在一个脚本中动态设置,因此不能全局声明它们。
谢谢。
答案 0 :(得分:0)
您可以分阶段将变量输出到同一文件,然后在每个阶段的开始进行读取并分配给env
,如下所示:
stage('a') {
steps {
script {
loadEnvs('env.props')
}
sh """
echo var1 = a >> env.props
"""
}
}
stage('b') {
steps {
script {
loadEnvs('env.props')
}
sh """
echo $env.var1
echo var2 = b >> env.props
"""
}
}
def loadEnvs(propFile) {
props = readProperties(propFile)
props.each { key, val ->
env[key] = val
}
}