2017-04-19 23 views
4

Jenkinsパイプラインを作成しています。このパイプラインは3つのジョブを構築しています(JobOne、JobTwo、JobThree)。私は次のコードでジョブを実行することができます。Jenkinsパイプラインジョブ(条件付き)

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がパスしたら、ジョブをもう一度実行します。 JobThoが完了してから10分後にJobThreeを実行する必要があります。私はこの状態でパイプラインを作る方法がわかりません。私はジェンキンスのパイプラインを初めて熟知しています。

私はいくつかのJenkins WiKiページをチェックしましたが、上記の条件の条件で実装する適切な方法を見つけることができませんでした。私は、if条件をどのように実装できるかを調べるために以下のコードを試してみました。しかしそれは失敗する。

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) 

誰かがこのを通じて私を導いてくださいことはできますか?

ありがとうございます!

答えて

7

がありジェンキンスパイプラインでの学習曲線は間違いですので、落胆しないでください:)

私はジェンキンスパイプラインを使い始める人にはJenkins' official documentationなどPipeline Steps Reference pageをチェックアウトをお勧めします。

FYI、stage s without a block argument is deprecated;次のようにstage Sを定義する必要があります。

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

パイプラインは、それが失敗した場合は、JobOneビルドを再試行するために使用することができますretry stepを持っています。

ステージ2とステージ3の間で10分待機する場合は、sleep stepを使用できます。

if文は、Groovy is actually compiled on a JVM以降、Javaと同じように書かれています。これらのそれぞれを組み合わせる

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' 
    } 
} 
+0

おかげトンクリストファー!! :)私は確かにそれにダイビングを取るだろう。私はこれに完全に新しく、道を見つけることができませんでした。再度、感謝します。上記の手順を試してみます。 – Raji

+0

こんにちはクリストファー。 JobOneはうまくいっています。それは期待どおりに動作しますが、10分後に実行する必要があるtirdジョブは、次のエラーで失敗しています。groovy.lang.MissingPropertyException:クラス:WorkflowScriptのMINUTESはありません。私はこれについてオンラインで確認しています。何か考えがあるなら、私に知らせてください。 – Raji

+0

私は睡眠(30)だけ与える場合は動作します。私はユニットではなく時間だけを渡すと意味します。ユニット(MINUTES、MILLISECONDS)を渡すと、上記のエラーがスローされます。 – Raji