Jenkins: создание Continuous Delivery процесса в Jenkins для проекта Python с использованием Docker

Исходный код был взят с этого репозитария
https://github.com/cirulls/hands-on-jenkins/
А именно отсюда
https://github.com/cirulls/hands-on-jenkins/tree/master/section_4/code/cd_pipeline
Этот репозитарий используется в видеокурсе
https://www.packtpub.com/virtualization-and-cloud/hands-continuous-integration-and-automation-jenkins-video

В первом примере Dev, Stage и Live–окружения будут запущены на одном сервере

Объянение шагов в pipeline

1.Загрузка кода из репозитария

2.Сборка Docker-образа с приложением

Имя образа имеет формат

3.Загрузка собранного образа в удаленный Docker-репозитарий

4.Разворачивание приложения из Docker-образа, собранного на шаге 2 на Dev-сервере

а) проверка существует ли уже запущенный контейнер с указанным именем и остановка такого контейнера, если он существует
б) удаление остановленного на предыдущем шаге контейнера
в) запуска контейнера на основе образа, собранного на шаге 2

Имя контейнера и номер порта, который выставляется наружу(открывается на прослушивание на docker-хосте) зависит от окружения
Окружение: имя контейнера, порта

5.Запуск UAT-теста на Dev-сервере

Запускается скрипт sh «tests/runUAT.sh с позиционным параметром ${port}, где вместо
номер порта подставляется номер порта соглаcно окружению (см. шаг 4)

6. Разворачивание приложения из Docker-образа, собранного на шаге 2 на Stage-сервере(аналогично тому, как это выполнено в шаге 4)

7. Запуск UAT-теста на Stage-сервере(аналогично тому, как это выполнено в шаге 5)

8.Ручное подтверждение разворачивания приложения на Live-сервере

9. Разворачивание приложения из Docker-образа, собранного на шаге 2 на Live-сервере(аналогично тому, как это выполнено в шаге 4)

10. Запуск UAT-теста на Live-сервере(аналогично тому, как это выполнено в шаге 5)

Dockerfile для сборки Docker-образа с приложением имеет вид

Файл для запуска User-acceptance теста имеет вид

Индексная/главная/дефолтная страница имеет вид.

В этом файле в исходном/оригинальном репозитарии указанны некорректные/устаревшие ссылки на изображения
Реально рабочие URL можно получить отсюда:
https://www.buzzfeed.com/copyranter/the-best-cat-gif-post-in-the-history-of-cat-gifs
Часть таких ссылок на изображения я и добавил в файл app.py(вмето имеющихся там неактуальных ссылок)

Unit-тестирование отключено в pipeline
Скрипт, используемый для Unit-тестирования

Pipeline имеет вид

 

Во-втором примере Dev, Stage и Live–окружения будут запущены на трех разных серверах

Изменим pipeline для реализации такой возможности:
1.Сборки образа и запуска приложения на Dev-окружении на одном сервере(например, Jenkins Master)
2.Запуска приложения для Stage-окружения на втором сервере (например, Jenkins Slave1)
3.Запуска приложения для Live-окружения на третьем сервере (например, Jenkins Slave2)
Порты я оставил неизменными, но при необходимости порты на Dev/Stage/Live-окружениях можно изменить на стандартные(80)

Изменений всего два по сравнение с предыдущим pipeline:
1.Для запуска приложения на Stage/Live-окружениях были добавлена опция agent с соответствующей меткой

2. Для Stage/Live-окружений добавлен сheckout-кода с репозитария для того, чтобы локально на Stage/Live-серверах появился файл tests/runUAT.sh, используемый для UAT-теста

Pipeline имеет вид

 

Источник:
https://www.packtpub.com/virtualization-and-cloud/hands-continuous-integration-and-automation-jenkins-video
https://github.com/cirulls/hands-on-jenkins/tree/master/section_4/code/cd_pipeline

Комментирование и размещение ссылок запрещено.

Комментарии закрыты.

Яндекс.Метрика