2016-04-29 13 views
5

Khi viết kịch bản Đường dẫn Jenkins, có an toàn khi truy cập các biến từ các bước song song không? Tài liệu không rõ ràng về điều này.Với kịch bản đường dẫn Jenkins, có an toàn khi truy cập biến toàn cầu từ một bước song song không?

Ví dụ, mã đường ống này sẽ thay đổi một bộ đếm thông thường và hàng đợi từ các chi nhánh song song:

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" 

Trả lời

2

Trong việc thực hiện hiện nay, điều này có lẽ an toàn, trong đó thực hiện đường ống sử dụng đa nhiệm hợp tác xã (hay còn gọi là “màu xanh lá cây chủ đề ”). Nhưng tôi không chắc chắn rằng, ví dụ, += là một hoạt động nguyên tử trong Groovy ở mức chi tiết quan trọng ở đây. Tốt hơn để phát an toàn và sử dụng các tiện ích đồng thời Java chuẩn: ConcurrentLinkedQueue, AtomicInteger, v.v.

Các vấn đề liên quan