Shell脚本中的Jenkins Pipeline Environment Variable创建新行

时间:2019-07-13 08:23:50

标签: bash shell jenkins jenkins-pipeline

我正在尝试在Jenkins管道中访问一个env变量,并希望在以相同管道但不同步骤执行的Shell脚本中使用它,

pipeline {
    agent any
    tools {
        maven 'M2'
    }

    environment {
        stable_revision = sh(script: 'curl -H "Authorization: Basic $base64encoded" "https://xyz.sad" | jq -r "name"', returnStdout: true)
    }

    stages {
        stage('Initial-Checks') {
            steps {
          echo "Stable Revision: ${env.stable_revision}" //displays the value
          bat "sh && sh undeploy.sh"
        }}
...
}}

这是一个示例Shell脚本,有很多行,但是我只能访问上面的stable_revision变量,这是一个问题,

#!/bin/bash
echo xyz = ${stable_revision} #### this gives the right value xyz = 22
echo xyz2 = ${stable_revision}/d ### here after the value the /d is written in new line

例如,假设stable_revision的值为22,那么在SH脚本echo中,我得到的值为

xyz2 = 22
 /d

我希望该值为xyz2 = 22/d

2 个答案:

答案 0 :(得分:1)

您可以使用.trim()删除尾随的换行符。

environment {
        stable_revision = sh(script: 'curl -H "Authorization: Basic $base64encoded" "https://xyz.sad" | jq -r "name"', returnStdout: true).trim()
}
  

returnStdout(可选) :   如果选中,则任务的标准输出将作为步骤值作为字符串返回,而不是打印出来   到构建日志。 (如果有标准错误,仍会打印到   日志。)您通常需要在结果上调用.trim()以剥离   尾随换行符。

https://jenkins.io/doc/pipeline/steps/workflow-durable-task-step/#sh-shell-script

答案 1 :(得分:1)

如果您使用bash代替sh作为命令,则可以从Bash的内置字符串转换中受益

此处修剪[:space:]类女巫中的所有尾随字符,包括实际空格和换行符。

echo "xyz2 = ${stable_revision%%[[:space:]]}/d"

如果$stable_revision始终是整数,则可以通过以下方式强制外壳将其像整数一样使用:

echo "xyz2 = $((stable_revision))/d"

如果您确定$stable_revision不包含空格,则可以像表元素一样使用它来强制外壳修剪所有空格:

sr=($stable_revision); echo "xyz2 = ${sr[0]}/d"

您还可以使用自动修整子外壳程序返回值的方法,该方法将修整中间的任何前导,尾随和重复的空格:

echo "xyz2 = $(echo ${stable_revision})/d"`