Главная / Блог / Внедрение CI/CD на базе GitLab и Docker: с чего начать?

Внедрение CI/CD на базе GitLab и Docker: с чего начать?

В современном IT “релизить редко, но метко” — это путь к стагнации. Бизнес требует обновлений каждый день, а пользователи не прощают простоев. Ответ на этот вызов — CI/CD (Continuous Integration / Continuous Delivery).

В этой статье разберем, как построить надежный конвейер доставки кода, используя GitLab CI и Docker.

Зачем вам CI/CD?

Ручной деплой — это всегда риск. “Забыл скопировать конфиг”, “не та версия библиотеки”, “на проде упало, а локально работало”. Автоматизация решает эти проблемы.

Что вы получите:

  1. Скорость: Время от коммита до продакшена сокращается с часов до минут.
  2. Качество: Автотесты запускаются на каждый чих.
  3. Стабильность: Окружения (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 выполняет задачи на раннерах — специальных агентах.

  1. Установите gitlab-runner на ваш сервер.
  2. Зарегистрируйте его в GitLab (Settings -> CI/CD -> Runners).
  3. Для сборки 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-инженеров или комплексную автоматизацию.