Сборка, тестирование и развертывание приложения Flask REST API из GitHub с использованием конвейера Jenkins, работающего в Docker
В настоящее время даже для небольших веб-приложений или микросервисов нам нужен более простой и быстрый способ развертывания приложений, который был бы надежным и безопасным. Эти приложения могут быть простыми, но они быстро меняются из-за бизнес-требований, и для обработки этих изменений нам определенно нужен конвейер CI/CD для развертывания.
Jenkins — один из таких инструментов, который может облегчить вашу жизнь, когда вы хотите создавать, тестировать и развертывать «на лету». Эта статья предоставит вам полный или, по крайней мере, большинство вещей, которые вам нужны для создания конвейера CI / CD для развертывания приложения Flask с использованием Jenkins.
Условие:
- Докер
- Python3.6+
- Гит
- Колба
Есть список содержимого, которое я буду освещать, чтобы заставить это работать.
Обзор:
В этой статье мы будем выполнять перечисленные ниже операции:
- Сборка приложения Flask (локальная сборка)
- Создание JenkinsFile
- Раскрутка Jenkins на Docker
- Интеграция репозитория GitHub в Jenkins
- Тестирование Jenkins Pipeline Trigger
1. Сборка приложения Flask (локальная сборка)
Во-первых, мы попытаемся собрать наше приложение Flask локально, прежде чем отправить его на GitHub.
git clone https://github.com/Santhoshkumard11/Flask-Calculator-Beginner-Docker.git
Запустите приложение Flask, как показано ниже (после входа в Flask-Calculator-Beginner-Docker)
flask run or python app.py
2. Создание JenkinsFile:
Мы будем создавать трехэтапный конвейер , но вы можете иметь столько, сколько требуется вашему приложению.
- Этап сборки — здесь мы загружаем код из вашего репозитория кода , но, поскольку мы уже настроили GitHub в качестве источника ветки, Jenkins выполнит работу по загрузке кода или, по крайней мере, в нашем случае. Другое дело, если у вас есть приложение React или Angular.
- Этап тестирования — вы запускаете модульные тесты для приложения Flask и выводите результаты с помощью xmlrunner , которые будут получены Jenkins.
- Этап развертывания — запустите приложение Flask на nohup и добавьте вывод в log.txt , но при фактическом развертывании вы будете использовать Gunicorn или WSGI .
У нас также есть пост-этап , который будет выполнять очистку или уведомление по электронной почте об успехе или неудаче конвейера.
Javascript
pipeline { agent any stages { stage( "Build" ) { parallel { stage( "Build" ) { steps { sh "echo "building the repo"" } } } } stage( "Test" ) { steps { sh "python3 test_app.py" input(id: "Deploy Gate" , message: "Deploy ${params.project_name}?" , ok: "Deploy" ) } } stage( "Deploy" ) { steps { echo "deploying the application" sh "sudo nohup python3 app.py > log.txt 2>&1 &" } } } post { always { echo "The pipeline completed" junit allowEmptyResults: true , testResults: "**/test_reports/*.xml" } success { echo "Flask Application Up and running!!" } failure { echo "Build stage failed" error( "Stopping early…" ) } } } |
3. Запускаем Jenkins в Docker:
Извлеките образ Docker из Docker Hub
docker pull santhoshkdhana/jenkins-python3.9
Теперь пришло время раскрутить контейнер с помощью приведенной ниже команды:
docker run --name myjenkins -p 8080:8080 -p 50000:50000 -p 5000:5000 -v /your/home:/var/jenkins_home -v /your/home/sock:/var/run/docker.sock jenkins-python3.9
Проверьте, работает ли контейнер, используя
docker container list -a
Убедившись, что контейнер запущен и работает, установите необходимые пакеты.
docker exec myjenkins pip3 install flask flask_restful xmlrunner
Введите localhost:8080 в своем любимом браузере. Вы должны увидеть, как Дженкинс запрашивает пароль, или используйте приведенную ниже команду, чтобы получить пароль. Используйте исходный пароль из командной строки, чтобы создать пользователя-администратора .
docker exec myjenkins cat /var/jenkins_home/secrets/initialAdminPassword
Примечание: убедитесь, что ваш демон docker запущен, иначе используйте запуск службы docker для запуска демона (Ubuntu/Debian).
4. Интеграция репозитория GitHub в Jenkins:
- Начните с создания нового элемента, назовите его Flask Jenkins Build (на ваш выбор)
- Выберите стиль многоветвевого конвейера и нажмите «ОК».
- Выберите GitHub из источников филиалов
- Вставьте https://github.com/Santhoshkumard11/Flask-Calculator-Beginner-Docker и нажмите «Подтвердить» (вам нужно добавить учетные данные, если это не общедоступное репо)
- Как только он скажет, что подключен, прокрутите вниз и нажмите « Применить » и « Сохранить ».
5. Тестирование Jenkins Pipeline Trigger:
Теперь вы интегрировали репозиторий GitHub в Jenkins, и теперь всякий раз, когда вы фиксируете ветку qa , конвейер будет запускаться.
Перейдите на главную страницу Jenkins и щелкните имя созданного вами конвейера , а затем имя ветки .
Чтобы запустить это вручную, нажмите « Создать сейчас» на боковой панели слева.
После этапа тестирования вам нужно будет вручную нажать «Развернуть», чтобы запустить этап развертывания.
Нажмите Open Blue Ocean , чтобы увидеть новый пользовательский интерфейс с этапами сборки.