2017-08-04 6 views
0

jenkins pipeline dslを仕事の説明に使用します。エージェントを呼び出さずにジェンキンスパイプラインのステージをスキップしますか?

pipeline { 
    agent none 

    options { 
    timestamps() 
    } 

    environment { 
    //SOME ENV VARS 
    } 

    stages { 
    // more stages 
    stage('stage1'){ 
    when { 
     expression { env.BRANCH_NAME == 'master' } 
     } 
    agent { label 'slave1' } 
    steps{ 
     //doing stuff 
    } 
    } 
} 

マスターブランチが構築されたときにのみ実行する必要があり、ビルドプロセスのステージは、あなたがその方向に展開ジョブか何かを考えることができます。今、私たちはそのような何かを持っています。問題は、特定のラベルを持つ代理店のリソースが限られていることです。私たちが他のブランチを構築するときには、スレーブ1のエージェントが呼び出され、ブランチがマスターではないことを確認してからステージをスキップします。すべてのスレーブ1のエージェントがマスターブランチジョブで作業している場合、他のジョブは、スレーブ1のエージェントがそのステージを実行する必要があるかどうかを確認するために利用可能になるのを待たなければならないからです。

jenkinsパイプラインDSLで、スレーブ1エージェントがブランチを決定するのを待たずにそのステージをスキップする方法はありますか?

+0

あなたのパイプラインの最上位レベル、つまり* before *あなたの 'stages'で' agent none'を宣言しましたか? – SevenEleven

+0

はい、あります。編集 – Taron

+1

を参照してください。このマルチブランチパイプラインですか?もしそうなら、 'when {branch 'master'}'の条件を試してください。 – Nexus

答えて

1

私のために働く解決策が見つかりました。なぜ私はそれほど確かではありません。 並列セクションを導入し、ノードを使用することで問題は解決され、エージェントを最初に呼び出すことなくステージがスキップされます。

pipeline { 
    agent none 

    options { 
    timestamps() 
    } 

    environment { 
    //SOME ENV VARS 
    } 

    stages { 
    // more stages 
    stage('stage1'){ 
    when { branch 'master' } 
    steps{ 
     parallel(
     'Job1': { 
      node('slave1'){ 
      //doing stuff 
      } 
     } 
    ) 
    } 
    } 
} 
関連する問題