【问题标题】:Pass variable from one Jenkins stage to others in sh将变量从一个 Jenkins 阶段传递给 sh 中的其他阶段
【发布时间】:2020-05-22 21:15:22
【问题描述】:

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

在实际代码中,我有很多变量,因此无法在其文件中获取每个变量值。 此外,变量将根据传递的参数在一个脚本中动态设置,因此不能全局声明它们。

提前致谢。

【问题讨论】:

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


    【解决方案1】:

    您可以在stage中将变量输出到同一个文件,然后在每个stage的开头读回并分配给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
      }
    }
    

    【讨论】:

    • 谢谢永。这很有帮助
    猜你喜欢
    • 2021-05-22
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多