2016-04-29 7 views
5

Jenkins Pipeline komut dosyalarını yazarken, değişkenlere paralel adımlardan erişmek güvenli midir? Bu konuda dokümantasyon açık değil. O Boru Hattı yürütme aksi yeşil”olarak bilinen kooperatif multitasking (kullanır bu, muhtemelen güvenlidir, şimdiki uygulamadaJenkins Pipeline komut dosyaları ile, global bir değişkene paralel adımdan erişmek güvenli midir?

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" 

cevap

2

: Örneğin

, bu boru hattı kod paralel dallardan ortak sayaç ve kuyruğu değiştirir İş Parçacığı"). Ama emin değilim, örneğin, += Groovy burada önemli olan taneciklikte bir atomik işlemdir. Güvenli çalmak ve standart Java eşzamanlılık yardımcı programlarını kullanmak daha iyidir: ConcurrentLinkedQueue, AtomicInteger, vb

İlgili konular