Если вы ищете способ тестировать и развертывать ваши образы Docker в CircleCI, создание конвейера CI/CD может значительно улучшить доставку программного обеспечения.
В этом руководстве вы узнаете, как потенциально разработать конвейер CI/CD для вашего образа Docker, используя CircleCI.
Продолжайте чтение и развертывайте свои образы Docker только в том случае, если они проходят тестирование!
Предварительные требования
Этот учебник будет практическим демонстрационным. Если вы хотите следовать за нами, убедитесь, что у вас есть следующее:
- A GitHub account and GitHub repository that is already set up.
- A CircleCI account linked to your GitHub account.
- A Linux machine – This tutorial uses Ubuntu 20.04.3 LTS.
Создание образа Docker приложения на основе Python
Прежде чем приступить к созданию конвейера CI/CD, вы сначала создадите образ Docker на основе Python приложения, которое отображает тексты в веб-браузере. Вы кратко пройдете через то, как создается приложение, напишете тестовые случаи для приложения, а затем контейниризуете его.
1. Откройте ваш терминал и выполните следующую команду для установки
Flask и Pytest. Flask – это фреймворк, используемый для создания веб-приложений на Python, а Pytest используется для написания тестового кода на Python.
2. Затем создайте каталог проекта с выбранным вами именем, но в этом демонстрационном проекте каталог проекта называется flask-circleci
. Этот каталог предназначен для хранения ресурсов, необходимых для этого урока.
3. Создайте файл с именем flask-circleci/main.py и заполните следующий код.
Приведенный ниже код отображает текст “Добро пожаловать в мое Flask-приложение” на домашней странице в браузере.
4. Теперь создайте еще один файл с именем flask-circleci/test_main.py и скопируйте/вставьте следующий код.
Приведенный ниже код создает тестовый клиент для вашего приложения.
Pytest требует, чтобы имя вашего тестового файла начиналось с test_, как показано ниже.
5. Выполните следующие команды, чтобы перейти в каталог вашего проекта (flask-circleci
), выполните тест для вашего проекта.
Если тест успешен, вы получите 100% прогресса, как показано ниже.

6. Затем создайте текстовый файл (requirements.txt) для документации ваших зависимостей в корневом каталоге и заполните текст ниже. Этот файл необходим при построении вашего образа Docker, чтобы он работал правильно.
7. Наконец, создайте новый файл (flask-circleci/Dockerfile), и напишите инструкции ниже в Dockerfile, чтобы построить ваш образ Docker.
Инструкции в Dockerfile выполняют следующее:
- Создайте файл в вашем образе.
- Копирует все файлы в текущем каталоге (flask-circleci).
- Запустите ваш код
Создание конвейера CI/CD CircleCI
Теперь у вас есть готовый образ Docker, вы создадите конвейер CI/CD для тестирования вашего кода, и если все тесты пройдут успешно, образ Docker будет отправлен на Docker Hub. Docker Hub – это сервис, подобный GitHub, но для образов Docker, который помогает вам находить и обмениваться контейнерными образами со своей командой или другими разработчиками.
Для создания конвейера CI/CD выполните следующие шаги:
1. Откройте ваш любимый веб-браузер и войдите в свой аккаунт Docker Hub.
2. На домашней странице Docker Hub нажмите на опцию Создать репозиторий для создания репозитория на Docker Hub.

3. Установите уникальное имя для вашего репозитория. В этом руководстве используется репозиторий под названием circleci-tutorial, как показано ниже.

4. Создайте новый файл (flask-circleci/config.yml) в корне вашего проекта и скопируйте/вставьте код ниже в файл config.yml.
Нижеприведенный код получает готовый образ Python и использует его для установки зависимостей и запуска модульных тестов для сборки и отправки вашего Docker-образа в ваш репозиторий Docker Hub.
Обычно, для живого проекта вы захотите поместить свое имя пользователя и пароль, защищенные в CircleCI, или, возможно, в файл .env.
5. Наконец, выполните следующие команды в корне вашего проекта, чтобы зафиксировать
и отправить
код (flask-circleci/config.yml) в ваш репозиторий GitHub.
Активация CircleCI CI/CD Pipeline
Вы только что создали свой конвейер CircleCI CI/CD, но в данный момент он просто простаивает и ничего не делает. Вам нужно активировать свой конвейер, настроив проект в вашей учетной записи CircleCI.
1. Войдите в свою учетную запись CircleCI с помощью вашей учетной записи GitHub в вашем веб-браузере.
2. Затем нажмите вкладку Проекты в левой панели и нажмите кнопку Настроить проект справа от вашего проекта, чтобы активировать конвейер CircleCI в проекте.
Поскольку вы вошли в CircleCI с помощью вашей учетной записи GitHub, ваши проекты синхронизируются с CircleCI, как на изображении ниже.

3. Вернитесь на вкладку Панель управления и вы увидите статус Успешно. Статус Успешно указывает на то, что все прошло ожидаемо, и образ был отправлен в ваш репозиторий Docker Hub.
Щелкните сборку, чтобы увидеть все шаги, выполненные в конвейере.

Ниже вы можете увидеть список шагов, которые CircleCI выполнил для запуска конвейера.

4. Наконец, переключитесь обратно в ваш репозиторий Docker Hub, и вы увидите изображение, которое вы загрузили в Docker Hub через конвейер CircleCI.

Отправка изменений в GitHub для запуска конвейера CircleCI
До этого момента у вас уже есть работающий конвейер CircleCI. Но возможно, вы внесли изменения в свой проект. Если это так, как вы узнаете, что конвейер все еще работает? Вы можете запустить CircleCI, отправив изменения в свой репозиторий GitHub, и посмотреть, пройдет ли тест.
1. На вашем локальном компьютере замените код в файле test_main.py на следующий код. Этот код специально обеспечивает сбой теста, потому что код состояния изменился с 200
на 400
.
2. Затем замените steps
в файле config.yml, который создает образ Docker и отправляет его в Docker Hub, следующим кодом.
В этом коде вы просто изменяете версию, чтобы убедиться, что в ваш репозиторий GitHub отправляются только новые изменения.
3. Выполните следующие команды в корневом каталоге вашего проекта, чтобы commit
и push
кода в ваш репозиторий GitHub.
4. Теперь перейдите на вашу панель управления CircleCI, и вы увидите, что сборка Failed, как показано ниже.
Щелкните на сборку, чтобы увидеть шаги, выполненные для отправки изменений, и подтвердите, что вызвало сбой сборки.


В конечном итоге перейдите в свой репозиторий Docker Hub и убедитесь, что изменения не были отправлены.
Как видно на изображении ниже, v2 не был загружен, потому что тест не прошел.

Заключение
В течение этого руководства вы узнали, как писать тесты и создавать Docker-образ для вашего приложения на Python. Вы создали конвейер CI/CD с помощью CircleCI, который выполняет тест для вашего приложения и загружает ваш Docker-образ на Docker Hub.
На данный момент у вас уже есть базовые знания разработки конвейера CI/CD с помощью CircleCI. Теперь, как вы намереваетесь использовать эти новые знания? Возможно, создать конвейер CI/CD, который разворачивает ваш Docker-образ на Heroku?
Source:
https://adamtheautomator.com/circleci-docker-images/