Обновления глобальных переменных с разных узлов в конвейере Jenkins со сценарием

Как синхронизируются обновления глобальных переменных в конвейере со сценариями Jenkins?

Вот упрощенный код, в котором глобальная переменная в mylist

def mylist = []                             // Global Variable
def jobs = [:]
def joblist = [“A”, “B”]
joblist.each {it->
    jobs[it] = {
        node() {
            stage(it) {
                // lots of processing ...
                mylist.add(it)            // Global variable update in jobs running in parallel
            }
        }
    } 
}
parallel jobs

Я хочу, чтобы он содержал либо [A, B], либо [B, A], если задания выполнялись успешно.

Вопросы:

  1. Это гарантировано или могут быть проблемы с параллелизмом?

  2. Выполняется ли обновление в мастере сразу или после завершения задания?

  3. Что, если mylist представляет собой сложную структуру данных, в которой разные задания обновляют разные части структуры данных?


person NRS2000    schedule 02.03.2020    source источник
comment
@ zett42 - спасибо за полезную ссылку. Означает ли это, что для обновления глобальной структуры данных я должен создать глобальную функцию для обновления структуры данных? Означает ли это также, что для этой функции выполняется удаленный вызов от агента к мастеру?   -  person NRS2000    schedule 02.03.2020
comment
Единственное, что вам нужно изменить, это def mylist = [].asSynchronized(). Это позволяет синхронизировать вызовы mylist.add() между потоками. Вам не нужна глобальная функция. Также не будет удаленного вызова от агента к мастеру, потому что код конвейера Groovy всегда выполняется на мастере, независимо от node(), см. эта старая документация: Каждая сборка конвейера запускается на главном сервере с использованием легковесного исполнителя - несчетного слота, который, как предполагается, не требует значительных вычислительных затрат. мощность.   -  person zett42    schedule 03.03.2020
comment
Спасибо! Это многое объясняет и поможет мне скорректировать мои представления о 180 градусах :).   -  person NRS2000    schedule 03.03.2020