В современном IT “релизить редко, но метко” — это путь к стагнации. Бизнес требует обновлений каждый день, а пользователи не прощают простоев. Ответ на этот вызов — CI/CD (Continuous Integration / Continuous Delivery).
В этой статье разберем, как построить надежный конвейер доставки кода, используя GitLab CI и Docker.
Зачем вам CI/CD?
Ручной деплой — это всегда риск. “Забыл скопировать конфиг”, “не та версия библиотеки”, “на проде упало, а локально работало”. Автоматизация решает эти проблемы.
Что вы получите:
- Скорость: Время от коммита до продакшена сокращается с часов до минут.
- Качество: Автотесты запускаются на каждый чих.
- Стабильность: Окружения (dev, stage, prod) идентичны благодаря Docker.
Этап 1: Подготовка окружения (Docker)
Основа современного DevOps — контейнеризация. Ваше приложение должно быть упаковано в Docker-образ.
Создайте Dockerfile в корне проекта:
# Этап сборки
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
# Этап запуска
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
Важно: Используйте multistage builds (как в примере выше), чтобы итоговый образ весил мегабайты, а не гигабайты.
Этап 2: Настройка GitLab Runner
GitLab CI выполняет задачи на раннерах — специальных агентах.
- Установите
gitlab-runnerна ваш сервер. - Зарегистрируйте его в GitLab (Settings -> CI/CD -> Runners).
- Для сборки Docker-образов внутри Docker используйте режим Docker-in-Docker (dind).
Этап 3: Пишем .gitlab-ci.yml
Это “мозг” вашего пайплайна. Он описывает, что и когда делать.
stages:
- build
- test
- deploy
variables:
DOCKER_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA
build_job:
stage: build
image: docker:24
services:
- docker:24-dind
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker build -t $DOCKER_IMAGE .
- docker push $DOCKER_IMAGE
test_job:
stage: test
script:
- echo "Running tests..."
- npm run test
deploy_prod:
stage: deploy
when: manual
script:
- docker pull $DOCKER_IMAGE
- docker stop my-app || true
- docker rm my-app || true
- docker run -d --name my-app -p 80:80 $DOCKER_IMAGE
Разбор пайплайна:
- build: Собирает Docker-образ и пушит его во внутренний реестр GitLab (Container Registry).
- test: Запускает тесты. Если они упадут, деплой не начнется.
- deploy: Разворачивает приложение. Обратите внимание на
when: manual— на продакшен деплоим только по кнопке!
Чек-лист успешного внедрения DevOps
✅ Все сервисы упакованы в Docker
✅ Настроен GitLab Runner с поддержкой Docker
✅ Пайплайн включает этапы Build -> Test -> Deploy
✅ Секреты (пароли, ключи) вынесены в CI/CD Variables
✅ Настроен мониторинг (Prometheus/Grafana) для отслеживания состояния
Хотите ускорить разработку?
Внедрение DevOps — сложный процесс, требующий изменения культуры команды. Инженеры Core Soft помогут:
- Аудировать текущие процессы разработки.
- Настроить CI/CD “под ключ”.
- Внедрить Kubernetes для оркестрации.
- Обучить вашу команду.
Оставьте заявку на аутстаффинг DevOps-инженеров или комплексную автоматизацию.