Перейти к основному контенту
Tech Path Finder
КурсыИнтервьюКод-ревьюБлог
Tech Path Finder

Персонализированный путеводитель в IT. Квизы, мок-интервью, код ревью и аналитика прогресса.

@potapov_me

Платформа

  • Курсы
  • Прогресс
  • Мок-интервью
  • Код ревью
  • Живое ревью с ИИ
  • Тренажёр переговоров
  • Закладки

Контент

  • Блог
  • Главная
  • Обратная связь

Компания

  • О проекте
  • Тарифы
  • Условия использования
  • Конфиденциальность
  • Согласие на обработку данных
  • Cookie
  • Реквизиты

Аккаунт

  • Войти
  • Зарегистрироваться
  • Профиль

© 2026 Tech Path Finder. Все права защищены.

·ИП Потапов К.С.·Политика конфиденциальности·
Сделано с ❤️ в России
  1. Введение в GitLab CI
gitlab_ci_intro

Введение в GitLab CI

Архитектура GitLab CI/CD, ключевые концепции, отличие от GitHub Actions.

Введение в GitLab CI

GitLab CI/CD — встроенная система непрерывной интеграции и доставки. Изучите основы для создания первых пайплайнов.

#Что такое GitLab CI?

GitLab CI/CD — встроенная в GitLab система автоматизации процессов разработки: сборки, тестирования, деплоя и других задач.

Преимущества GitLab CI:

  • Встроена в GitLab (не требует отдельной настройки)
  • Конфигурация в одном файле .gitlab-ci.yml
  • Поддержка Docker из коробки
  • Гибкая система стадий и зависимостей
  • Встроенные и self-hosted runners

#Архитектура GitLab CI

ASCII Diagram

#Основные компоненты

#1. Pipeline

Pipeline — полный процесс выполнения CI/CD, состоящий из стадий и job.

Pipeline запускается автоматически при:

  • Push в репозиторий
  • Создании/обновлении Merge Request
  • По расписанию
  • Вручную через UI/API

#2. Stages (Стадии)

Stages определяют порядок выполнения job.

stages: - build - test - deploy

Правила выполнения:

  • Стадии выполняются последовательно
  • Job внутри стадии выполняются параллельно
  • Следующая стадия начинается только после успешного завершения предыдущей

ASCII Diagram

#3. Jobs

Job — отдельная задача в пайплайне.

stages: - test unit_tests: stage: test script: - npm install - npm test

Структура job:

<имя_job>: stage: <стадия> script: - <команда 1> - <команда 2> image: <docker-образ> tags: - <тег раннера>

#4. GitLab Runner

GitLab Runner — агент, выполняющий job.

Типы runners:

ТипОписание
SharedПредоставлены GitLab, доступны всем проектам
GroupДоступны всем проектам в группе
Project/SpecificПривязаны к конкретному проекту

Типы execution:

  • Docker (наиболее популярный)
  • Shell
  • Kubernetes
  • VirtualBox
  • SSH

#Первый пайплайн: пошагово

#Шаг 1: Создание файла

Создайте файл .gitlab-ci.yml в корне репозитория:

stages: - build - test - deploy

#Шаг 2: Добавление job

stages: - build - test - deploy build_job: stage: build image: node:20 script: - npm install - npm run build artifacts: paths: - dist/

#Шаг 3: Добавление тестов

test_job: stage: test image: node:20 script: - npm install - npm test dependencies: - build_job

#Шаг 4: Добавление деплоя

deploy_job: stage: deploy image: alpine:latest script: - echo "Deploying to production..." - ./deploy.sh only: - main

#Полный пример

stages: - 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: production

#Docker в GitLab CI

GitLab 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

#Использование Docker-сервисов

Для тестов, требующих базу данных:

test_job: stage: test image: node:20 services: - postgres:15 - redis:7 variables: POSTGRES_DB: test_db POSTGRES_USER: runner POSTGRES_PASSWORD: "" script: - npm test

#Триггеры (Rules)

GitLab CI использует rules или only/except для управления запуском job.

#Rules (рекомендуемый способ)

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+$/

#Only/Except (устаревший, но популярный)

deploy_job: stage: deploy script: - ./deploy.sh only: - main - tags except: - schedules

#Триггеры для Merge Requests

test_job: stage: test script: - npm test rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" - if: $CI_COMMIT_BRANCH == "main"

#Переменные окружения

#Предопределённые переменные

GitLab автоматически устанавливает переменные:

ПеременнаяОписание
CI_COMMIT_SHASHA коммита
CI_COMMIT_BRANCHВетка (только для push)
CI_COMMIT_REF_NAMEИмя ветки или тега
CI_PIPELINE_IDID пайплайна
CI_JOB_IDID 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/

#Отличия от GitHub Actions

GitLab CIGitHub Actions
.gitlab-ci.yml.github/workflows/*.yml
stages: + stage:jobs: + needs:
script:run:
image:runs-on: + container
rules: / only/excepton: + if:
artifacts:actions/upload-artifact
cache:actions/cache
GitLab RunnerGitHub Runner

Далее: GitHub Actions: workflow, jobs, steps