【问题标题】:Declarative pipeline - Running a shell command声明式管道 - 运行 shell 命令
【发布时间】:2021-06-27 10:06:43
【问题描述】:

我有一个我正在更新的 jenkins 管道脚本希望使用以下 shell 命令:

sh script: """
  export PATH=\"${PATH}\":\"${WORKSPACE}\"
  BASE_DIR=$(dirname $0)
  source "${BASE_DIR}/shellscript.sh"
                               
  helm uninstall ${helmReleaseName}  --namespace ${kubenamespace} 
"""
             

结果总是:

Errors encountered validating Jenkinsfile:

我玩过它。 但它没有通过验证?问题是为什么?

谢谢

【问题讨论】:

  • 需要有关确切错误的更多信息,但看起来您需要转义不用于字符串插值的 $ 符号。 BASE_DIR=\$(dirname \$0)

标签: jenkins jenkins-pipeline jenkins-groovy jenkins-job-dsl


【解决方案1】:

带有“sh”步骤的声明式管道如下所示:

stage ("Preparing") {
    steps {
        sh'''
          export PATH=\"${PATH}\":\"${WORKSPACE}\"
          BASE_DIR=$(dirname $0)
          source "${BASE_DIR}/shellscript.sh"
                               
          helm uninstall ${helmReleaseName}  --namespace ${kubenamespace}
        '''
    }
}

看看here

【讨论】:

  • 如果你使用单引号 ''' 而不是双引号 """ 字符串插值将不起作用并且参数将不会被计算, 所以应该使用多行双引号。
  • 它通过将双引号更改为单引号对我有用并评估了参数。