3

Можно ли запустить рабочие задания Jenkins одновременно таким образом, что в случае, если некоторые из конфигураций не могут быть запущены, родительское задание ожидает, пока все они не будут инициированы в синхронизировать?Начать работу Jenkins одновременно синхронно

Я уже проверил Matrix Project и Pipeline плагины для запуска параллельных работ, но, похоже, обе они не имеют возможности заморозить выполнение до тех пор, пока вся конфигурация не будет запущена в одно и то же время.

+0

Можете ли вы более точно объяснить, что вы подразумеваете под исполнением _freeze, пока вся конфигурация не может быть запущена в одно и то же время?? Вы хотите, чтобы все ветви запускались одновременно, ожидая, что все слоты исполнителей будут доступны сразу? Зачем? –

+0

@JesseGlick Я бы хотел протестировать распределенную систему, которая будет либо работать через несколько узлов или исполнителей. Для этого я хотел бы, чтобы Дженкинс контролировал сборки и применял порог тайм-аута в случае тупика. – luka5z

ответ

1

В Pipeline вы могли бы сделать что-то вроде (непроверенных)

def count = 0 
parallel a: { 
    node { 
    count++ 
    waitUntil {count == 3} 
    sh 'make CONFIG=a' 
    } 
}, b: { 
    node { 
    count++ 
    waitUntil {count == 3} 
    sh 'make CONFIG=b' 
    } 
}, c: { 
    node { 
    count++ 
    waitUntil {count == 3} 
    sh 'make CONFIG=c' 
    } 
} 

Это вообще не очень хорошая идея, так как вы можете эффективно тупиковой ждет все три узла должны быть заблокированы одновременно.

+1

Спасибо. Основываясь на вашем предположении, я написал простой конвейер [script] (https://github.com/luka5z/jenkinsci-workflow-plugin-examples/blob/master/jobs/parallel-waituntil.groovy). Он не только ждет, пока все узлы будут доступны, но также обернут его вокруг тайм-аута. – luka5z

+0

Ницца. Советы: нет необходимости импортировать 'FlowInterruptedException', когда, вероятно, достаточно' catch'ing plain Java 'InterruptedException'; и, возможно, замените 'manager.build.doStop()' (то есть 'currentBuild.rawBuild.doStop()') с удобным для песка 'throw e', особенно если вы добавите' failFast: true' на шаг 'parallel' , –