ОК, найдено решение.
Напоминание: моей целью был запуск и остановка приложения с загрузочной пружиной параллельно моей сборке.
Поскольку я не смог найти способ удаленного уничтоженияПараллельный шаг от другого шага, мне пришлось использовать не элегантный способ сделать это: тайм-аут.
Тайм-аут шага не работает, так как он тайм-аут, только если команда не запускается, ноSpring-Boot: запустить запускает.НЕ РАБОТАЕТ: timeout(time: 1, unit: 'MINUTES') { [...] }
Таким образом, время ожидания должно быть в самой команде.Поначалу это выглядит так:
sh "timeout -s KILL 1m mvn spring-boot:run -Dpmd.skip=true -Dcpd.skip=true -Dfindbugs.skip=true
Итак, через 1 минуту мой забег убит.Это подразумевает новую проблему: уничтожение завершается неудачно на параллельном шаге, поэтому, даже если задание завершается с успешным построением, оно все равно считается неудачным, поскольку одна ветвь задания имеет «сбой» .
Теперь, чтобы избежать сбоя, решением было бы считать шаг при загрузке пружиной всегда успешным.Это делается с помощью command || true
.
Примерно так:
sh "timeout -s KILL 1m mvn spring-boot:run -Dpmd.skip=true -Dcpd.skip=true -Dfindbugs.skip=true || true"
На данный момент мой параллельный шаг заканчивается зеленым успехом.
Согласно моему образцу в вопросе, это тот же самый пример работы:
stage('Scan Sonar') {
parallel(
a: {
Sonar: {
withSonarQubeEnv {
withMaven(maven: 'Apache Maven 3.3.9') {
sh '''
echo "lauching sonar check"
cd git-42c
mvn -Dmaven.test.failure.ignore verify sonar:sonar
cd ..
'''
}
}
}
},
b: {
// Run the maven build
withMaven(maven: 'Apache Maven 3.3.9') {
dir('git-proxy') {
echo "launching mvn spring-boot:run"
sh "timeout -s KILL 1m mvn spring-boot:run -Dpmd.skip=true -Dcpd.skip=true -Dfindbugs.skip=true || true"
}
}
}
)
}