【问题标题】:Jenkins Declarative Pipeline is not supporting shell/bash syntaxJenkins 声明式管道不支持 shell/bash 语法
【发布时间】:2021-12-07 01:54:00
【问题描述】:

我的 jenkins 管道中有一个 shell 脚本,它将调用 mvn。为此,我必须将变量值传递给 mvn。该变量未在 Jenkins 管道的外壳内传递。但是当从本地机器外壳尝试时,它可以正常工作。

ARTIFACT_NAME="Sample_Artifact"

pipeline{
    agent {
        node{
            label "${AGENT}"
    
    }
    }
   stages{
         
        
        stage("Setting MultiJob Properties"){
            steps{
                      sh '''set +x



export VERSION=$(mvn -B -q -Dexec.executable=echo -Dexec.args=\${${ARTIFACT_NAME}} )

echo $VERSION
'''

            }
        }
   }
}

预期过程:export VERSION=$(mvn -B -q -Dexec.executable=echo -Dexec.args=${Sample_Artifact} )

预期输出:1.0001

ARTIFACT_NAME - 我从 Jenkins UI 传递它。

${${ARTIFACT_NAME}} - 此变量在 Freestyle 作业中完美替换值,它在 Pipeline 作业中引发错误。

错误消息:script.sh: 3: 替换错误

谁能帮我解决这个问题?

【问题讨论】:

  • 什么样的错误? ${${ARTIFACT_NAME} 缺少关闭 }
  • 显示您的实际管道。可能需要 " 而不是 '。Explanation,
  • FYR, pipeline{ agent { node{ label "${AGENT}" } } stages{ stage("Setting MultiJob Properties"){ steps{ sh '''set +x export VERSION=$( mvn -B -q -Dexec.executable=echo -Dexec.args=\${${ARTIFACT_NAME}} ) echo $VERSION ''' } } } }
  • 错误信息是什么意思?
  • 例如:以下代码在我的本地机器外壳中运行时没有任何错误,但是当我从 Jenkins 管道尝试时它抛出错误。 #!/bin/sh ARTIFACT_NAME="test" sample=$(echo \${${ARTIFACT_NAME}}) echo "$sample" shell 输出:${test} Jenkins 管道错误:script.sh:3:错误替换@梅尔乔特

标签: bash variables jenkins jenkins-pipeline


【解决方案1】:

正如 Ian 所写,您将整个脚本作为文字 (''') 而不是插值字符串 (""") 传递,因此变量名不会被其值替换:

pipeline{
  agent {
    node {
      label AGENT
    }
  }
  stages {
    stage("Setting MultiJob Properties") {
      steps {
        sh """set +x
           export VERSION=\$(mvn -B -q -Dexec.executable=echo -Dexec.args=\${$ARTIFACT_NAME})
           echo \$VERSION"""
      }
    }
  }
}

【讨论】:

  • 如果我用 " 而不是 ' 替换,我会收到语法错误错误消息:非法字符串正文
  • 解决方案不起作用@towel
  • 这就是您在脚本中使用变量的方式。我错过了 $VERSION 中美元符号的转义 - 现在添加它。
  • 实际上测试用例应该像这样传递输出,如果 ARTIFACT_NAME="Sample_Art" 它应该将表达式传递给 mvn,如下所示,$(mvn -B -q -Dexec.executable=echo - Dexec.args=${"Sample_Art"}) @towel
  • 你基本上是在描述我所做的:) 你也不需要引用变量名。您是否尝试过运行解决方案的固定版本?
猜你喜欢
  • 2019-05-20
  • 1970-01-01
  • 1970-01-01
  • 2017-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-12
  • 2021-01-15
相关资源
最近更新 更多