- PVSM.RU - https://www.pvsm.ru -

Как настроить Continuous Deployment для своего проекта: личный опыт

Как настроить Continuous Deployment для своего проекта: личный опыт - 1

Перевели для вас статью Юлиуса Минмо [1] о настройке непрерывной интеграции (Continuous Deployment) для своего проекта. Автоматизация позволяет сэкономить кучу времени и сил. Статья будет полезна, в первую очередь, начинающим программистам.

Непрерывная интеграция — отличная штука. Один раз коммитим проект и далее все происходит в автоматическом режиме, наблюдение за этим процессом просто гипнотизирует. В этой статье я покажу, как можно все настроить для домашнего проекта.

Напоминаем: для всех читателей «Хабра» — скидка 10 000 рублей при записи на любой курс Skillbox по промокоду «Хабр».

Skillbox рекомендует: Онлайн-курс «Профессия Frontend-разработчик» [2].

Итак, для начала давайте посмотрим на схему, где объясняется разница между Continuous Delivery и Continuous Deployment.

Как настроить Continuous Deployment для своего проекта: личный опыт - 2

В случае с домашним проектом выбираем Continuous Deployment, поскольку никто, кроме вас, с ним (проектом) не работает и никто от него не зависит. Ну а поскольку в большинстве случаев хочется, чтобы изменения были немедленно развернуты, то выбор очевиден. Если же вам позже захочется изменить процесс, вы всегда сможете это сделать.

Вы изучите следующее:

  • Как сделать Dockerfile.
  • Как выгрузить проект на GitHub.
  • Как автоматически построить образ docker на Docker Hub.
  • Как автоматически загрузить и запустить образ с Watchtower.

Что требуется:

  • Базовое понимание того, что представляют собой Docker и Dockerfile.
  • Установленный Git.
  • Учетная запись на <a href='https://hub.docker.com/">Docker Hub

Сервер (физический или виртуальный) с запущенным Docker.

Вот мои репозиторий GitHub [3] и Docker Hub [4], с которыми я работаю.

Почему я использую Docker?

Он дает возможность использовать одно и то же окружение для разных процессов, что исключает появление гейзенбагов [5] и проблемы «это работает только на моей машине». Контейнеры изолированы, что хорошо с точки зрения кибербезопасности. Есть и больше преимуществ, но, на мой взгляд, эти два являются главными.

Настройка 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” не нужно трогать.

Как настроить Continuous Deployment для своего проекта: личный опыт - 3

Теперь копируем URL.

Как настроить Continuous Deployment для своего проекта: личный опыт - 4

Открываем cmd/shell корневой директории проекта. Теперь необходимо инициализировать репозиторий, добавить файлы, сконфигурировать remote-режим, закоммитить файлы и отправить проект на GitHub.

git init
git add *
git remote add origin github.com [6]/.git
git commit -a -m «Make Dockerfile ready for CD»
git push -u origin master

Если все ОК, GitHub-репозиторий будет выглядеть вот так:

Как настроить Continuous Deployment для своего проекта: личный опыт - 5

Мы на полпути к успеху!

Теперь нужно подключить GitHub к Docker Hub. Для этого нужно отправиться в настройки учетной записи.

Как настроить Continuous Deployment для своего проекта: личный опыт - 6

Скролим вниз и подключаемся.

Как настроить Continuous Deployment для своего проекта: личный опыт - 7

Теперь создаем репозиторий в Docker Hub.

Как настроить Continuous Deployment для своего проекта: личный опыт - 8

Называем свой репо и кликаем по иконке GitHub или Bitbucket. Потом выбираем организацию (обычно это ваш ник) и название проекта. При желании настройки можно изменить.

Как настроить Continuous Deployment для своего проекта: личный опыт - 9

Ну а теперь последний шаг — здесь нам необходим 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. Вы можете прочитать об этом здесь [7], но суть в том, что вы добавляете в свой репозиторий еще один файл, в котором есть инструкции для внешнего сервера для выполнения модульных тестов или любые другие инструкции.

Skillbox рекомендует:

Автор: skillbox

Источник [11]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/programmirovanie/308259

Ссылки в тексте:

[1] статью Юлиуса Минмо: https://medium.freecodecamp.org/how-to-set-up-continuous-deployment-in-your-home-project-the-easy-way-41b84a467eed

[2] «Профессия Frontend-разработчик»: https://skillbox.ru/webdev/?utm_source=skillbox.media&utm_medium=habr.com&utm_campaign=WEBDEV&utm_content=articles&utm_term=inhouseproject

[3] репозиторий GitHub: https://github.com/juligreen/easy_CD_tutorial

[4] Docker Hub: https://hub.docker.com/r/juligreen/easy_cd_tutorial

[5] гейзенбагов: https://ru.wikipedia.org/wiki/%D0%93%D0%B5%D0%B9%D0%B7%D0%B5%D0%BD%D0%B1%D0%B0%D0%B3

[6] github.com: https://github.com/

[7] об этом здесь: https://docs.travis-ci.com/user/tutorial/

[8] «Python-разработчик с нуля»: https://skillbox.ru/python/?utm_source=skillbox.media&utm_medium=habr.com&utm_campaign=PTNDEV&utm_content=articles&utm_term=inhouseproject

[9] «PHP-разработчик с нуля до PRO»: https://skillbox.ru/php/?utm_source=skillbox.media&utm_medium=habr.com&utm_campaign=PHPDEV&utm_content=articles&utm_term=inhouseproject

[10] «Профессия Java-разработчик»: https://skillbox.ru/java/?utm_source=skillbox.media&utm_medium=habr.com&utm_campaign=JAVDEV&utm_content=articles&utm_term=inhouseproject

[11] Источник: https://habr.com/ru/post/439632/?utm_campaign=439632