Jenkins Pipeline if-else脚本未给出预期结果

时间:2019-02-12 16:41:11

标签: if-statement jenkins-pipeline jenkins-groovy

我来这里已经很多年了,通常会找到我想要的答案,但是这次我有一个相当具体的问题。

我正在构建一个流水线,该流水线使用一个选择,一对字符串和withCredentials参数,通过一条流水线的3层路径遍历一个流水线中的一组步骤。哪个工作正常,直到我的产品部署在“ if else”测试失败的地方。

我有一个具有基本密码的(秘密文本)jenkins凭证,我试图将其与在构建开始时输入的字符串进行比较。我已经检查了咒语的基本用法,它可以按预期工作。但是,当我将其添加到完整的管道中时,它将失败。

我认为这是因为我没有使用带有步骤,脚本,节点或顺序的正确语法...?这对我来说是一个新的空间,我希望有人在此代码空间中花费更多时间会看到我的错误。谢谢!提前!

失败:

...
      stage('Deploy_PROD') {
          when {
            expression { params.DEPLOY_TO == 'Deploy_PROD'}
          }
          steps{
                withCredentials([string(credentialsId: '${creds}', variable: 'SECRET')]) {
                script {
                    if  ('${password}' == '$SECRET') {
                        sh 'echo yes'
                    }  else {
                        sh 'echo no'
                }
            }
        }
      }
    }

作品:

stage('example')
        node {
            withCredentials([string(credentialsId: '${creds}', variable: 'SECRET')]) {
                if  ('${password}' == '$SECRET') { 
                    sh 'echo "test"'
                }  else {
                    sh 'echo ${password}'
                }
            }
        }

2 个答案:

答案 0 :(得分:0)

解决方案应该是

if  (password == SECRET) { 

也建议阅读-What's the difference of strings within single or double quotes in groovy?

答案 1 :(得分:0)

我最终在我们的AD服务器上使用了withCredentials选项,从而可以更好地控制用户对部署到受控环境的访问。感谢您的协助。