jenkins - 使用 Jenkins Pipeline 脚本,从并行步骤访问全局变量是否安全?

标签 jenkins groovy jenkins-workflow jenkins-pipeline

在编写 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/

相关文章:

asp.net-mvc - 使用 ASP.NET MVC 的 Jenkins 主/从

Jenkins-workflow - 提升阶段(比 "input"更好的解决方案)?

parsing - groovy更新配置文件

docker - 如何在 Jenkins 声明性管道中将变量传递给 docker args

git - Jenkins:一个项目的多个 Git 存储库

c# - SonarQube 无法完成构建后步骤

groovy - 如何在没有正则表达式的情况下为 spring cloud contract DSL 构建自己的检查

java - 如何将字符串转换为一段代码(工厂方法模式?)

git - 在 Jenkins 管道作业上访问 SCM (Git) 变量

docker - 在GCE上通过jenkins作业尝试时无法部署k8s pod