Пожалуйста, прочтите весь вопрос, прежде чем начинать отвечать, потому что я часто задаю длинные вопросы с большим количеством информации. Не забудьте обновить sh страницу, потому что я могу редактировать вопрос, чтобы добавить дополнительную информацию. Я не являюсь носителем английского sh, поэтому, если вы не поняли мой вопрос, следуйте Кодексу поведения и Ожидаемое поведение и задавайте дополнительные вопросы в комментариях. . Спасибо!
Краткое содержание
Я не знаю, как и когда Дженкинс решит запустить экземпляр Docker.
Текущая инфраструктура:
- Мастер Jenkins (Linux) в локальном центре обработки данных (3 исполнителя)
- Узел Jenkins (Windows) в локальном центре обработки данных (3 исполнителя)
- Узел Jenkins (Linux) в качестве постоянного экземпляра Amazon EC2 (3 исполнителя)
Я добавил облако Docker на Amazon ECS. В Jenkins я добавил плагин Amazon EC2 Container Service. Я настроил его в соответствии со скриншотами ниже:
Я настроил простое задание конвейера для тестирования это:
pipeline {
agent {
label 'ecs'
}
tools {
maven "M3"
}
stages {
stage('Build') {
steps {
// Get some code from a GitHub repository
git 'https://github.com/jglick/simple-maven-project-with-tests.git'
// Run Maven on a Unix agent.
sh "mvn -Dmaven.test.failure.ignore=true clean package"
}
post {
// If Maven was able to run the tests, even if some of the test
// failed, record the test results and archive the jar file.
success {
junit '**/target/surefire-reports/TEST-*.xml'
archiveArtifacts 'target/*.jar'
}
}
}
}
}
Это демонстрационный конвейер, который поставляется с Jenkins, единственное изменение, которое я сделал, - это замена
agent any
на
agent {
label 'ecs'
}
Когда я запустите это задание, я вижу в журнале консоли, что запускается экземпляр Docker, что занимает менее получаса, а затем запускается сборка. Через пару минут экземпляр Docker снова исчез.
Я знаю, что ecs-cloud
раскручивается, потому что у меня есть шаблон агента с меткой ecs
, и у меня есть работа с label ecs
, поэтому я заставляю это задание запускаться только на этом узле. Все идет нормально. Это доказывает мне, что на стороне Amazon все в основном настроено так, как должно быть.
У меня много-много заданий, которые выполняются на agent any
, поэтому я бы ожидал что после того, как все исполнители на master
, Windows узле и постоянном узле EC2 будут насыщены, ecs-cloud
сработает. Однако результат фактический таков, что я не могу предсказать, когда это бывает. Когда я смотрю Jenkins, я вижу, что все исполнители stati c переполняются, очередь сборки заполняется, а ecs-cloud
не видно. Но затем я выхожу из системы, и когда я смотрю журналы на следующий день, я вижу, что некоторые задания имеют запускаются на ecs-cloud
за ночь. Как будто они хотят от меня спрятаться. Только когда я запускаю это тестовое задание, упомянутое выше, которое явно выполняется на ecs-cloud
, и я жду, пока оно завершится sh, но ecs-cloud
еще не очистилось после себя, только тогда я могу с уверенностью сказать, когда другие задания также будут выполняться на ecs-cloud
.
Теперь у меня вопрос.
Как я могу надежным и предсказуемым способом определить, когда задание Jenkins будет вращаться вверх контейнер Docker на ecs-cloud
?