GitLab CI/CD за один день: от основ до автоматизированного пайплайна

Подробный анализ и практическое руководство по настройке автоматизированного пайплайна CI/CD в GitLab за один день: от создания базового .gitlab-ci.yml до работы с артефактами, переменными и деплоем.
Непрерывная интеграция и доставка (CI/CD) стали неотъемлемой частью современной DevOps-культуры, а GitLab предлагает мощное встроенное решение, которое позволяет автоматизировать весь путь кода от коммита до продакшена. Освоить основы GitLab CI и создать свой первый рабочий пайплайн можно всего за один день. Эта статья проведет вас через ключевые концепции и практические шаги, чтобы к вечеру у вас была работающая автоматизация.

В основе GitLab CI лежит файл `.gitlab-ci.yml`, который вы размещаете в корне репозитория. Этот файл на языке YAML описывает весь процесс сборки, тестирования и развертывания — пайплайн. GitLab автоматически обнаруживает этот файл и начинает выполнение заданных jobs при каждом пуше в репозиторий. Первым делом создайте новый проект в GitLab или используйте существующий. В корневой директории создайте файл с именем `.gitlab-ci.yml`.

Давайте разберем базовую структуру этого файла. Пайплайн состоит из стадий (stages), которые выполняются по порядку. Типичные стадии: `build`, `test`, `deploy`. Внутри каждой стадии определяются задания (jobs). Каждое задание — это независимый набор инструкций, которые выполняются в среде runner (исполнитель). Runner — это агент, который берет задания из очереди GitLab и выполняет их. Это может быть shared runner, предоставляемый GitLab.com, или ваш собственный, установленный на вашем сервере.

Начнем с простейшего пайплайна для Node.js приложения. Откройте `.gitlab-ci.yml` и добавьте:

stages:
 - test

unit-tests:
 stage: test
 image: node:16-alpine
 before_script:
 - npm install
 script:
 - npm test

Разберем каждую часть. Мы определили одну стадию `test`. Затем задание с именем `unit-tests`, которое принадлежит этой стадии. Ключ `image` указывает Docker-образ, который будет использован для создания среды выполнения (в данном случае, легковесный образ Node.js). `before_script` — команды, выполняемые перед основным скриптом (установка зависимостей). `script` — основные команды, которые выполняют работу (запуск тестов). Запушьте этот файл в репозиторий. Перейдите в раздел CI/CD > Pipelines вашего проекта в GitLab. Вы увидите, что пайплайн запустился, а задание `unit-tests` либо прошло, либо упало. Поздравляем, вы автоматизировали запуск тестов!

Теперь расширим пайплайн. Добавим стадию сборки и артефакты. Артефакты — это файлы, которые создаются в ходе задания и могут быть переданы на следующие стадии. Добавим в файл:

stages:
 - build
 - test

build-job:
 stage: build
 image: node:16-alpine
 script:
 - npm install
 - npm run build
 artifacts:
 paths:
 - dist/
 expire_in: 1 week

unit-tests:
 stage: test
 image: node:16-alpine
 dependencies:
 - build-job
 script:
 - npm test

Обратите внимание: мы добавили стадию `build` и задание `build-job`, которое собирает проект. Ключ `artifacts` указывает, что папка `dist/` должна быть сохранена как артефакт. В задании `unit-tests` появился ключ `dependencies`, который указывает, что для выполнения тестов нужны артефакты от `build-job`. GitLab автоматически загрузит папку `dist/` в среду выполнения тестов.

Одна из мощнейших возможностей — использование переменных (variables) и секретов. Никогда не храните пароли или токены прямо в YAML-файле. В настройках проекта (Settings > CI/CD > Variables) вы можете добавить переменные, например, `DEPLOY_TOKEN`. Они будут доступны в пайплайне как environment variables. Например, для деплоя на сервер можно добавить стадию:

deploy-to-staging:
 stage: deploy
 image: alpine
 script:
 - apk add --no-cache rsync openssh
 - rsync -avz -e "ssh -o StrictHostKeyChecking=no" ./dist/ user@staging-server:/var/www/app/
 only:
 - main

Ключевое слово `only` указывает, что это задание должно выполняться только для коммитов в ветку `main`. Для защиты используйте переменную `$SSH_PRIVATE_KEY`, сохраненную в настройках проекта, для аутентификации.

Кэширование — важный аспект для скорости. Установка зависимостей (npm install) может занимать много времени. Вы можете закэшировать папку `node_modules`:

cache:
 key: ${CI_COMMIT_REF_SLUG}
 paths:
 - node_modules/

Этот блок, размещенный на глобальном уровне, указывает GitLab CI кэшировать указанные пути. Ключ кэша использует переменную окружения, чтобы для каждой ветки был свой кэш.

В течение дня поэкспериментируйте с другими возможностями: условное выполнение заданий (`rules` или `only/except`), ручные задания (`when: manual`), которые требуют клика для запуска, и матричное выполнение (`parallel: matrix`) для тестирования на разных версиях языка. Изучите встроенные шаблоны (Templates), которые GitLab предлагает для различных языков и фреймворков.

К концу дня вы должны иметь четкое понимание структуры `.gitlab-ci.yml`, принципов работы runner'ов, управления артефактами, переменными и кэшем. Вы создадите пайплайн, который автоматически собирает, тестирует и условно деплоит ваше приложение. GitLab CI — это гибкий и мощный инструмент, и его грамотная настройка становится краеугольным камнем эффективной и надежной DevOps-практики в любой команде.
38 1

Комментарии (6)

avatar
s7rpmwtz96x 01.04.2026
Отличный план на день! Как раз искал структурированный гайд по GitLab CI/CD. Жду продолжения про сложные пайплайны.
avatar
0nf5q5 01.04.2026
Сравнение с GitHub Actions было бы полезно. GitLab CI мощный, но многим знаком именно GitHub.
avatar
b95ngbo 02.04.2026
Автор, добавьте про кеширование зависимостей и артефакты — это критично для скорости выполнения этапов.
avatar
icgw08w 03.04.2026
Статья хороша для старта, но за день освоить только основы реально. Для продакшн-пайплайнов нужно куда больше времени.
avatar
1lbx8zhq6ajx 03.04.2026
Наконец-то понял структуру .gitlab-ci.yml! Раньше боялся подступаться к CI/CD, а тут всё разложили по полочкам.
avatar
abqb5hin2gon 03.04.2026
Уже пробовал по аналогичной инструкции — через 4 часа пайплайн упал на тестах. Главное не расстраиваться, если не выйдет с первого раза.
Вы просмотрели все комментарии