Глава 50. GitLab и CI/CD: пайплайны для команды

Зачем эта глава

GitLab часто используется в компаниях. Нужно уметь работать с MR и CI/CD пайплайнами.

Пример .gitlab-ci.yml

YAML
stages:
  - build

build:
  stage: build
  image: node:18
  script:
    - npm install
    - npm run build

Merge Request

В GitLab изменения вносятся через MR: коллеги делают код-ревью, и только потом изменения попадают в main.

Подсказка: не мержи в main без review и зелёного пайплайна.

Полный пайплайн: lint → test → build → deploy

Ниже пример типового пайплайна для фронтенда. Он проверяет код, запускает тесты и собирает билд.

.gitlab-ci.yml
stages:
  - lint
  - test
  - build
  - deploy

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

lint:
  stage: lint
  image: node:18
  script:
    - npm ci
    - npm run lint

test:
  stage: test
  image: node:18
  script:
    - npm ci
    - npm run test

build:
  stage: build
  image: node:18
  script:
    - npm ci
    - npm run build
  artifacts:
    paths:
      - dist/

deploy:
  stage: deploy
  script:
    - echo "Deploy here"
  only:
    - main
Важно: артефакты из build шага можно отдавать на деплой.

GitLab Pages (реальный деплой)

GitLab Pages умеет публиковать статические сайты из папки public. Мы просто копируем туда dist.

.gitlab-ci.yml
pages:
stage: deploy
image: node:18
script:
  - npm ci
  - npm run build
  - mv dist public
artifacts:
  paths:
    - public
only:
  - main

Деплой в GitLab Container Registry

Если фронтенд упакован в Docker‑контейнер, можно публиковать образ в Registry и деплоить его на сервере.

.gitlab-ci.yml
docker-build:
  stage: build
  image: docker:24
services:
  - docker:24-dind
variables:
  DOCKER_TLS_CERTDIR: \"\"
script:
  - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
    - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
Подсказка: для продакшена добавь тег latest или номер версии.

Staging/Production и ручной деплой

В командах часто есть два окружения: staging (тест) и production (боевое). Прод деплой обычно делается вручную.

.gitlab-ci.yml
deploy_staging:
  stage: deploy
  script:
    - echo "Deploy to staging"
  environment:
    name: staging
    url: https://staging.example.com
  only:
    - develop

deploy_production:
  stage: deploy
  script:
    - echo "Deploy to production"
  environment:
    name: production
    url: https://example.com
  when: manual
  only:
    - main
Важно: manual‑деплой снижает риск случайного выката.

Задания

Задание: GitLab

  • Создай .gitlab-ci.yml.
  • Настрой pipeline на build.
  • Создай MR и опиши изменения.