21 мая 2026 года вышел мажорный релиз, переосмысляющий то, как платформа управляет жизненным циклом от идеи до деплоя.
Основной повесткой как уже принято стал ИИ, в Gitlab уделили этому особое внимание.
ИИ уже генерирует больше кода, чем успевают проверять инженеры. Merge Request'ы накапливаются, конфликты разрастаются, секреты утекают в переменные окружения, а зависимости с уязвимостями тихо живут в requirements.txt. GitLab 19.0 отвечает на этот вызов не просто набором фич, а сменой парадигмы: платформа берёт на себя операционную работу, оставляя командам только решения, требующие человеческого суждения.
Ниже я разберу релиз подробно, постараюсь описать примеры конфигурации, архитектурные схемы и дам выводы, таким образом как я это понял)

Проблема, которую решает фича
Традиционная проблема CI/CD: секреты хранятся либо в переменных окружения проекта (видны всем, кто имеет доступ к настройкам), либо во внешних Vault‑решениях (требуют отдельной инфраструктуры, токенов, сетевой доступности). Разработчики в итоге кладут API_KEY=... прямо в .gitlab-ci.yml, а потом удивляются утечкам.
Что появилось в 19.0
GitLab Secrets Manager перешёл из закрытой беты в открытую для всех клиентов Premium и Ultimate на GitLab.com и Self‑Managed. Ключевая архитектурная идея — секреты скопированы к проекту или группе и доступны только тому pipeline‑job, который их явно запрашивает.
# .gitlab-ci.yml — запрос секрета через нативный механизм
deploy:
stage: deploy
secrets:
DATABASE_PASSWORD:
vault: production/db/password@ops # путь в GitLab Secrets Manager
script:
- ./deploy.sh
В отличие от обычных CI/CD‑переменных, секрет не «прилетает» автоматически во все jobs. Job должен его явно объявить (это принцип наименьших привилегий прямо в конфигурации пайплайна).
Сравнение с предыдущим подходом
Параметр | CI/CD Variables (старый подход) | GitLab Secrets Manager |
Область видимости | Весь проект / группа | Конкретный job |
Ротация | Вручную | Планируется (roadmap) |
Аудит‑лог | Ограниченный | Полный |
Интеграция с кодом | Разрозненная | Единая платформа |
Внешняя инфраструктура | Не нужна (для GitLab Vars) | Не нужна |
Но не забываем, что Secrets Manager находится в статусе Beta и не рекомендован для production согласно политике поддержки beta‑функций. (но я думаю Вы это и без меня понимаете)

Было / Стало
Раньше Duo Developer умел генерировать код по issue. Теперь он ведёт MR от первого коммита до мержа автономно.
Новые триггеры
В 19.0 добавлены три способа активации:
Назначить Duo Developer исполнителем issue (@assign)
Нажать кнопку «Generate MR» в интерфейсе issue
@mention в любом треде обсуждения MR или issue
При наличии AGENTS.md и agent-config.yml в репозитории агент прогоняет тесты и проверки перед коммитом. Это критично: агент верифицирует качество кода по Вашим же правилам.
# agent-config.yml — пример конфигурации агента
agent:
pre_commit_checks:
- run: pytest tests/unit/
- run: ruff check .
- run: mypy src/
max_iterations: 5
auto_merge: false # требовать ручного approve перед мержем
Разрешение конфликтов слияния (Beta)
Отдельная, но связанная фича: Duo теперь умеет автономно разрешать merge conflicts. Алгоритм:
Анализирует конфликтующие файлы
Редактирует их с учётом контекста обеих веток
Создаёт коммит в source branch
Публикует комментарий‑summary для ревьюеров
Страница: Merge Request → Conflicts → "Resolve with Duo"
Или: виджет MR → кнопка "Resolve conflicts"
Важная оговорка: Duo не делает force‑push на protected branches, то есть правила защиты веток соблюдаются строго.
Фича за feature flag mr_ai_resolve_conflicts, по умолчанию отключена.

Проблема масштабирования
В организациях с сотнями проектов команды дублировали файл .gitlab/duo/mr-review-instructions.yaml в каждом проекте. При изменении стандартов приходилось обновлять сотни репозиториев.
Решение: иерархия инструкций
Теперь можно определить инструкции на уровне группы — они автоматически применяются ко всем проектам и подгруппам, объединяясь с инструкциями конкретного проекта.
my-org (group)
├── .gitlab/duo/mr-review-instructions.yaml ← групповые правила
├── frontend (subgroup)
│ └── my-app (project)
│ └── .gitlab/duo/mr-review-instructions.yaml ← + проектные правила
└── backend (subgroup)
└── api-service (project)
# берёт только групповые правила, если нет своих
# Групповой .gitlab/duo/mr-review-instructions.yaml
instructions:
- "Проверяй наличие unit-тестов для каждого нового публичного метода"
- "Убедись, что нет хардкода секретов или токенов"
- "Комментарии на английском языке в соответствии с нашим Style Guide"
- "Проверяй обратную совместимость публичных API"
Итоговый набор инструкций при ревью = группа + проект. Конфликтов нет — правила аддитивны.

