Когда запускаются контейнеры Docker / ECS для узлов Jenkins? - PullRequest
0 голосов
/ 26 мая 2020

Пожалуйста, прочтите весь вопрос, прежде чем начинать отвечать, потому что я часто задаю длинные вопросы с большим количеством информации. Не забудьте обновить sh страницу, потому что я могу редактировать вопрос, чтобы добавить дополнительную информацию. Я не являюсь носителем английского sh, поэтому, если вы не поняли мой вопрос, следуйте Кодексу поведения и Ожидаемое поведение и задавайте дополнительные вопросы в комментариях. . Спасибо!


Краткое содержание

Я не знаю, как и когда Дженкинс решит запустить экземпляр Docker.


Текущая инфраструктура:

  • Мастер Jenkins (Linux) в локальном центре обработки данных (3 исполнителя)
  • Узел Jenkins (Windows) в локальном центре обработки данных (3 исполнителя)
  • Узел Jenkins (Linux) в качестве постоянного экземпляра Amazon EC2 (3 исполнителя)

Я добавил облако Docker на Amazon ECS. В Jenkins я добавил плагин Amazon EC2 Container Service. Я настроил его в соответствии со скриншотами ниже:

enter image description here enter image description here

Я настроил простое задание конвейера для тестирования это:

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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...