在编写 Jenkins Pipeline 脚本时,从并行步骤访问变量是否安全?文档对此并不清楚。
例如,这个管道代码从并行分支修改了一个公共(public)计数器和队列:
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"
最佳答案
在当前的实现中,这可能是安全的,因为管道执行使用协作多任务(也称为“绿色线程”)。但我不确定,例如 +=
是 Groovy 中的一个原子操作,在这里很重要。最好安全地使用标准 Java 并发实用程序:ConcurrentLinkedQueue
, AtomicInteger
, ETC。
关于jenkins - 使用 Jenkins Pipeline 脚本,从并行步骤访问全局变量是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36928564/