【问题标题】:ׁׁׁׁHow to return value from bash file to jenkinsfile? [duplicate]ׁׁׁׁ如何将值从 bash 文件返回到 jenkinsfile? [复制]
【发布时间】:2021-10-09 20:20:49
【问题描述】:

我有以下詹金斯文件:

pipeline {
    agent any
    environment {
        VERSION=""
    }
    stages {
        stage ("release"){
            steps {
                script {
                    ${VERSION}=sh(returnStdout: true, script:$("./bashscript.sh).trim())
                }
            }
        }
}

我想做的很简单,我想调用 bash 文件,该文件将值返回到我的 Jenkinsfile 中的环境变量。

我有 2 个问题:1. 如何从 bash 文件中返回值? 2.如何将其插入到Jenkinsfile中的环境变量中?

这是我的 .sh 文件:

# !/bin/bash
if [ some condition... ] 
then
    some commands....
    return "value"
else
    some commands....
    return "other value"
fi

找了半天也没找到,有没有可能?

注意:我看到了许多 groovy 的解决方案,但我需要它在管道中...

【问题讨论】:

  • how to return value from bash file? 不确定这是什么意思。您是否尝试使用 bash 从文件中替换来自 jenkins 的变量?
  • 是的,我想将 bash 文件中的变量返回到 jenkinsfile 中的变量
  • 虽然您已经接受了答案,但看起来很复杂,就像 Q 一样。您尝试“返回”的值是否只是一个结果代码 (0,1-255)?管道 sh 步骤有 return code (optional)。而这个code-maven 的例子有一个巧妙的方法来聚合它们。

标签: bash jenkins jenkins-pipeline sh


【解决方案1】:
  1. 要从 shell 为 jenkins 设置变量示例,请使用 returnStdout: true 。 在您的脚本中回显您需要的内容
myVal = sh(script: ' ./myFunc.ksh ', returnStdout: true)
  1. 从 bash 执行函数,因为它们假定返回一个变量。 要使功能可见,您需要获取它的文件(导入)示例如下
# for point 2 
#/bin/bash
# content of your file ./myfileFunc.ksh
function myFunc {
   typeset l_in_param1="$1"
   
   if [[ $l_in_param1 == "A" ]]; then
      echo "VAL_A"  
   elif [[ $l_in_param1 == "B" ]]; then
      echo "VAL_B"   
   else
      echo "ERROR VAL" >&2
   fi
}
# source it
source ./myfileFunc.ksh

#use :
val1=$(myFunc A)
val2=$(myFunc C)

  1. 脚本将数据返回到标准输出和错误输出,以便您以后可以通过使用 , returnStdout: true 从那里读取将其存储在变量中

myVal = sh(script: ' ./myFunc.ksh ', returnStdout: true)

# content of your file ./myFunc.ksh

typeset l_in_param1="$1"
   
if [[ $l_in_param1 == "A" ]]; then
    echo "VAL_A"  
elif [[ $l_in_param1 == "B" ]]; then
    echo "VAL_B"   
else
    echo "ERROR VAL" >&2
fi


l_result1=$( ./myFunc.ksh A ) 
l_result2=$( ./myFunc.ksh C )

echo $l_result1; 
echo $l_result2;

当我们将错误移至错误输出时,这里 l_result2 将为空

Execution of code example

【讨论】:

  • 但是我怎样才能将它返回到我的 jenkins 文件中呢?我不需要回应它......
  • env.envType = sh(script: ' ./myFunc.ksh ', returnStdout: true).trim() echo 中的所有内容都进入标准输出,因此您可以阅读它 --> returnStdout : 真
  • in bash word return 用于将错误代码传递给调用者。 Echo 正在返回函数值,因此这里 echo : ``` function test { echo "VAL" ;返回 1; } ; val=$(测试);回声$? ;回声 $val ; ```
  • OK 它工作正常,但它返回脚本中所有命令的输出,我怎样才能得到最后一个(我做回声的那个)
  • 我建议创建函数并调用它们以返回特定值。否则,您需要将所有其他命令重定向到错误输出,例如: cmd1 >&2; cmd2 >&2; cmd3 >&2;回声“最后”
猜你喜欢
  • 1970-01-01
  • 2022-10-14
  • 2016-03-07
  • 2017-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多