Jenkins管道工作条件

Raj*_*aji 4 groovy if-statement jenkins 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'
}
Run Code Online (Sandbox Code Playgroud)

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

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

node {
   stage 'Stage 1'
   echo 'Hello World 1'
   build 'Pipeline-Test/JobOne'
   post {
       always{
           build 'Pipeline-Test/JobOne'
       }
   }
Run Code Online (Sandbox Code Playgroud)

错误:

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)
Run Code Online (Sandbox Code Playgroud)

有人可以指导我这个吗?

提前致谢!

Chr*_*ung 8

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

我建议任何人开始使用Jenkins Pipelines,查看Jenkins的官方文档以及Pipeline Steps Reference页面.

仅供参考,stageš 没有块参数被弃用 ; 你应该stage按如下方式定义s:

stage('Name of Stage') {
   // code
}
Run Code Online (Sandbox Code Playgroud)

管道具有重试步骤,JobOne如果失败,您可以使用该步骤重试构建.

要在第2阶段和第3阶段之间等待10分钟,您可以使用睡眠步骤.

if语句的编写方式与Java类似,因为Groovy实际上是在JVM上编译的.

if (animal == 'dog' || boolean == true) {
Run Code Online (Sandbox Code Playgroud)

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

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'
     }
}
Run Code Online (Sandbox Code Playgroud)