Учебник GitLab CI/CD для начинающих
Этот курс — глубокое погружение в GitLab CI/CD: встроенную в GitLab систему непрерывной интеграции и доставки. Мы разберём всё от первой джобы в .gitlab-ci.yml до полноценного пайплайна веб-приложения с тестами, сборкой Docker-образа, деплоем в Kubernetes и сканами безопасности. По ходу курса мы постоянно проводим параллели с GitHub Actions и Jenkins, чтобы вы понимали не только синтаксис, но и идеологию платформы. Курс для тех, кто уже знаком с Git и базовой идеей CI/CD и хочет уверенно строить и отлаживать пайплайны на GitLab.
Курс «GitLab CI/CD» состоит из 9 разделов и 27 уроков: Знакомство с GitLab CI/CD, GitLab Runner и жизненный цикл пайплайна, Анатомия джобы, Артефакты, кеш и секреты, Управление запуском джоб, Docker, тесты и качество в пайплайне, Деплой и окружения, Kubernetes, переиспользование и безопасность и Эксплуатация: отладка, оптимизация и реальный пайплайн. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.
Программа курса
1 Знакомство с GitLab CI/CD
- CI/CD за пять минут и место GitLab в нём
Короткое напоминание о непрерывной интеграции и доставке и о том, как GitLab закрывает весь конвейер одной платформой.
- Экосистема GitLab: репозиторий, MR, реестр, issues
Обзор компонентов GitLab, с которыми взаимодействует CI/CD: Merge Requests, Container Registry, environments и issue-трекер.
- Первый .gitlab-ci.yml: стадии и джобы
Структура .gitlab-ci.yml: ключевые слова stages и jobs, минимальный рабочий пайплайн и порядок выполнения.
- CI/CD за пять минут и место GitLab в нём
2 GitLab Runner и жизненный цикл пайплайна
- GitLab Runner: shared, specific и executor'ы
Виды раннеров GitLab, executor'ы docker/shell/kubernetes и как раннер забирает и выполняет джобы.
- Регистрация раннера на практике
Как установить и зарегистрировать GitLab Runner с docker-executor, теги раннеров и привязка джоб к раннеру.
- Жизненный цикл пайплайна и триггеры
Триггеры пайплайна в GitLab: push, merge request, schedule, tag, manual, и из чего складывается статус пайплайна.
- GitLab Runner: shared, specific и executor'ы
3 Анатомия джобы
- script, before_script, after_script и image
Ключевые поля джобы: script, before_script, after_script, image и переменные на уровне джобы.
- Стадии, порядок и DAG-пайплайны с needs
Управление порядком джоб: последовательные стадии против DAG-пайплайнов через needs для ускорения и зависимостей.
- Переменные на уровне джобы и предопределённые переменные
Объявление переменных в .gitlab-ci.yml, область видимости job/global и предопределённые CI-переменные GitLab.
- script, before_script, after_script и image
4 Артефакты, кеш и секреты
- Артефакты: передача результатов между джобами
Ключ artifacts в GitLab CI: что сохранять, передача между стадиями, expire_in и отчёты.
- Кеш против артефактов: ускоряем сборки
Кеширование зависимостей в GitLab CI: cache, ключи кеша, отличие от артефактов и ускорение пайплайна.
- CI/CD-переменные и секреты: masked и protected
Секреты в GitLab CI: переменные проекта, masked и protected, скоуп environments и безопасная работа с токенами.
- Артефакты: передача результатов между джобами
5 Управление запуском джоб
- rules, only/except и условный запуск
Современный механизм rules в GitLab CI против устаревших only/except: условный запуск джоб по ветке и источнику.
- workflow и ручные джобы (when: manual)
Управление созданием пайплайна через workflow:rules и ручные джобы с when: manual, allow_failure и гейтами деплоя.
- Матричные джобы: parallel:matrix
Параллельные матричные джобы в GitLab CI через parallel:matrix: тестирование на нескольких версиях и платформах.
- rules, only/except и условный запуск
6 Docker, тесты и качество в пайплайне
- Docker-in-Docker и kaniko: сборка образов
Сборка Docker-образов в GitLab CI: docker-in-docker с сервисом dind, альтернатива kaniko и нюансы privileged.
- Тестирование, покрытие и отчёты
Юнит-тесты в GitLab CI, отчёты JUnit, измерение покрытия кода и отображение результатов в Merge Request.
- Code Quality и статический анализ
Встроенный Code Quality в GitLab CI: отчёт о качестве кода в Merge Request, линтеры и интеграция шаблонов.
- Docker-in-Docker и kaniko: сборка образов
7 Деплой и окружения
- Environments, staging и production
Окружения деплоя в GitLab CI: ключ environment, история деплоев, откат и ручные гейты для production.
- Review apps: окружение на каждый MR
Динамические окружения GitLab CI: review apps на каждый Merge Request, динамический URL и автоматическая остановка.
- Стратегии деплоя: rolling, canary, blue-green
Обзор стратегий деплоя в CI/CD: rolling update, canary и blue-green, их компромиссы и место в пайплайне GitLab.
- Environments, staging и production
8 Kubernetes, переиспользование и безопасность
- Деплой в Kubernetes и Auto DevOps
Деплой в Kubernetes из GitLab CI через kubectl и helm, подключение кластера и обзор Auto DevOps.
- include, extends и !reference: DRY-пайплайны
Переиспользование конфигурации GitLab CI: include шаблонов, extends для наследования джоб и !reference для частей.
- Безопасность в пайплайне: SAST, DAST, dependency scanning
Встроенные сканеры безопасности GitLab CI: SAST, DAST, dependency и container scanning, отчёты в Merge Request.
- Деплой в Kubernetes и Auto DevOps
9 Эксплуатация: отладка, оптимизация и реальный пайплайн
- Отладка пайплайна: типичные ошибки
Отладка GitLab CI: runner offline, ошибки прав, проблемы кеша, синтаксис YAML и инструменты диагностики.
- Оптимизация скорости и сравнение с альтернативами
Ускорение пайплайнов GitLab CI: параллелизм, needs, кеш, fail fast, и сравнение с GitHub Actions и Jenkins.
- Реальный пайплайн: lint → test → build → deploy
Полный практический пайплайн GitLab CI для веб-приложения: lint, тесты, сборка Docker-образа и деплой staging/production.
- Отладка пайплайна: типичные ошибки