Перевели для вас статью Юлиуса Минмо о настройке непрерывной интеграции (Continuous Deployment) для своего проекта. Автоматизация позволяет сэкономить кучу времени и сил. Статья будет полезна, в первую очередь, начинающим программистам.
Непрерывная интеграция — отличная штука. Один раз коммитим проект и далее все происходит в автоматическом режиме, наблюдение за этим процессом просто гипнотизирует. В этой статье я покажу, как можно все настроить для домашнего проекта.
Напоминаем: для всех читателей «Хабра» — скидка 10 000 рублей при записи на любой курс Skillbox по промокоду «Хабр».
Skillbox рекомендует: Онлайн-курс «Профессия Frontend-разработчик».
Итак, для начала давайте посмотрим на схему, где объясняется разница между Continuous Delivery и Continuous Deployment.
В случае с домашним проектом выбираем Continuous Deployment, поскольку никто, кроме вас, с ним (проектом) не работает и никто от него не зависит. Ну а поскольку в большинстве случаев хочется, чтобы изменения были немедленно развернуты, то выбор очевиден. Если же вам позже захочется изменить процесс, вы всегда сможете это сделать.
Вы изучите следующее:
- Как сделать Dockerfile.
- Как выгрузить проект на GitHub.
- Как автоматически построить образ docker на Docker Hub.
- Как автоматически загрузить и запустить образ с Watchtower.
Что требуется:
- Базовое понимание того, что представляют собой Docker и Dockerfile.
- Установленный Git.
- Учетная запись на <a href='https://hub.docker.com/">Docker Hub
Сервер (физический или виртуальный) с запущенным Docker.
Вот мои репозиторий GitHub и Docker Hub, с которыми я работаю.
Почему я использую Docker?
Он дает возможность использовать одно и то же окружение для разных процессов, что исключает появление гейзенбагов и проблемы «это работает только на моей машине». Контейнеры изолированы, что хорошо с точки зрения кибербезопасности. Есть и больше преимуществ, но, на мой взгляд, эти два являются главными.
Настройка Dockerfile
Сначала нам нужен Dockerfile для проекта. Этот файл всегда называется именно так и не имеет расширения. Он всегда находится в главной директории проекта.
Он начинается с оператора FROM, который сообщает Docker, с какого базового образа мы начинаем. Вы можете провести аналогию с живописью. Можем представить себе этот образ как готовый холст с нарисованным фоном и отсутствующим главным элементом композиции (вашей программой).
Далее копируем файлы проекта в контейнер при помощи команды COPY…
Она позволяет забрать файлы из начального расположения в текущее — конечно, внутри контейнера.
Далее необходимо установить зависимости, для этого я использую Python PIP. Главное, что нужно запомнить, — это запуск команд в контейнере с RUN.
From python:3.7
COPY..
RUN pip install -r requirements.txt
Все просто, правда? Теперь можно запускать программу в контейнере.
CMD [«python», "./my_script.py"]
Теперь все, вы закончили Dockerfile и можете вручную создать образ и контейнер. Сейчас просто пропустим этот момент.
Теперь давайте создадим репозиторий в GitHub, но помните, что строку “Initialize this repository with a README” не нужно трогать.
Теперь копируем URL.
Открываем cmd/shell корневой директории проекта. Теперь необходимо инициализировать репозиторий, добавить файлы, сконфигурировать remote-режим, закоммитить файлы и отправить проект на GitHub.
git init
git add *
git remote add origin github.com/.git
git commit -a -m «Make Dockerfile ready for CD»
git push -u origin master
Если все ОК, GitHub-репозиторий будет выглядеть вот так:
Мы на полпути к успеху!
Теперь нужно подключить GitHub к Docker Hub. Для этого нужно отправиться в настройки учетной записи.
Скролим вниз и подключаемся.
Теперь создаем репозиторий в Docker Hub.
Называем свой репо и кликаем по иконке GitHub или Bitbucket. Потом выбираем организацию (обычно это ваш ник) и название проекта. При желании настройки можно изменить.
Ну а теперь последний шаг — здесь нам необходим Watchtower на целевой машине. Это программа, которая позволяет автоматизировать процесс. Если появляется апдейт, то Watchtower убирает оригинальный контейнер и создает контейнер из нового образа с такими же настройками.
Хорошая новость в том, что можно установить Watchtower с Docker, для этого необходимо ввести в терминал такую команду:
docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock v2tec/watchtower
И теперь запускаем контейнер для своего проекта!
docker run -d --name <my-project> /<my-project>
-d позволяет программе работать в фоне, так что она не закроется, если вы закроете терминал.
Завершая сказанное, если вы отправите коммит к репозиторию GitHub, Docker Hub автоматически создаст образ Docker. Затем с ним уже будет взаимодействовать Watchtower.
Что касается тестов, то вы сможете использовать Travis CI. Вы можете прочитать об этом здесь, но суть в том, что вы добавляете в свой репозиторий еще один файл, в котором есть инструкции для внешнего сервера для выполнения модульных тестов или любые другие инструкции.
Skillbox рекомендует:
- Онлайн-курс «Python-разработчик с нуля».
- Практический годовой курс «PHP-разработчик с нуля до PRO».
- Образовательный онлайн-курс «Профессия Java-разработчик».
Автор: skillbox