Назад | Перейти на главную страницу

Как в конвейере Jenkins, используя Groovy DSL, развернуть изображение Docker в фоновом режиме?

У нас была система сборки Jenkins, использующая Groovy DSL, которая нам хорошо работала.

Но затем мы недавно наняли нового разработчика, который должен быть очень хорошим. Он решил переписать принцип работы наших тестов. Сейчас мы пытаемся приспособить наш процесс сборки к его новым идеям. У нас есть приложение на Python. Раньше наша система сборки выглядела примерно так:

git pull

запустить тесты

если все хорошо, то нажмите на ECR

Просто.

Но он вытащил все тесты в отдельный контейнер. Итак, теперь мне нужно сделать что-то вроде:

  1. docker build - главное приложение

  2. 'docker run' главное приложение

  3. 'docker build' тестовое приложение

  4. 'docker run' тестовое приложение (запускает HTTP-запросы в основном приложении)

  5. получить результаты из тестового приложения

  6. закрыть главное приложение

  7. если результаты теста хорошие, нажмите на ECR

Но когда я вызываю «docker run» в основном приложении, оно работает вечно. Это веб-приложение Python, Django, с Gunicorn, обслуживающим веб-запросы.

Итак, что мне здесь делать? Должен ли я раскрутить основное приложение в отдельном потоке, возможно, со временем, чтобы автоматически убить его через определенное время?

Ты бежишь docker run -d ... с -d параметр отсоединить от контейнера? Может ли это быть проблема?

редактировать

Я думаю, ты обнаружишь, что тебе нужно бежать docker run -d отсоединиться от контейнера, в противном случае он просто останется на первом контейнере с отображением STDOUT, пока Дженкинс не убьет контейнер, когда он остановит задание. Я бы просто запустил их и дал им имя, а затем в конце задания Jenkins остановил и удалил все контейнеры с этим именем.

Пример:

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

Надеюсь, это поможет.