2017-09-21 11 views
1

WindowsとLinuxでビルド、テスト、デプロイする必要のあるアプリケーションがあります。Jenkinのパイプラインでステージ間で複数のノードを再利用

私は40のスレーブを持っています。ここで20はLinuxで、20はWindowsの 'Lin'と 'Win'のラベルです。

まず、2つのノード(LinuxとWindows)を割り当てます。問題は、複数の段階でそれらを使用する必要があることです。しかし、私はこれをやり遂げる良い方法を見つけていません。

このコードは、それは私が行う必要があるものを説明するのに役立つはずです。

pipeline { 
agent none 

stages { 
    stage('Build') { 
     parallel (
      "Linux Build": { 
       node('Lin') { // Say this allocates 'Jenkins-node-lin1' 
        ... 
      }, 
      "Windows Build": { 
       node('Win') { // And this allocates 'Jenkins-node-win1' 
        ... 
       } 
      } 
     ) 
    } 
    stage('Test') { 
     steps { 
      parallel (
       "Linux Test": { 
        node('Lin') { // I need to reuse Jenkins-node-lin1 here 
         ... 
       }, 
       "Windows Test": { 
        node('Win') { // And Jenkins-node-win1 here as well 
         ... 
        } 
       } 
      ) 
     } 
    } 
    stage('Deploy') { 
     steps { 
      parallel (
       "Linux Deploy": { 
        node('Lin') { // Same story down here 
         ... 
       }, 
       "Windows Deploy": { 
        node('Win') { // And this one too 
         ... 
       } 
      ) 
     } 
    } 
} // End stages 
} 

私はかなりの数のソリューション」を試してみたが、どれもこれまで私のために働いていないと正直に言うと、私は」この機能がJenkinsに組み込まれているかどうかわかりません。

いずれにせよ、何か助けていただければ幸いです!

私はこれを試していないが、私はあなたが(ところで、あなたはあなたの手順{}ブロックが欠けている)ような何かを行うことができると思い

答えて

0

def linux_node 
def windows_node 

pipeline { 
agent none 

stages { 
    stage('Build') { 
     parallel (
      "Linux Build": { 
       node('Lin') { // Say this allocates 'Jenkins-node-lin1' 
        linux_node = env.NODE_NAME 
      }, 
      "Windows Build": { 
       node('Win') { // And this allocates 'Jenkins-node-win1' 
        windows_node = env.NODE_NAME 
       } 
      } 
     ) 
    } 
    stage('Test') { 
     steps { 
      parallel (
       "Linux Test": { 
        node(linux_node) { // I need to reuse Jenkins-node-lin1 here 
         ... 
       }, 
       "Windows Test": { 
        node(windows_node) { // And Jenkins-node-win1 here as well 
         ... 
        } 
       } 
      ) 
     } 
    } 
    stage('Deploy') { 
     steps { 
      parallel (
       "Linux Deploy": { 
        node(linux_node) { // Same story down here 
         ... 
       }, 
       "Windows Deploy": { 
        node(windows_node) { // And this one too 
         ... 
       } 
      ) 
     } 
    } 
} // End stages 
} 

私は親和性を必要とするためのあなたの理由を確認していませんワークスペースで特定のファイルが利用できるようになっている場合は、このようにするのは少し危険です。同じワークスペースが使用される保証はありません。これは通常通りですが、ワークスペースが変更される可能性があります。

他のオプションがスタッシュあなたが次の段階でそれらのステージの間とunstash維持する必要がありあなたのファイルにあります。それでは、どのエージェントが終わるかは問題ではありません。 (ノードアフィニティの他の理由がない限り)

+0

これを試すことができましたか?それはあなたのために働いたのですか? –

+0

私は以来、これと同様のものをテストしており、うまくいきます。あなたはこれを稼働させましたか? –

関連する問題