Что такое SBOM‑подход и зачем он лучше
Классический dependency scanner анализирует requirements.txt или pom.xml, то есть только прямые зависимости. Уязвимость в транзитивной зависимости (зависимость вашей зависимости) остаётся невидимой.
SBOM (Software Bill of Materials) — это полный граф зависимостей, включая транзитивные. GitLab теперь строит его автоматически для Maven, Gradle и Python.
Ваш проект
├── requests 2.28.0 ← прямая зависимость
│ ├── urllib3 1.26.x ← транзитивная (CVE-2023-43804!)
│ └── certifi 2022.12.7 ← транзитивная
└── django 4.2.0
└── sqlparse 0.4.3 ← транзитивная (CVE-2023-30608!)
Старый scanner видел только первый уровень. SBOM‑scanner видит весь граф.
Автоматическое разрешение зависимостей
Если lockfile или граф зависимостей отсутствует, анализатор сам вызывает соответствующий инструментарий:
# Минимальная конфигурация — v2 template делает всё сам
include:
- template: Security/Dependency-Scanning.gitlab-ci.yml
variables:
DS_VERSION: 2 # включаем v2 template с автоматическим разрешением
Для Gradle добавлено автоматическое создание gradle.graph.txt, а раньше его нужно было генерировать вручную как часть билда.
Fallback: Manifest Scanning
Если автоматическое разрешение невозможно (нет сетевого доступа, закрытые артефакты), анализатор падает обратно на manifest scanning:
Файл | Что парсится |
| Прямые зависимости Maven |
| Прямые зависимости Python |
| Прямые зависимости Gradle |
| Прямые зависимости Gradle (Kotlin DSL) |
Итог: команды всегда получают хотя бы базовое покрытие, даже без lockfile.

Зачем это нужно платформенным командам
Представьте: вы поддерживаете 20 CI/CD‑компонентов в организации. Вышла новая версия deploy-component с критическим фиксом. Какие из 150 проектов организации используют старую версию? Без этой фичи — это будет ручной поиск по всем .gitlab-ci.yml.
Что показывает новый интерфейс
На странице компонента в CI/CD Catalog теперь есть вкладка Component Usage Details:
Component: deploy-component v2.1.0
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Outdated versions (показаны первыми):
⚠️ my-org/service-a v1.8.0 (latest: v2.1.0)
⚠️ my-org/legacy-app v1.5.2 (latest: v2.1.0)
⚠️ my-org/api-gateway v2.0.1 (latest: v2.1.0)
Up to date:
✅ my-org/frontend v2.1.0
✅ my-org/backend v2.1.0
Проекты с устаревшими версиями отображаются первыми, что позволяет приоритизировать обращения к командам, использующим старые версии с известными уязвимостями.

Переход Duo Core на usage‑based billing
С GitLab 19.0 модель оплаты Duo Core изменилась: Code Suggestions в Web IDE и desktop IDE теперь потребляют GitLab Credits. Это означает переход от seat‑based к потреблению по факту использования.
Одновременно Duo Chat стал агентным: теперь он работает поверх GitLab Duo Agent Platform. Для активации:
Settings → General → GitLab Duo Agent Platform → Enable
(для instance: Admin → Settings → AI/ML)
Per‑session approvals для агентных инструментов
Агентный Chat может использовать инструменты от вашего имени: создавать issues, запускать пайплайны, читать файлы. По умолчанию каждый вызов инструмента требует отдельного подтверждения.
Новый механизм per‑session approvals позволяет одобрить конкретный инструмент на всю сессию:
Разрешить "create_issue" для этой сессии? [Разрешить один раз] [Разрешить для сессии] [Отклонить]
Администраторы контролируют поведение через каскадные настройки:
instance → group → subgroup → project
Варианты:- "On by default" — per-session approvals включены- "Off by default" — каждый вызов требует подтверждения (DEFAULT)- "Always off" — нельзя изменить на уровне группы/проекта
Новые модели в Agent Platform
Claude Opus 4.7 теперь доступен в GitLab Duo Agent Platform. Модель ориентирована на сложные многошаговые задачи: пайплайны CI/CD, код‑ревью с анализом архитектуры, резолюция уязвимостей.
Для Self‑Managed расширена поддержка моделей:
Модель | Тип | Поддерживаемые флоу |
Gemini (Google) | Проприетарная, self‑hosted | Code Review, SAST Resolution, Fix CI/CD |
Devstral 2 123B | Open source | Agentic workflows |
GLM-5.1-FP8 | Open source | Agentic workflows |
прочие модели | Open source | Offline/network‑restricted |

