История: мы ищем решение по оптимизации нашей конвейерной обработки (бывший рабочий процесс).
В настоящее время мы запускаем несколько параллельных развертываний и тестов, распределенных по 2 сборщикам, по 4 исполнителя в каждом.
Конвейер запускается отправкой Git, поэтому последующие отправки запускают несколько сборок. Мы поэкспериментировали с вариантом параллелизма этапов: 1, который красиво блокирует шаг последующей сборкой, но активируется, когда этот конкретный этап завершен.
Вопрос(ы):
Я не уверен, что это лучшая практика, но мне кажется, было бы лучше не запускать новую сборку, пока не будет сделана предыдущая. (Исходя из того, что мы выделили для него ресурсы, и его нужно разрешить завершить, даже если это не последний и самый большой коммит).
Q1: Является ли это лучшей практикой?
Q2: как мы упреждаем новую сборку триггера, продолжая запускать предыдущую? (Я могу себе представить повторение сборок этой работы и остановку новой...).
См. конфиг первого этапа [1]
[1] первый этап..
stage name: 'Checkout and build WAR'
node {
def mvnHome = tool 'Maven 3.2.x'
checkout([$class : 'GitSCM',
poll : true,
branches : [[name: '*/master']],
doGenerateSubmoduleConfigurations: false,
extensions : [[$class : 'RelativeTargetDirectory',
relativeTargetDir: 'checkout-directory']],
submoduleCfg : [],
userRemoteConfigs : [[url: 'https://some.repo/repo.git']]])
// Archive the cloned repo.
stash name: 'src', includes: 'checkout-directory/war/src/, checkout-directory/war/pom.xml'
// Run without tests, do the unit and integration tests in a separate stage.
sh "${mvnHome}/bin/mvn -f checkout-directory clean install -DskipTests"
// Archive the application build.
stash name: 'war', includes: 'checkout-directory/war/target/*.war'
}