Архитектура GitLab CI/CD, ключевые концепции, отличие от GitHub Actions.
GitLab CI/CD — встроенная система непрерывной интеграции и доставки. Изучите основы для создания первых пайплайнов.
GitLab CI/CD — встроенная в GitLab система автоматизации процессов разработки: сборки, тестирования, деплоя и других задач.
Преимущества GitLab CI:
.gitlab-ci.yml
Pipeline — полный процесс выполнения CI/CD, состоящий из стадий и job.
Pipeline запускается автоматически при:
Stages определяют порядок выполнения job.
stages:
- build
- test
- deployПравила выполнения:

Job — отдельная задача в пайплайне.
stages:
- test
unit_tests:
stage: test
script:
- npm install
- npm testСтруктура job:
<имя_job>:
stage: <стадия>
script:
- <команда 1>
- <команда 2>
image: <docker-образ>
tags:
- <тег раннера>GitLab Runner — агент, выполняющий job.
Типы runners:
| Тип | Описание |
|---|---|
| Shared | Предоставлены GitLab, доступны всем проектам |
| Group | Доступны всем проектам в группе |
| Project/Specific | Привязаны к конкретному проекту |
Типы execution:
Создайте файл .gitlab-ci.yml в корне репозитория:
stages:
- build
- test
- deploystages:
- build
- test
- deploy
build_job:
stage: build
image: node:20
script:
- npm install
- npm run build
artifacts:
paths:
- dist/test_job:
stage: test
image: node:20
script:
- npm install
- npm test
dependencies:
- build_jobdeploy_job:
stage: deploy
image: alpine:latest
script:
- echo "Deploying to production..."
- ./deploy.sh
only:
- mainstages:
- build
- test
- deploy
variables:
NODE_VERSION: "20"
build_job:
stage: build
image: node:${NODE_VERSION}
script:
- npm ci
- npm run build
artifacts:
paths:
- dist/
expire_in: 1 week
test_job:
stage: test
image: node:${NODE_VERSION}
script:
- npm ci
- npm test
dependencies:
- build_job
deploy_job:
stage: deploy
image: alpine:latest
script:
- apk add --no-cache curl
- echo "Deploying..."
- ./deploy.sh
only:
- main
environment:
name: productionGitLab CI использует Docker как основную среду выполнения.
Глобально для всех job:
image: node:20
stages:
- test
test_job:
stage: test
script:
- npm testДля конкретного job:
test_job:
stage: test
image: python:3.11
script:
- pip install -r requirements.txt
- pytestДля тестов, требующих базу данных:
test_job:
stage: test
image: node:20
services:
- postgres:15
- redis:7
variables:
POSTGRES_DB: test_db
POSTGRES_USER: runner
POSTGRES_PASSWORD: ""
script:
- npm testGitLab CI использует rules или only/except для управления запуском job.
deploy_job:
stage: deploy
script:
- ./deploy.sh
rules:
- if: $CI_COMMIT_BRANCH == "main"
- if: $CI_PIPELINE_SOURCE == "schedule"
- if: $CI_COMMIT_TAG =~ /^v\d+\.\d+\.\d+$/deploy_job:
stage: deploy
script:
- ./deploy.sh
only:
- main
- tags
except:
- schedulestest_job:
stage: test
script:
- npm test
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
- if: $CI_COMMIT_BRANCH == "main"GitLab автоматически устанавливает переменные:
| Переменная | Описание |
|---|---|
CI_COMMIT_SHA | SHA коммита |
CI_COMMIT_BRANCH | Ветка (только для push) |
CI_COMMIT_REF_NAME | Имя ветки или тега |
CI_PIPELINE_ID | ID пайплайна |
CI_JOB_ID | ID job |
CI_PROJECT_DIR | Путь к проекту |
Использование:
job:
script:
- echo "Commit: $CI_COMMIT_SHA"
- echo "Branch: $CI_COMMIT_BRANCH"
- echo "Project: $CI_PROJECT_DIR"В конфиге:
variables:
DATABASE_URL: "postgresql://user:pass@db/prod"
API_VERSION: "v2"
job:
script:
- echo "Using API $API_VERSION"В UI GitLab: Settings → CI/CD → Variables → Add variable
Использование секретов:
deploy_job:
script:
- ./deploy.sh --token $DEPLOY_TOKENАртефакты — файлы, сохраняемые после выполнения job.
build_job:
stage: build
script:
- npm run build
artifacts:
paths:
- dist/
- coverage/
expire_in: 30 days
reports:
junit: reports/junit.xml
coverage_report:
coverage_format: cobertura
path: coverage/cobertura-coverage.xmlПередача артефактов между job:
test_job:
stage: test
dependencies:
- build_job
script:
- npm testКэш ускоряет выполнение за счёт сохранения зависимостей.
.default_cache:
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- node_modules/
- .npm/
install_job:
stage: build
script:
- npm ci --cache .npm
extends: .default_cacheРазные ключи кэша:
cache:
key:
files:
- package-lock.json
prefix: $CI_JOB_NAME
paths:
- node_modules/| GitLab CI | GitHub Actions |
|---|---|
.gitlab-ci.yml | .github/workflows/*.yml |
stages: + stage: | jobs: + needs: |
script: | run: |
image: | runs-on: + container |
rules: / only/except | on: + if: |
artifacts: | actions/upload-artifact |
cache: | actions/cache |
| GitLab Runner | GitHub Runner |
GitLab CI/CD — мощная встроенная система автоматизации:
.gitlab-ci.ymlВ следующих темах вы изучите продвинутые возможности GitLab CI: templates, includes, DAG pipelines.
Вопросы ещё не добавлены
Вопросы для этой подтемы ещё не добавлены.