Сборка, тестирование и развертывание приложения Flask REST API из GitHub с использованием конвейера Jenkins, работающего в Docker

Опубликовано: 1 Сентября, 2022

В настоящее время даже для небольших веб-приложений или микросервисов нам нужен более простой и быстрый способ развертывания приложений, который был бы надежным и безопасным. Эти приложения могут быть простыми, но они быстро меняются из-за бизнес-требований, и для обработки этих изменений нам определенно нужен конвейер CI/CD для развертывания.

Jenkins — один из таких инструментов, который может облегчить вашу жизнь, когда вы хотите создавать, тестировать и развертывать «на лету». Эта статья предоставит вам полный или, по крайней мере, большинство вещей, которые вам нужны для создания конвейера CI / CD для развертывания приложения Flask с использованием Jenkins.

Условие:

  • Докер
  • Python3.6+
  • Гит
  • Колба

Есть список содержимого, которое я буду освещать, чтобы заставить это работать.

Обзор:

В этой статье мы будем выполнять перечисленные ниже операции:

  1. Сборка приложения Flask (локальная сборка)
  2. Создание JenkinsFile
  3. Раскрутка Jenkins на Docker
  4. Интеграция репозитория GitHub в Jenkins
  5. Тестирование 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 , чтобы увидеть новый пользовательский интерфейс с этапами сборки.