Глава 50. GitLab и CI/CD: пайплайны для команды
Зачем эта глава
GitLab часто используется в компаниях. Нужно уметь работать с MR и CI/CD пайплайнами.
Пример .gitlab-ci.yml
stages:
- build
build:
stage: build
image: node:18
script:
- npm install
- npm run build
Merge Request
В GitLab изменения вносятся через MR: коллеги делают код-ревью, и только потом изменения попадают в main.
Подсказка: не мержи в main без review и зелёного пайплайна.
.gitlab-ci.yml
.gitlab-ci.yml
.gitlab-ci.yml
.gitlab-ci.yml
Полный пайплайн: lint → test → build → deploy
Ниже пример типового пайплайна для фронтенда. Он проверяет код, запускает тесты и собирает билд.
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.
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 и деплоить его на сервере.
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 (боевое). Прод деплой обычно делается вручную.
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 и опиши изменения.