Шаблоны заголовков Merge Request
Одна из самых ожидаемых качественных фич: теперь можно задать шаблон заголовка MR на уровне проекта.
Settings → Merge requests → Default merge request title template
Доступные переменные:
Переменная | Содержимое |
| Имя source branch |
| Имя target branch |
| Тема первого коммита |
| ID связанного issue |
| Заголовок связанного issue |
| Human‑readable версия имени ветки |
Пример шаблона:
Resolve %{issue_id} "%{issue_title}"
Результат:
Resolve 123 "Fix login bug"
Улучшенная поддержка массивов в CI/CD inputs
# Доступ к элементам массива через индекс
spec:
inputs:
services:
type: array
run:
script:
- echo "Primary: $[[ inputs.services[0] ]]"
- echo "Fallback: $[[ inputs.services[1] ]]"
Выбор нескольких значений в UI пайплайна
При ручном запуске пайплайна с inputs теперь можно выбрать несколько значений из дропдауна. Выбранные значения объединяются в массив: ["staging", "production"]. Практически: перезапуск сервисов на нескольких окружениях, сборка нескольких Docker‑образов — всё в одном запуске.
HMAC‑подписи для webhooks
Существующий механизм X-Gitlab-Token отправляет статический секрет в plain text — уязвимо к перехвату и replay‑атакам.
Новый механизм: при добавлении signing token к webhook GitLab вычисляет HMAC‑SHA256 подпись над:
signature = HMAC-SHA256(
key = signing_token,
data = webhook_id + "." + timestamp + "." + payload
)
Заголовки в запросе:webhook-id: wh_01HXYZ...
webhook-timestamp: 1716285600
webhook-signature: v1=a3f9c2...

# Поиск только в конкретном репозитории
def authenticate repo:my-group/my-project
# Поиск по паттерну (несколько репозиториев)
def authenticate repo:my-group/service-*
# Комбинирование с другими фильтрами
class UserController repo:my-org/backend language:ruby
Это устраняет боль: раньше нужно было переходить в каждый проект отдельно для поиска по коду.

Обязательные обновления перед миграцией на 19.0
Без этих шагов upgrade невозможен:
# Порядок обновления для Linux package:
# 1. Обновить PostgreSQL 16 → 17 (если используется bundled)
sudo gitlab-ctl pg-upgrade -V 17
# 2. Проверить версию Redis
redis-cli INFO server | grep redis_version
# Нужна 7.2+ или Valkey 7.2+
# Redis 6 больше НЕ поддерживается
# 3. Проверить ОС
lsb_release -a
# Ubuntu 20.04 — НЕ поддерживается начиная с 19.0
# Нужна Ubuntu 22.04+
# 4. Только после этого:
sudo apt-get update && sudo apt-get install gitlab-ee
Изменения в Helm chart
Компонент | Статус в 19.0 | Действие |
NGINX Ingress | Заменён Envoy Gateway (по умолчанию) | Миграция или явное включение NGINX до 20.0 |
Bundled PostgreSQL (Bitnami) | Удалён | Перейти на external PostgreSQL |
Bundled Redis (Bitnami) | Удалён | Перейти на external Redis/Valkey |
Bundled MinIO | Удалён | Перейти на external object storage |
Mattermost | Удалён из Linux package | Мигрировать на standalone Mattermost |
Spamcheck | Удалён из package/chart | Развернуть отдельно через Docker |
Bundled Bitnami компоненты предназначались только для PoC и тестовых сред.

Для разработчиков
Duo Developer берёт на себя рутину: создание MR по issue, разрешение конфликтов, предварительные проверки.
Per‑session approvals снижают «approval fatigue» при работе с агентным Chat.
HMAC‑подписи для webhooks — если вы интегрируете GitLab с собственными сервисами, обновите verification‑логику.
Для платформенных инженеров
Component analytics даёт полную картину использования CI/CD компонентов — больше не нужно grep по всем репозиториям.
Group‑level review instructions устраняют дублирование конфигурации.
Настройка параллельных пайплайнов merge train позволяет балансировать нагрузку на runners.
Для security‑команд
SBOM‑based dependency scanning с автоматическим разрешением закрывает слепое пятно транзитивных зависимостей.
Secrets Manager с per‑job scoping — правильная архитектура для управления секретами.
Network access controls для Agent Platform дают governance‑слой над исходящим трафиком агентов.
Auto remediation для уязвимых зависимостей Ruby (эксперимент) — первый шаг к полностью автоматическому patch management.
Для DevOps / SRE на Self‑Managed
PostgreSQL 17 — обязательно, Redis 7.2 — обязательно, Ubuntu 22.04+ — обязательно.
Helm chart: bundled Bitnami компоненты удалены. Это ломающее изменение для тестовых инсталляций.
Envoy Gateway вместо NGINX — новый default. NGINX остаётся доступным до GitLab 20.0.

GitLab 19.0 — это релиз, в котором платформа последовательно забирает на себя операционную нагрузку: управление секретами, разрешение конфликтов, мониторинг зависимостей, Code Review по корпоративным стандартам.
Ключевая архитектурная идея версии: ИИ‑агенты встроены в процессы разработки, а не добавлены сверху. Duo Developer «проходит» ваши тесты. Secrets Manager «ограничивает их видимость» до уровня job. SBOM‑scanner сам «строит граф» там, где его нет.
Для Self‑Managed администраторов это нагруженный релиз: несколько обязательных миграций, удаление bundled компонентов, смена default networking в Helm. Планируйте upgrade с запасом времени.
