Jenkins管道工作条件

时间:2017-04-19 14:30:39

标签: if-statement jenkins groovy jenkins-pipeline

我正在创建一个Jenkins管道。这条管道正在建立三个工作岗位(JobOne,JobTwo,JobThree)。我可以使用以下代码运行该作业。

node {
   stage 'Stage 1'
   echo 'Hello World 1'
   build 'Pipeline-Test/JobOne'

   stage 'Stage 2'
   echo 'Hello World 2'
   build 'Pipeline-Test/JobTwo'

   stage 'Stage 3'
   echo 'Hello World 3'
   build 'Pipeline-Test/JobThree'
}

现在我想在其中加入一些条件。例如,当JobOne失败时,作业必须再次重新启动。当JobTwo通过时,想再次运行工作。 JobTh完成后,JobThree应在10分钟后运行。我不确定如何使用这种情况制作管道。我是Jenkins管道的新手。

我检查了几个Jenkins WiKi页面,但是如果条件符合上述条件,则找不到合适的方法。我尝试下面的代码只是为了检查'如果'条件可以实施。但它失败了。

node {
   stage 'Stage 1'
   echo 'Hello World 1'
   build 'Pipeline-Test/JobOne'
   post {
       always{
           build 'Pipeline-Test/JobOne'
       }
   }

错误:

java.lang.NoSuchMethodError: No such DSL method 'post' found among [archive, bat, build, catchError, checkout, checkpoint, deleteDir, dir, dockerFingerprintFrom, dockerFingerprintRun, echo, error, fileExists, git, input, isUnix, load, mail, node, parallel, properties, publishHTML, pwd, readFile, retry, sh, sleep, sshagent, stage, stash, step, teamconcert, timeout, tool, triggerRemoteJob, unarchive, unstash, waitUntil, withCredentials, withDockerContainer, withDockerRegistry, withDockerServer, withEnv, wrap, writeFile, ws]
    at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:107)

有人可以指导我完成这个吗?

提前致谢!

1 个答案:

答案 0 :(得分:8)

詹金斯管道肯定存在学习曲线,所以不要气馁:)

对于任何开始使用Jenkins Pipelines的人,我建议您查看Jenkins' official documentation以及Pipeline Steps Reference page

仅供参考,stage s without a block argument is deprecated;你应该按如下方式定义stage

stage('Name of Stage') {
   // code
}

管道有一个retry step,如果失败,您可以使用它来重试JobOne版本。

要在第2阶段和第3阶段之间等待10分钟,您可以使用sleep step

if语句就像在Java中一样编写,因为Groovy is actually compiled on a JVM

if (animal == 'dog' || boolean == true) {

结合其中的每一个,我认为这是你可以使用的:

node {
     stage ('Stage 1') {
          echo 'Hello World 1'
          retry(1) {
               build 'Pipeline-Test/JobOne'
          }
     }
     stage ('Stage 2') {
          echo 'Hello World 2'
          build 'Pipeline-Test/JobTwo'
     }

     sleep time:10, unit:"MINUTES"

     stage ('Stage 3') {
          echo 'Hello World 3'
          build 'Pipeline-Test/JobThree'
     }
}