惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Threatpost
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Engineering at Meta
Engineering at Meta
T
The Blog of Author Tim Ferriss
Recent Announcements
Recent Announcements
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
The Register - Security
The Register - Security
MongoDB | Blog
MongoDB | Blog
U
Unit 42
B
Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
L
LangChain Blog
Stack Overflow Blog
Stack Overflow Blog
P
Privacy International News Feed
L
LINUX DO - 最新话题
博客园_首页
博客园 - Franky
大猫的无限游戏
大猫的无限游戏
小众软件
小众软件
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Tor Project blog
V
Visual Studio Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
P
Privacy & Cybersecurity Law Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
K
Kaspersky official blog
C
Cisco Blogs
博客园 - 【当耐特】
阮一峰的网络日志
阮一峰的网络日志
I
Intezer
罗磊的独立博客
MyScale Blog
MyScale Blog
Last Week in AI
Last Week in AI
A
About on SuperTechFans
G
GRAHAM CLULEY
Y
Y Combinator Blog
Microsoft Security Blog
Microsoft Security Blog
GbyAI
GbyAI
T
Threat Research - Cisco Blogs
P
Proofpoint News Feed
D
DataBreaches.Net
The Hacker News
The Hacker News
Spread Privacy
Spread Privacy
AWS News Blog
AWS News Blog
I
InfoQ
T
The Exploit Database - CXSecurity.com
Simon Willison's Weblog
Simon Willison's Weblog
博客园 - 叶小钗
Project Zero
Project Zero

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Релиз GitLab 19.0: ИИ-оркестрация, которая наконец-то догнала темп написания кода
stnkv-it · 2026-05-22 · via Все публикации подряд на Хабре

Уровень сложностиСредний

Время на прочтение9 мин

Охват и читатели152

Обзор

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 добавлены три способа активации:

  1. Назначить Duo Developer исполнителем issue (@assign)

  2. Нажать кнопку “Generate MR” в интерфейсе issue

  3. @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. Алгоритм:

1. Анализирует конфликтующие файлы
2. Редактирует их с учётом контекста обеих веток
3. Создаёт коммит в source branch
4. Публикует комментарий-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:

Файл

Что парсится

pom.xml

Прямые зависимости Maven

requirements.txt

Прямые зависимости Python

build.gradle

Прямые зависимости Gradle

build.gradle.kts

Прямые зависимости 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}

Имя source branch

%{target_branch}

Имя target branch

%{first_commit}

Тема первого коммита

%{issue_id}

ID связанного issue

%{issue_title}

Заголовок связанного issue

%{source_branch_human}

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 с запасом времени.