2016-04-29 27 views
5

在編寫Jenkins管道腳本時,訪問並行步驟中的變量是否安全?這個文件不清楚。使用Jenkins管道腳本,從並行步驟訪問全局變量是否安全?

例如,這條管道的代碼修改從並行分支共同計數器和隊列:

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等。