В конвейере Jenkins, используя Groovy DSL, как раскрутить изображение Docker в фоновом режиме?
У нас была система сборки Jenkins, использующая Groovy DSL, которая хорошо работала для нас.
Но потом мы недавно наняли нового разработчика, который должен быть очень хорошим. Он решил переписать, как работают наши тесты. Сейчас мы пытаемся приспособить наш процесс сборки к его новым идеям. У нас есть приложение на Python. Ранее наша система сборки работала примерно так:
мерзавец
запустить тесты
если хорошо, то подтолкнуть к ECR
Просто.
Но он собрал все тесты в отдельный контейнер. Так что теперь мне нужно сделать что-то вроде:
Docker build главное приложение
"Docker Run" главное приложение
'docker build' тестовое приложение
'docker run' тестовое приложение (это запускает HTTP-запросы в основном приложении)
получить результаты из тестового приложения
закрыть главное приложение
если результаты теста хорошие, нажмите на ECR
Но когда я называю "Docker Run" в главном приложении, оно просто работает вечно. Это веб-приложение Python, Django, с Gunicorn, обслуживающим веб-запросы.
Итак, что мне здесь делать? Стоит ли раскручивать основное приложение в отдельном потоке, возможно, со временем, чтобы автоматически убить его через определенное время?
1 ответ
Ты бежишь docker run -d ...
с -d
параметр отсоединить от контейнера? Может ли это быть проблема?
редактировать
Я думаю, вы найдете, что должны бежать docker run -d
отсоединиться от контейнера, в противном случае он останется на первом контейнере, показывая STDOUT, пока Дженкинс не убьет контейнер, когда он остановит работу. Я бы просто запустил их и дал им имя, а затем в конце работы Дженкинса остановил бы и удалил все контейнеры с этим именем.
Пример:
docker run -d --name jenkins-main-app main-app
docker run -d --name jenkins-test-app test-app
Тогда в конце:
docker stop --name jenkins-main-app
docker stop --name jenkins-test-app
docker rm --name jenkins-main-app
docker rm --name jenkins-test-app
Надеюсь, это поможет.