2016-09-17 18 views
17

私はJenkins 2.7パイプラインのGroovyスクリプトの構造を理解しようとしています。私はpipeline tutorialを読んだことがありますが、それがこれらのトピックでさらに拡大する可能性があると感じています。Jenkinsパイプラインのノード、ステージ、およびステップの違いは何ですか?

パイプラインは多くのstageを持つことができ、各stageは多くのstepを持つことができます。しかし、step();stageのメソッド呼び出しの違いは何ですか、例えばsh([script: "echo hello"]);です。 nodestageの内部または外部にあるべきですか?ジョブの全体的なプロパティがnodeの内部か外部か?それが依存

#!/usr/bin/env groovy 

node('master') { 
    properties([ 
     [$class: 'BuildDiscarderProperty', strategy: [$class: 'LogRotator', numToKeepStr: '10']] 
    ]); 

    stage 'Checkout' 
     checkout scm 

    stage 'Build' 
     sh([script: "make build"]); 

    archive("bin/*"); 
} 

答えて

4

はここでUbuntuのマスターノード上の私の現在の構造です。 node宣言では、(Jenkinsマスタまたはスレーブ上で)エグゼキュータを割り当てます。これにはワークスペースがstashunstashである必要があります。別のエグゼキュータはチェックアウトされたソースを使用できないためです。

パイプラインDSLのいくつかのステップは、フライウェイトエグゼキュータで実行されるため、nodeブロック内にある必要はありません。 は、これはあなたがとにかく複数のノードを割り当てる必要があり、次のような例で、のために役に立つかもしれません。(多分もっと現実的な例)

stage("Checkout") { 
    checkout scm 
} 

stage("Build") { 
    node('linux') { 
    sh "make" 
    } 
    node('windows') { 
    bat "whatever" 
    } 
} 

stage("Upload") { 
    ... 

parallelに複数のノードを割り当てることであろう。したがって、stageコールを別の割り当て済みエグゼキュータ(別名node内)で実行させる必要はありません。

あなたの例は私によく見えます。単一のstage内に複数のnodeを割り当てる必要はありません。追加のオーバーヘッドにすぎないためです。

15

nodestagestepの概念が異なります

  • nodeは何かが起こるものとを指定します。あなたは名前やラベルをつけて、そこでブロックを実行します。

  • stageあなたのスクリプトを上位レベルのシーケンスに構造化します。ステージはパイプラインステージビューの列として表示され、ステージ結果の平均ステージ時間と色が表示されます。

  • stepは、を指定する1つの方法です。を実行する必要があります。 shは類似した品質のものですが、別の種類の動作です。 (また、すでにプロジェクトとして指定されているもののためにbuildを使用することができます。)

のでstep sがnode秒、(そうでない場合は、それらがマスター上で実行されている)、およびnode S内に存在することができstepは、stageで全体シーケンスに構成することができます。

+0

最後の言葉は「ステージ」の意味ですか? – IronSean

+0

はい、そうです。 –

関連する問題