将变量从一个Jenkins阶段传递到sh中的其他阶段

时间:2020-05-22 21:15:22

标签: bash variables jenkins jenkins-plugins jenkins-groovy

我正在创建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

中使用该变量值($ name)

在实际代码中,我有很多变量,因此,获取每个变量值在其文件中不是一个选择。 而且,变量将基于传递的参数在一个脚本中动态设置,因此不能全局声明它们。

谢谢。

1 个答案:

答案 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
  }
}
相关问题