2016-04-29 6 views
5

Jenkins Pipelineスクリプトを書くとき、パラレルステップから変数にアクセスするのは安全ですか?これに関する文書は明確ではない。例えばJenkins Pipelineスクリプトでは、パラレルステップからグローバル変数にアクセスするのは安全ですか?

、このパイプラインコードは並列分岐から共通カウンタとキューを変更:

def donecount = 0; 
def work = [6,5,4,3,2,1,0] 

def branches = [:] 
for (int i = 0; i < 3; i++) { 

    branches["worker-${i}"] = { 

     while (true) { 
      def item = null 
      try { 
       item = work.remove(0) 
      } catch (java.lang.IndexOutOfBoundsException e) { 
       break 
      } 

      echo "Working for ${item} seconds" 
      sleep time:item 
      donecount += 1 
     } 

    } 

} 
branches.failFast = true 
parallel branches 

echo "Completed ${donecount} tasks" 

答えて

2

現在の実装では、これはおそらく安全で、そのパイプライン実行における協調マルチタスキングを使用する(そうでなければ緑」として知られていますスレッド ")。しかし、私は、例えば、+=がGroovyのアトミックな操作であることは、ここで重要な細かさでは確実ではありません。安全にプレイし、標準Java並行処理ユーティリティ:ConcurrentLinkedQueue,AtomicIntegerなどを使用する方がよい。

関連する問題