DevOps и Continuous Integration

Что такое DevOps

DevOps (DEVelopment OPerations) — это методика увеличения скорости, качества и безопасности разработки. Понятие DevOps определяет и техническую, и организационную стороны процесса разработки, однако в этом курсе речь пойдёт именно о технических методах.
При работе над проектом львиная доля времени уходит не на написание кода, а на «обслуживающие процессы»: отладка взаимодействия разработчиков, тестирование кода, настройки рабочих и боевых серверов — все эти работы отъедают время и требуют постоянного внимания. Автоматизация таких процессов заметно ускоряет и упрощает работу.
Практически все инструменты автоматизации вам уже известны.
  • Как синхронизировать код нескольких команд разработчиков? Для этого есть Git.
  • Как запустить проект так, чтобы он работал так же, как на сервере? Для этого есть Docker.
  • Как протестировать код? Написать автоматические тесты.
В этой картине не хватает лишь системы, которая интегрировала бы все инструменты в единый механизм.

Continuous Integration

Над большим проектом обычно работает множество команд: бэкендеры, фронтендеры, специалисты по машинному обучению. Каждая команда пишет и тестирует свою часть кода. Разделение труда ускоряет процесс, но в этой схеме не учтено тестирование проекта в целом и в ходе работы проект не проверяется на боевом сервере.
Идея Continuous Integration (англ. «непрерывная интеграция», сокращенно CI) состоит в том, чтобы после внесения изменений в любую часть кода проводить тестирование не только того модуля, который был изменён, но и всего проекта. Если команда внесла в код десять изменений за день — значит, за день будет проведено десять сборок и тестов проекта.
Сборка и тестирование могут занимать заметное время, и, на первый взгляд, идея CI покажется расточительной. Однако в итоге Continuous Integration сэкономит время, предупредив и заранее выявив проблемы, которые иначе проявились бы только при финальной сборке или тестировании. Чем раньше обнаруживается проблема — тем проще её решить.
При таком «плотном графике» без автоматизации не обойтись. Последовательность событий может выглядеть так:
  1. Разработчик вносит изменения в код и делает push в систему контроля версий (в Git, например).
  2. Проект автоматически разворачивается на тестовом сервере (обычно для этого используются докер-контейнеры).
  3. Запускаются тесты: это могут быть юнит-тесты или проверка кода на соответствие стандартам стиля (например, PEP8).
  4. По результатам тестирования всем заинтересованным сотрудникам отправляются отчёты — на почту, в Slack, в Telegram — куда угодно.
  5. Если тесты прошли успешно, проект автоматически разворачивается на боевом сервере.
Автоматизировать процессы при Continuous Integration можно своими силами, настроив тестовый сервер и установив и настроив на нём необходимые программы. А можно воспользоваться облачными решениями: в этом курсе вы поработаете с облачным сервисом GitHub Actions.
GitHub Actions тесно интегрирован с GitHub, и это упрощает его настройку.

GitHub Actions

GitHub Actions — это облачный сервис, инструмент для автоматизации процессов тестирования и деплоя ваших проектов. Он служит тестовой площадкой, на которой можно запускать и тестировать проекты в изолированном окружении.
Работа с GitHub Actions в общем случае строится так: из вашего репозитория проект загружается на сервер GitHub Actions, там код тестируется по предварительно заданным условиям, и если тестирование прошло успешно — код может быть задеплоен на боевой сервер (например, на ваш сервер Яндекс.Облако).
Тестирование может быть любым: от простой проверки кода на соответствие PEP8 до досконального тестирования приложения, развёрнутого в docker-контейнерах.
Чтобы GitHub Actions начал выполнять рутинную работу за вас, нужно описать последовательность команд, которые должны выполняться после того, как случится какое-то событие.
Например, после того, как кто-то из разработчиков запушит код в Git-репозиторий, можно запустить цепочку команд собрать проект → запустить тесты → задеплоить проект на сервер.
Такие последовательности команд называются workflow.
Сервис GitHub Actions бесплатен для публичных репозиториев и для небольших проектов в приватных репозиториях: image