На рынке доступно множество инструментов непрерывной интеграции и непрерывного развёртывания. Эти инструменты играют ведущую роль в координации и автоматизации работы на различных этапах CI/CD-пайплайна.
Мы пообщались с Александром Довнаром, Lead DevOps в Naviteq, и узнали, как безопасность проекта связана с выбором CI/CD-инструмента. Подробно остановились на том, что такое GitLab CI, кому он подходит и почему его стоит использовать.
Внедрение CI/CD
CI/CD — DevOps-практика, которая подразумевает непрерывную интеграцию и доставку. Одна из причин, почему бизнес решает внедрить CI/CD, состоит в возможности сокращения Lead Time. Это ключевая метрика, определяющая время от возникновения идеи какого-то функционала до конечной поставки клиенту, когда он уже может этим функционалом пользоваться.
CI/CD помогает сократить Lead Time, увеличить стабильность и скорость релизов, добиться прозрачности на проекте — мы видим всё, что происходит. В конечном счёте это ведёт к выравниванию коммуникаций в команде.
Однако внедрить и правильно реализовать CI/CD дорого и с точки зрения инфраструктуры, и с точки зрения времени, которое нужно потратить. Если у вас на проекте нет СI/CD, пытаться сразу построить автоматизированное нагрузочное тестирование на мультиплатформенной системе в нескольких дата-центах пока преждевременно. Реализация должна двигаться от простого к сложному. Начните с CI: соберите и протестируйте проект, попробуйте деплоить по кнопке. Затем можно расширить тесты и окружения, перейти к непрерывному развёртыванию и т.д.
Важно понимать, что внедрение CI/CD не даёт видимых результатов мгновенно. Но в долгосрочной перспективе оно позволяет бизнесу быстрее расти и развиваться за счёт автоматизации процессов.
При этом просто внедрить CI/CD мало, его ещё нужно поддерживать. Для этого либо нанимают отдельных инженеров, которые будут расширять и сопровождать CI/CD-процесс, либо делают такие задачи общей ответственностью. Во втором случае дополнительные обязанности накладываются на всю команду, и действует принцип «заметил, что что-то работает не так, — поправь». Если вдруг CI/CD-пайплайн доставки в продакшн перестаёт работать, все бросают свои дела и идут решать эту проблему.
Резюмируем: внедрение CI/CD — это долго, дорого и сложно, но в долгосрочной перспективе помогает экономить ресурсы, время и деньги. Если наши процессы автоматизированы, мы можем легко и бесшовно масштабироваться. Если же мы изначально игнорируем автоматизацию, по мере развития проекта у нас появляется всё больше проблем с разных сторон, и работать дальше становится сложно.
Безопасность и выбор инструмента CI/CD
Безопасность CI/CD во многом зависит от того, какие инструменты мы используем. Есть немало историй, когда код, который должен быть приватным, частично утекал. Например, в облачной инфраструктуре GitHub злоумышленникам удалось организовать майнинг криптовалюты, используя для запуска кода инструмент GitHub Actions.
При выборе инструментов CI/CD и проектировании того, как эти инструменты будут взаимодействовать между собой, важно учитывать все существующие в компании политики безопасности. Скажем, если у вас есть правило, что какая-то инфраструктурная часть должна быть доступна только изнутри, надо иметь это в виду. Подобные правила влияют на выбор CI/CD-инструментов.
Также для безопасности стоит позаботиться о том, чтобы доступ в CI- и CD-процессы был ограничен и была возможность его аудита. Грубо говоря, нужно сделать так, чтобы влиять на новые релизы в продакшене могло только ограниченное количество людей. Важно позаботиться о дизайне CI/CD-системе, потому что, если мы не сделаем этого, завладев нашим CI/CD-процессом, злоумышленники могут получить доступ к исходному коду и к окружениям, где масштаб атаки окажется крайне велик и сможет нанести денежные и репутационные уроны.
Инструменты CI/CD
Основа инструментария CI/CD — сервис или приложение, на базе которого вы реализуете CI/CD. Это то, что позволяет вам запускать Jenkins, Gitlab CI, GitHub Actions и дальше по списку.
Основная задача CI/CD-инструмента — координировать деятельность множества систем: системы контроля версий, инструментов сборки, фреймворков автоматизированного тестирования, менеджеров зависимостей, баг-трекеров и платформ контейнеризация.
В каждом инструменте есть спецификация того, что и как он умеет делать. Мы описываем это в определённом формате и дальше как кубики добавляем в пайплайн другие инструменты, которые помогут закрыть наши задачи. Например, мы можем добавить SonarQube для проверки покрытия пайплайна тестами, Docker — для сборки Docker-образа и т.д.
Эти разные большие и мелкие инструменты — не CI/CD в чистом виде. Тот же Docker — масштабная платформа, но без неё мы не сможем собрать контейнер, поэтому она часть CI/CD и инструмент CI/CD для реализации сборки конкретного приложения.
Почему стоит выбрать GitLab CI в качестве инструмента CI/CD
GitLab CI начал одним из первых двигаться в направлении All-in-One. Это не просто хранилище исходного кода, а полноценная DevOps-платформа, где вы можете вести проекты с задачами и досками, отслеживать состояние окружений, хранить всевозможные типы артефактов, использовать интегрированное контейнер-хранилище, подключать Terraform-модуль и многое другое.
Благодаря своей стабильности, относительной бесплатности и мощной поддержки комьюнити GitLab CI стал одним из основных игроков на рынке. Он претерпел много изменений и улучшений и прямо сейчас позволяет:
управлять конфигурациями с помощью файла в формате YAML;
легко параллелить запуски и запускаться в абсолютно разных средах;
собирать и выполнять команды на любых ОС;
запускать задачи в Docker-контейнерезированных окружениях;
интегрироваться с Kubernetes-кластерами.
GitLab CI выбирают и маленькие стартапы, и крупные энтерпрайз-компании. Он предоставляет и хранилище кода, и гибкую CI-систему с большим количеством функций, которые сильно облегчают реализацию конечной картинки CI/CD-пайплайна. А ещё его можно установить не только в облаке, но и локально.
Для тех, кто хочет разобраться в GitLab CI
20 июня в Слёрм стартует усовершенствованный курс «CI/CD на примере Gitlab CI». Вы научитесь применять принципы CI/CD и работать с GitLab CI: разберёте лучшие практики построения пайплайна, особенности шаблонизации и работы с переменными.
Посмотреть программу и записаться: https://slurm.club/3xoZLo4