2016-04-29 4 views
5

जेनकींस पाइपलाइन स्क्रिप्ट लिखते समय, समानांतर चरणों से चरों तक पहुंच सुरक्षित है? दस्तावेज इस पर स्पष्ट नहीं है।जेनकींस पाइपलाइन स्क्रिप्ट के साथ, क्या एक समांतर चरण से वैश्विक चर का उपयोग करना सुरक्षित है?

उदाहरण के लिए, इस पाइपलाइन कोड एक आम काउंटर और समानांतर शाखाओं से कतार को संशोधित करता है:

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

वर्तमान कार्यान्वयन में, यह शायद सुरक्षित है, में है कि पाइप लाइन निष्पादन सहकारी मल्टीटास्किंग (जिसे अन्यथा "हरी जाना जाता का उपयोग करता है धागे ")। लेकिन मुझे यकीन नहीं है कि, उदाहरण के लिए, += ग्रोवी में ग्रोन्युलैरिटी पर एक परमाणु ऑपरेशन है जो यहां मायने रखता है। इसे सुरक्षित खेलने के लिए बेहतर और मानक जावा concurrency उपयोगिताओं का उपयोग करें: ConcurrentLinkedQueue, AtomicInteger, आदि

संबंधित मुद्दे