詹金斯`if(sh'...')`

时间:2020-04-08 16:49:03

标签: jenkins groovy jenkins-groovy

如何让Jenkins在条件内运行sh命令?我希望它中止执行以'WIP'开头的git commit的执行。

我设想的是:

stage('Build') {
  steps {
    // some steps ...
    script {
      if (sh "git log -1 --pretty='format:%B' | grep -q ^WIP") {
        currentBuild.result = 'ABORTED'
        return
      }
    }
    // more steps ...
  }
}

...但是我的管道抱怨“期望')',发现'git log -1 --pretty ='format:%B'| grep -q ^ WIP'“

2 个答案:

答案 0 :(得分:0)

似乎是Groovy解析器的问题。只需将参数括在括号中即可:

if (sh("git log -1 --pretty='format:%B' | grep -q ^WIP"))

答案 1 :(得分:0)

您使用sh步骤的方式不返回任何输出,并且sh(command)不返回任何输出。您需要使用sh(script: command, returnStdout: true)来获取shell命令的输出。另外,您需要从-q删除grep参数,以将任何输出返回到控制台。

stage('Build') {
  steps {
    // some steps ...
    script {
      if (sh(script:"git log -1 --pretty='format:%B' | grep ^WIP", returnStdout: true).trim()) {
        currentBuild.result = 'ABORTED'
        return
      }
    }
    // more steps ...
  }
}