Мы с радостью объявляем о релизе GitLab 17.0 с каталогом CI/CD в общем доступе, панелью аналитики AI Impact, хостингом обработчиков заданий на Linux Arm, страницами с подробной информацией о развёртывании и многими другими фичами!
Это лишь несколько из более 60 улучшений, добавленных в этом релизе. Читайте дальше, чтобы узнать обо всех основных изменениях.
Мы благодарны сообществу GitLab за невероятные 344 изменения, которые вы внесли в релиз 17.0! В GitLab каждый может сделать свой вклад, и ваш вклад в этот релиз неоценим!
Присоединяйтесь к нам для исследования новых фич, основанных на ИИ, добавленных в GitLab 17, которые помогут вам улучшить совместную работу, видимость, безопасность и производительность. Регистрируйтесь на онлайн-событие, посвящённое релизу GitLab 17 про будущее разработки софта на AI (The future of AI-driven software development).
Чтобы заранее узнать, что запланировано на следующий месяц, посмотрите страницу наших будущих релизов — на ней есть видео, посвящённое релизу 17.1.
Награда MVP в этом месяце присуждается совместно Niklas van Schrick и Gerardo Navarro
Номинировать участников сообщества GitLab на награду MVP может каждый! Поддержите наших активных кандидатов или добавьте новую номинацию ?
Niklas van Schrick собрал комбо уже из трёх наград MVP и стал одним из самых активных участников сообщества, регулярно вносящим свой вклад, — по крайней мере один мерж-реквест (в русской локализации GitLab «запрос на слияние») на майлстоун (в русской локализации GitLab «этап»), начиная с GitLab 14.3.
Niklas был номинирован Magdalena Frankiewicz, продуктовым менеджером в GitLab, за вклад в фичу по созданию кастомных шаблонов полезной нагрузки веб-хуков, и последующим добавлением возможности задавать кастомные заголовки веб-хуков. «Это позволило завершить очень запрашиваемую фичу семилетней давности с 65 лайками», — говорит Magdalena. «Теперь пользователи могут создавать полностью настраиваемые веб-хуки»!
Niklas — участник команды GitLab Core и помогает GitLab и нашему сообществу выполнять нашу миссию — позволять каждому внести свой вклад.
«В ходе моей работы мне довелось пообщаться со множеством ревьюеров, мейнтейнеров (в русской локализации GitLab «сопровождающий»), дизайнеров, технических писателей, продуктовых менеджеров и, вероятно, многих других», — говорит Niklas. «Все они были очень отзывчивы, и делали всё, что было в их силах, чтобы продвинуть вперёд мои тикеты и мерж-реквесты».
Gerardo Navarro вносит вклад в GitLab уже чуть больше года, и забирает домой вторую награду MVP GitLab.
Gerardo был номинирован за продолжительный вклад в фичу, позволяющую отображать защищённые пакеты в списке реестра пакетов. Эта фича является частью эпика, посвящённого защищённым пакетам, который должен повысить безопасность путём добавления точных настроек для создания, обновления и удаления пакетов в реестре пакетов.
Огромное спасибо Gerardo Navarro и остальным участникам команды из Siemens за помощь в развитии GitLab.
«Большое спасибо вам за то, что оценили нашу работу такой крутой наградой», — говорит Gerardo. «Для меня это большая честь. Я по-прежнему узнаю что-то новое с каждым новым вкладом».
Основные улучшения в GitLab 17.0
Каталог CI/CD с компонентами и входными параметрами теперь в общем доступе
(Доступно в планах SaaS: FREE, PREMIUM, ULTIMATE; Self-Managed: FREE, PREMIUM, ULTIMATE) Стадия цикла DevOps: Verify
Каталог CI/CD теперь находится в общем доступе. Как часть этого релиза мы также делаем общедоступными компоненты CI/CD и входные параметры.
С каталогом CI/CD вы получаете доступ к большому массиву компонентов, созданных участниками сообщества и экспертами в этой области. В нём вы можете найти компоненты для непрерывной интеграции, конвейеров развёртывания и заданий автоматизации, подходящие под любые потребности. Вы можете узнать больше о каталоге и его возможностях в этой статье блога.
Мы приглашаем и вас внести свой вклад в каталог CI/CD, добавив в него новые компоненты. Давайте вместе поспособствуем росту этой новой и развивающейся фичи GitLab.com!
Документация по каталогу CI/CD и оригинальный эпик.
Аналитика AI Impact на панели цикла разработки
(Доступно в планах SaaS: ULTIMATE; Self-Managed: ULTIMATE) Стадия цикла DevOps: Plan
Влияние AI (AI Impact) — это новая метрика, доступная на панели аналитики цикла разработки. Она будет помогать компаниям оценивать влияние использования фичи GitLab Duo на продуктивность команд. Эта метрика помогает сопоставить показатели использования ИИ с метриками SDLC: временем производства, временем цикла, DORA и уязвимостями на протяжении месяца. Тимлиды могут использовать панель AI Impact, чтобы измерять, сколько времени удаётся сэкономить в ходе всего процесса разработки, при этом сохраняя фокус на бизнес-показателях, а не на действиях разработчиков.
В этом первом релизе использование ИИ измеряется как число использований подсказок кода в течение месяца. Это число рассчитывается как количество уникальных пользователей, использовавших подсказки кода в течение месяца, на общее число уникальных вкладов в течение месяца.
Панель AI Impact доступна пользователям с планом Ultimate в течение ограниченного времени. Далее для её использования понадобится лицензия GitLab Duo Enterprise.
Документация по метрике AI Impact и оригинальный эпик.
Новые обработчики заданий на Linux Arm
(Доступно в планах SaaS: PREMIUM, ULTIMATE) Стадия цикла DevOps: Verify
Мы рады представить раннеры, размещённые на Linux Arm для GitLab.com. Доступные типы машин Arm medium
и large
с 4 и 8 vCPU соответственно, полностью интегрированные с GitLab CI/CD, позволят вам собирать и тестировать ваши приложения быстрее и эффективнее чем раньше.
Мы намерены предоставить вам самую быструю сборку CI/CD и ждём с нетерпением, когда ваши команды смогут достигать ещё более быстрых циклов до сбора фидбека и более быстрой поставки ПО.
Документация по размещённым обработчикам заданий и оригинальный тикет.
Страница с подробной информацией о развёртываниях
(Доступно в планах SaaS: PREMIUM, ULTIMATE; Self-Managed: PREMIUM, ULTIMATE) Стадия цикла DevOps: Deploy
Теперь в GitLab можно делать ссылку на развёртывание. Ранее при совместной работе над развёртыванием вам приходилось искать его в списке. Из-за большого числа развёртываний в списке находить нужное развёртывание было сложно, и при этом легко можно было ошибиться.
Начиная с 17.0 в GitLab будет представление с подробной информацией о развёртывании, на которое можно ссылаться напрямую. В этой первой версии фичи страница содержит обзорную информацию о задании развёртывания и возможность подтвердить, отменить или прокомментировать развёртывание в контексте непрерывного развёртывания. Мы продолжаем рассматривать возможности улучшить эту фичу, включая возможность делать ссылку на неё из связанного задания конвейера (в русской локализации GitLab «сборочная линия»). Мы будем рады вашему фидбеку в тикете 450700.
Документация по подтверждению и отмене развёртывания и оригинальный тикет.
GitLab Duo Chat теперь использует Anthropic Claude 3 Sonnet
(Доступно в планах SaaS: PREMIUM, ULTIMATE; Self-Managed: PREMIUM, ULTIMATE) Направление: ИИ
GitLab Duo Chat стал намного лучше. Теперь он использует в качестве основной модели Anthropic Claude 3 Sonnet вместо Claude 2.1 для ответа на большинство вопросов.
В GitLab при выборе лучшей модели для выполнения задач и создания хорошо работающих запросов мы применяем подход, основанный на тестировании. После недавней настройки запросов в чате нам удалось достичь значительных улучшений в правильности, связности и читабельности ответов модели на основе Claude 3 Sonnet по сравнению с предыдущей версией на основе Claude 2.1. Поэтому в этом релизе мы переключаемся на эту новую версию модели.
Документация по GitLab Duo Chat и оригинальный эпик.
Вопросы типа ‘how-to’ в GitLab Duo Chat доступны в развёртываниях с самостоятельным управлением
(Доступно в планах SaaS: PREMIUM, ULTIMATE; Self-Managed: PREMIUM, ULTIMATE) Направление: ИИ
Одна из популярных возможностей GitLab Duo Chat — это ответы на вопросы о том, как использовать GitLab. Ранее эта возможность была доступна только на GitLab.com. В этом релизе мы делаем её доступной для развёртываний GitLab с самостоятельным управлением, что соответствует нашим ценностям по предоставлению удобного опыта использования для всех типов развёртываний.
Кем бы вы ни были — новичком или экспертом — вы можете просить Chat о помощи, задавая вопросы типа «Как изменить пароль в GitLab?» или «Как подключить кластер Kubernetes в GitLab?». Chat старается предоставить вам полезную информацию для эффективного решения проблем.
Документация по GitLab Duo Chat и оригинальный тикет.
Новая панель обзора в аналитике цикла разработки
(Доступно в планах SaaS: ULTIMATE; Self-Managed: ULTIMATE) Стадия цикла DevOps: Plan
Мы улучшили аналитику цикла разработки, добавив новую панель обзора, которая даёт чёткое представление об использовании GitLab в контексте жизненного цикла разработки ПО (SLDC), удовлетворяя потребность в понимании эффективности поставки ПО на уровне высшего руководства.
Панель обзора отображает метрики на уровне группы, такие как число групп, подгрупп, проектов, пользователей, тикетов (в русской локализации GitLab «обсуждение»), мерж-реквестов и конвейеров.
Документация по панели обзора в аналитике цикла разработки и оригинальный тикет.
Добавление группы в разрешённый список токенов заданий CI/CD
(Доступно в планах SaaS: FREE, PREMIUM, ULTIMATE; Self-Managed: FREE, PREMIUM, ULTIMATE) Стадия цикла DevOps: Verify
Разрешённый список токенов заданий CI/CD, добавленный в GitLab 15.9, предотвращает несанкционированный доступ к вашему проекту из других. Ранее вы могли разрешать доступ на уровне проектов только из конкретных проектов; при этом можно было указать до 200 проектов.
В GitLab 17.0 вы сможете добавлять группы в разрешённый список токенов заданий CI/CD. Ограничение в 200 проектов теперь относится и к проектам и к группам, то есть разрешённый список может содержать до 200 проектов и групп, для которых разрешён доступ. Это улучшение упрощает добавление большого числа проектов, которые относятся к одной группе.
Документация по управлению токенами заданий для доступа к проектам и оригинальный тикет.
Улучшенное управление контекстом с ключевым словом rules:exists
(Доступно в планах SaaS: FREE, PREMIUM, ULTIMATE; Self-Managed: FREE, PREMIUM, ULTIMATE) Стадия цикла DevOps: Verify
Ключевое слово CI/CD rules:exists
имеет поведения по умолчанию, которые отличаются в зависимости от того, где было определено ключевое слово, что может усложнить его использование в более сложных конвейерах. Когда rules:exists
определено в задании, оно ищет заданные файлы в проекте, к которому относится конвейер. Однако, когда оно определено в разделе include
, rules:exists
ищет заданные файлы в проекте, в котором находится файл настроек, включающий раздел include
. Если настройка разбита на несколько файлов и проектов, то может быть сложно определить, в каком именно проекте нужно искать заданные файлы.
В этом релизе мы добавили ключевые слова project
и ref
, которые являются дополнительными ключами по отношению к rules:exists
, и предоставляют возможность в явном виде контролировать контекст поиска. Это поможет вам обеспечить правильное применение правил путём точного определения контекста, устранения несоответствий и более чёткого определения правил конвейера.
Документация по ключевому слову rules:exists
и оригинальный тикет.
Лог изменений настроек, сделанных со страницы Switchboard
(Доступно в планах Self-Managed: ULTIMATE) Направление: Платформы
Теперь вы можете просматривать статус изменений настроек, сделанных в вашем инстансе GitLab Dedicated со страницы настройки Switchboard.
Все пользователи с доступом на просмотр или редактирование вашего клиента Switchboard будут иметь возможность просматривать изменения в логе изменений настроек и отслеживать процесс их применения к вашему инстансу.
В настоящее время страница настроек Switchboard и лог изменений доступны для таких изменений как управление доступом к вашему инстансу путём добавления IP в разрешённый список или настройки параметров SAML для вашего инстанса.
Мы планируем дополнить эту фичу возможностью самостоятельного добавления настроек для отслеживания в течение ближайшего квартала.
Документация по логу изменения настроек инстанса и планы на первый квартал 2025 года.
Другие изменения в GitLab 17.0
Просмотр тикетов Jira в GitLab через REST API
(Доступно в планах SaaS: PREMIUM, ULTIMATE; Self-Managed: PREMIUM, ULTIMATE) Стадия цикла DevOps: Manage
В этом релизе мы добавили возможность использовать REST API, чтобы просматривать тикеты Jira в GitLab. Вы также можете задавать один или более проектов Jira, из которых вы будете просматривать тикеты.
Спасибо Ivan за этот вклад сообщества!
Документация по интеграции Jira в GitLab и оригинальный тикет.
Индикатор для элементов, которые были импортированы прямым переносом
(Доступно в планах SaaS: FREE, PREMIUM, ULTIMATE; Self-Managed: FREE, PREMIUM, ULTIMATE) Стадия цикла DevOps: Manage
Вы можете переносить группы и проекты GitLab между инстансами GitLab, используя прямой перенос.
Ранее импортируемые элементы было непросто отличить. В этом релизе мы добавили индикаторы того, что элементы были импортированы прямым переносом, где создатель отображается как определённый пользователь. Элементы такие:
- Заметки (системные заметки и комментарии пользователей)
- Тикеты
- Мерж-реквесты
- Эпики (в русской локализации GitLab «цель»)
- Дизайны
- Сниппеты
- Активность профиля пользователя
Документация по просмотру результатов импорта и оригинальный тикет.
Просмотр тикетов из нескольких проектов Jira в GitLab
(Доступно в планах SaaS: PREMIUM, ULTIMATE; Self-Managed: PREMIUM, ULTIMATE) Стадия цикла DevOps: Manage
Для удобства работы с большими репозиториями мы добавили возможность просматривать тикеты из нескольких проектов при настройке интеграции тикетов Jira. Начиная с этого релиза вы сможете:
- Ввести до 100 ключей проектов Jira через запятую
- Оставить поле Jira project keys пустым, чтобы включить все доступные ключи
При просмотре тикетов Jira в GitLab вы можете фильтровать их по проекту.
Чтобы создать тикет Jira для уязвимостей в GitLab Ultimate, вы можете указать только один проект Jira.
Документация по просмотру тикетов из Jira и оригинальный эпик.
Улучшенная защита от удаления эпиков
(Доступно в планах SaaS: FREE, PREMIUM, ULTIMATE; Self-Managed: FREE, PREMIUM, ULTIMATE) Стадия цикла DevOps: Plan
Мы обновили порядок действий при удалении эпика, чтобы обеспечить лучшую защиту структуры и данных вашего проекта. Это даст вам больше контроля и душевного спокойствия при управлении своими проектами.
Теперь, когда вы удаляете родительский эпик, вместо автоматического удаления всех дочерних записей мы отделяем их от родительского и сохраняем. Таким образом управление эпиками станет безопаснее, и случайные удаления не приведут к потере большого объёма ценной информации.
Документация по удалению эпиков и оригинальный тикет.
Майлстоуны и итерации на доске тикетов
(Доступно в планах SaaS: FREE, PREMIUM, ULTIMATE; Self-Managed: FREE, PREMIUM, ULTIMATE) Стадия цикла DevOps: Plan
Мы улучшили доски тикетов (в русской локализации GitLab «доска обсуждений»), чтобы предоставить вам более подробную информацию о временной шкале и фазах реализации вашего проекта. Теперь, с майлстоунами и итерациями, отображаемыми на карточках тикетов, вы сможете легко отслеживать прогресс и регулировать рабочую нагрузку на ходу. Это улучшение позволит вам повысить эффективность планирования и выполнения, чтобы вы были в курсе событий и опережали график.
Документация по доске тикетов и оригинальный тикет.
Упрощённая схема файла настройки для аналитики цикла разработки
(Доступно в планах SaaS: ULTIMATE; Self-Managed: ULTIMATE) Стадия цикла DevOps: Plan
Теперь вы можете настраивать панели аналитики цикла разработки, используя упрощённую настраиваемую структуру пользовательского интерфейса на основе схемы. В этом новом формате поля можно настраивать более гибко для отображения данных и размещения информационных панелей. С новым фреймворком администраторы могут отслеживать изменения на панели с течением времени. Отслеживание истории версий позволит при необходимости откатиться к предыдущим версиям и сравнивать изменения между различными версиями панелей.
Используя эту схему настройки, люди, ответственные за принятие решений, смогут сфокусироваться на наиболее полезной для них информации, в то время как команды смогут лучше организовывать и отображать ключевые метрики DevSecOps.
Документации по настройке панелей аналитики цикла разработки и оригинальный тикет.
Интеграция секретных ключей 1Password в GitLab Duo Plugin для сред разработки JetBrains
(Доступно в планах SaaS: PREMIUM, ULTIMATE; Self-Managed: PREMIUM, ULTIMATE) Стадия цикла DevOps: Create
Теперь вы можете интегрировать управление секретными ключами 1Password с плагином GitLab Duo для JetBrains.
Разработчики могут заменить свои токены персонального доступа в настройках сред разработки JetBrains со ссылками на секретные ключи 1Password. Это упрощает управление секретными ключами и позволяет выполнять их бесшовную ротацию без обновлений вручную.
Документация по интеграции секретных ключей 1Password и оригинальный тикет.
Подписи коммитов для коммитов из пользовательского интерфейса
(Доступно в планах Self-Managed: FREE, PREMIUM, ULTIMATE) Стадия цикла DevOps: Create
Ранее коммиты, сделанные из веб-интерфейса, и автоматические коммиты, сделанные GitLab, нельзя было подписывать. Теперь вы можете настраивать ваши инстансы с автоматическим управлением для подписи таких коммитов, с указанием ключа подписи, имени подписавшего и email.
Документация по настройке подписи для автоматических и веб-коммитов и оригинальный тикет.
Запуск команд after_script
для отменённых заданий
(Доступно в планах SaaS: FREE, PREMIUM, ULTIMATE; Self-Managed: FREE, PREMIUM, ULTIMATE) Стадия цикла DevOps: Verify
Ключевое слово CI/CD after_script
используется для запуска дополнительных команд после выполнения основной секции задания — script
. Это полезно для очищения окружений или других ресурсов, которые были использованы при выполнении задания. Однако, ранее команды after_script
не запускались, если задание было отменено.
В GitLab 17.0 команды after_script
всегда будут запускаться при отмене задания. Узнать, как отключить эту опцию, можно в документации.
Документация по запуску команд after_script
для отменённых заданий и оригинальный эпик.
Диапазоны разрешённых версий для компонентов каталога CI/CD
(Доступно в планах SaaS: FREE, PREMIUM, ULTIMATE; Self-Managed: FREE, PREMIUM, ULTIMATE) Стадия цикла DevOps: Verify
При использовании каталога CI/CD вы, возможно, хотите автоматически получать последние версии компонент. Например, вы не хотите, чтобы вам приходилось постоянно просматривать все компоненты, которые вы используете, и вручную переключаться на следующую версию каждый раз, когда выходит минорное обновление или патч безопасности. Однако использовать ключевое слово ~latest
тоже может быть рискованно, так как минорные обновления могут содержать нежелательные изменения в поведении, а мажорные обновления могут внести изменения, нарушающие работу компонентов.
Начиная с этого релиза вы сможете выбирать, использовать ли последнюю мажорную или минорную версию компонента CI/CD. Например, если задать для компонента версию 2
, то вы будете получать все обновления для этой мажорной версии: 2.1.1
, 2.1.2
, 2.2.0
, и т.д., но не 3.0.0
. А если указать 2.1
, вы будете получать патчи для этой минорной версии, то есть 2.1.1
, 2.1.2
, и т.д., но не 2.2.0
.
Документация по семантическому версионированию компонентов CI/CD и оригинальный тикет.
Фильтр реестра пакетов для просмотра пакетов с ошибками
(Доступно в планах SaaS: FREE, PREMIUM, ULTIMATE; Self-Managed: FREE, PREMIUM, ULTIMATE) Стадия цикла DevOps: Package
Вы можете использовать реестр пакетов GitLab, чтобы публиковать и скачивать пакеты. Иногда пакеты не получается загрузить в реестр из-за ошибки. Ранее у вас не было возможности быстро просмотреть пакеты, которые не удалось загрузить. Из-за этого было сложно получить целостное представление о реестре пакетов вашей организации.
Теперь вы можете фильтровать пользовательский интерфейс реестра пакетов, чтобы видеть только те пакеты, которые не удалось загрузить. Это улучшение упрощает исследование и решение любых возникающих проблем.
Документация по просмотру пакетов реестра пакетов и оригинальный тикет.
Поддержка GitLab для Kubernetes в режиме FIPS
(Доступно в планах Self-Managed: FREE, PREMIUM, ULTIMATE) Стадия цикла DevOps: Deploy
Начиная с версии GitLab 17.0 вы сможете устанавливать GitLab в режиме FIPS с агентом для компонентов Kubernetes. Теперь пользователи, соблюдающие стандарт FIPS, смогут пользоваться преимуществами всех интеграций Kubernetes с GitLab.
Документация по агенту Kubernetes и оригинальный тикет.
Добавление нескольких внешних участников в тикеты службы поддержки
(Доступно в планах SaaS: FREE, PREMIUM, ULTIMATE; Self-Managed: FREE, PREMIUM, ULTIMATE) Стадия цикла DevOps: Monitor
Иногда в обработке заявки в службу поддержки участвует несколько человек, или запрашивающий хочет держать коллег в курсе состояния заявки.
Теперь вы можете иметь до 10 внешних участников без учётной записи GitLab в тикете службы поддержки и в обычных тикетах.
Внешние участники получают по email уведомления службы поддержки о каждом публичном комментарии к заявке, а их ответы будут отображаться в виде комментариев в пользовательском интерфейсе GitLab.
Для добавления или удаления внешних участников используйте быстрые действия /add_email
и remove_email
.
Вы также можете настраивать GitLab для добавления всех email-адресов из заголовка Cc
исходного email в службу поддержки.
Вы можете настроить все шаблоны email службы поддержки, используя markdown, HTML и динамические плейсхолдеры. Мы предлагаем плейсхолдер для отписки от рассылки для внешних участников, которые хотели бы больше не получать email из этой переписки.
Документация по внешним участникам тикетов службы поддержки и оригинальный эпик.
Сканирование DAST теперь поддерживает архитектуры arm64 и amd64 по умолчанию
(Доступно в планах SaaS: ULTIMATE; Self-Managed: ULTIMATE) Стадия цикла DevOps: Secure
DAST 5 теперь поддерживает архитектуры arm64 и amd64 по умолчанию. Это позволит пользователям выбирать архитектуру сервера обработчика заданий и оптимизировать затраты.
Документация по сканированию DAST и оригинальный эпик.
Поддержка сканирования зависимостей для Android
(Доступно в планах SaaS: ULTIMATE; Self-Managed: ULTIMATE) Стадия цикла DevOps: Secure
Пользователи сканирования зависимостей теперь могут сканировать проекты Android. Чтобы настроить сканирование Android, используйте компонент каталога CI/CD. Сканирование Android также поддерживается для пользователей шаблона CI/CD.
Документация по сканированию зависимостей и оригинальный эпик.
Обнаружение секретных ключей теперь поддерживает удалённые наборы правил при переопределении или отключении правил
(Доступно в планах SaaS: ULTIMATE; Self-Managed: ULTIMATE) Стадия цикла DevOps: Secure
Мы устранили ошибку обнаружения секретных ключей, которая влияла на удалённые наборы правил. Теперь можно переопределять или отключать правила с помощью удалённых наборов правил. Такие наборы предлагают масштабируемый способ настройки правил в одном месте, который можно применять в нескольких проектах.
Документация по настройке обнаружения секретных ключей и оригинальный тикет.
Автоматическое удаление непроверенных дополнительных адресов электронной почты
(Доступно в планах SaaS: FREE, PREMIUM, ULTIMATE; Self-Managed: FREE, PREMIUM, ULTIMATE) Стадия цикла DevOps: Govern
Если вы добавите дополнительный email в свой профиль пользователя и не подтвердите его, этот адрес будет автоматически удалён через три дня. Ранее такие email были зарезервированы и не могли быть разблокированы без вмешательства пользователя вручную. Это автоматическое удаление сокращает нагрузку на администратора и не позволяет пользователям резервировать адреса электронной почты, которыми они не владеют.
Документация по удалению email из профиля пользователя и оригинальный тикет.
Редактирование кастомной роли и её разрешений
(Доступно в планах SaaS: ULTIMATE; Self-Managed: ULTIMATE) Стадия цикла DevOps: Govern
Раньше вы не могли редактировать существующую кастомную роль и её разрешения. Теперь это можно делать без необходимости заново создавать роль с нужными данными.
Документация по редактированию кастомной роли и оригинальный тикет.
Улучшены настройки защиты веток для администраторов и групп
(Доступно в планах SaaS: ULTIMATE; Self-Managed: ULTIMATE) Стадия цикла DevOps: Govern
Раньше настройка параметров защиты веток по умолчанию не позволяла обеспечить тот же уровень настройки, что и настройки для защищённых веток.
В этом релизе мы обновили настройки защиты веток по умолчанию, чтобы обеспечить те же возможности, что и при работе с защищёнными ветками. За счёт этого процесс становится более гибким и простым.
Документация по настройке параметров защиты веток по умолчанию и оригинальный эпик.
Новые разрешения для кастомных ролей
(Доступно в планах SaaS: ULTIMATE; Self-Managed: ULTIMATE) Стадия цикла DevOps: Govern
Появились новые разрешения, которые можно использовать для создания кастомных ролей:
- Назначение ссылок политики безопасности
- Управление и назначение на кого-то фреймворков соответствия требованиям
- Управление веб-хуками
- Управление правилами для пушей
Используя эти кастомные разрешения, вы можете сократить количество владельцев группы, создав роль с такими же разрешениями. Кастомные роли позволяют детализировано определять роли, чтобы предоставлять пользователю только те разрешения, которые необходимы для выполнения его работы, что уменьшит ненужную эскалацию привилегий.
Документация по использованию пользовательских ролей и оригинальный тикет.
Переключение поведения для обработки сбоев во время подтверждения мерж-реквестов
(Доступно в планах SaaS: ULTIMATE; Self-Managed: ULTIMATE) Стадия цикла DevOps: Govern
Для многих организаций соблюдение требований работает по скользящей шкале, поскольку они пытаются найти баланс между выполнением требований и обеспечением скорости работы разработчиков. Политики подтверждения мерж-реквестов помогают операционализировать безопасность и соответствие требованиям в самом сердце рабочего процесса DevSecOps — в мерж-реквесте. Мы вводим новую опцию fail open
(«при сбое открыто», теперь можно выбрать его или fail closed
) для политик подтверждения мерж-реквестов. Это обеспечит гибкость командам, которые хотят облегчить переход к применению политик по мере развёртывания механизмов контроля в своей организации.
Если политика подтверждения мерж-реквеста настроена в fail open
, то он будет заблокирован в случае нарушения правила политики, только если так указано и в настройках анализатора безопасности этого проекта. Если анализатор не включён для проекта или не выдаёт результатов, политика больше не будет считать произошедшее нарушением для данного правила и анализатора. Такой подход позволяет постепенно внедрять политики по мере того, как команды работают над обеспечением правильного выполнения и применения сканирования.
Документация по настройке поведения при сбое сканирования и оригинальный эпик.
Новая фильтрация в отчёте об уязвимостях
(Доступно в планах SaaS: ULTIMATE; Self-Managed: ULTIMATE) Стадия цикла DevOps: Govern
Старая реализация фильтров отчёта об уязвимостях не была масштабируемой из-за ограничения горизонтального пространства на странице. Теперь можно использовать компонент поиска с фильтрацией, чтобы отфильтровать отчёт об уязвимостях по любой комбинации статуса, серьёзности, инструмента или активности. Это изменение позволяет нам добавлять новые фильтры, например предложенный фильтр по идентификатору.
Документация по фильтрам для отчёта об уязвимостях и оригинальный эпик.
Улучшения в пакете Linux
(Доступно в планах Self-Managed: FREE, PREMIUM, ULTIMATE) Направление: Системы
CentOS Linux 7 достигнет конца срока поддержки 30 июня 2024 года, поэтому GitLab 17.1 будет последней версией GitLab, в которой мы можем предоставлять пакеты для CentOS 7.
Документация по GitLab Omnibus.
Участники приглашённой частной группы перечислены на вкладке «Участники» основной группы
(Доступно в планах SaaS: FREE, PREMIUM, ULTIMATE; Self-Managed: FREE, PREMIUM, ULTIMATE) Направление: Хранение данных
Ранее, когда общедоступная группа или проект приглашали частную группу, эта частная группа отображалась только на вкладке «Группы» страницы «Участники», но её участники не были видны участникам общедоступной группы. Чтобы улучшить взаимодействие между участниками этих групп, мы теперь также перечисляем всех приглашённых участников группы на вкладке «Участники», включая участников из закрытых приглашённых групп. Источник членства будет скрыт от участников, у которых нет доступа к закрытой группе, и виден пользователям, у которых есть как минимум роль мейнтейнера проекта или роль владельца группы, чтобы они могли управлять участниками в своём проекте или группе. Если текущий пользователь, просматривающий вкладку «Участники», не прошёл проверку подлинности или не является участником группы или проекта, он не увидит личные данные участников группы. Мы надеемся, что это изменение позволит участникам группы и проекта с первого взгляда понять, у кого есть доступ к группе или проекту.
Документация по общему доступу к проектам и группам, тикет по отображению участников приглашенной группы на вкладке основной группы и тикет по отображению участников общих проектов и групп при использовании API участников групп.
Импорт из Bitbucket Cloud с помощью REST API
(Доступно в планах SaaS: FREE, PREMIUM, ULTIMATE; Self-Managed: FREE, PREMIUM, ULTIMATE) Стадия цикла DevOps: Manage
В этом релизе мы добавили возможность импортировать проекты Bitbucket Cloud с помощью REST API.
Это может быть лучшим решением для импорта большого количества проектов, чем импорт с помощью пользовательского интерфейса.
Документация по импорту из Bitbucket Cloud через API и оригинальный тикет.
Повторный импорт выбранного отношения проектов через API
(Доступно в планах SaaS: FREE, PREMIUM, ULTIMATE; Self-Managed: FREE, PREMIUM, ULTIMATE) Стадия цикла DevOps: Manage
При импорте проектов из файлов экспорта со множеством элементов одного типа (например, мерж-реквестов или конвейеров) иногда некоторые из этих элементов не импортировались.
В этом релизе мы добавили конечную точку API, которая повторно импортирует именованное отношение, пропуская элементы, которые уже были импортированы. Для работы API требуется:
- Архив экспорта проекта
- Тип (тикеты, мерж-реквесты, конвейеры или майлстоуны)
Документация по импорту проектов и оригинальный тикет.
Фичи управления дизайном теперь доступны командам разработчиков
(Доступно в планах SaaS: FREE, PREMIUM, ULTIMATE; Self-Managed: FREE, PREMIUM, ULTIMATE) Стадия цикла DevOps: Plan
GitLab расширяет возможности сотрудничества, обновляя права доступа. Теперь пользователи с ролью Reporter могут получить доступ к функциям управления дизайном, что позволяет командам разработчиков продуктов более активно участвовать в процессе проектирования. Это изменение упрощает рабочие процессы и ускоряет выпуск, поскольку в совместной работе может участвовать больше представителей всей вашей организации.
Документация по управлению дизайнами и оригинальный тикет.
Гости в группах могут добавлять ссылки на тикеты
(Доступно в планах SaaS: PREMIUM, ULTIMATE; Self-Managed: PREMIUM, ULTIMATE) Стадия цикла DevOps: Plan
Мы снизили требования к минимальной роли, необходимой для упоминания тикетов и задач, с Reporter до Guest, что даёт вам больше возможностей для организации работы в вашем инстансе GitLab при сохранении разрешений.
Документация по правам доступа и оригинальный эпик.
Медианное время до мержа – новая метрика на панели аналитики цикла разработки
(Доступно в планах SaaS: ULTIMATE; Self-Managed: ULTIMATE) Стадия цикла DevOps: Plan
Мы добавили новую метрику на панель аналитики цикла разработки: медианное время до мержа. В GitLab эта метрика представляет медианное время между созданием мерж-реквеста и его мержем. Эта новая метрика оценивает работоспособность DevOps, определяя эффективность и продуктивность ваших мерж-реквестов и код-ревью.
Анализируя, как эта метрика изменяется в контексте других метрик цикла разработки ПО, команды могут выявить месяцы с низкой или высокой производительностью, понять влияние новых практик DevOps на скорость разработки и процесс доставки, сократить общее время выполнения и увеличить скорость доставки программного обеспечения.
Документация по метрикам и подробным отчётам и оригинальный тикет.
Сортировка дорожной карты по дате создания, дате последнего обновления и названию
(Доступно в планах SaaS: PREMIUM, ULTIMATE; Self-Managed: PREMIUM, ULTIMATE) Стадия цикла DevOps: Plan
Мы расширили возможности сортировки эпиков, доступные в представлении «Дорожная карта» (в русской локализации GitLab «план развития»), предоставив вам больше гибкости в организации и определении приоритетов для ваших проектов. Теперь можно сортировать эпики по дате создания, дате последнего обновления и названию. Это улучшение закладывает основу для ещё более крутых возможностей сортировки, которые помогут вам в будущем более динамично управлять эпиками.
Документация по сортировке и фильтрации дорожных карт и оригинальный тикет.
Быстрый доступ к чату GitLab Duo с помощью настраиваемых горячих клавиш
(Доступно в планах SaaS: PREMIUM, ULTIMATE; Self-Managed: PREMIUM, ULTIMATE) Стадия цикла DevOps: Create
Теперь стало ещё проще открывать Duo Chat прямо из редактора от JetBrains.
Используйте сочетание клавиш по умолчанию Alt+D (или установите своё), чтобы быстро открыть чат Duo и задать вопрос. То же сочетание клавиш закрывает окно чата.
Документация по поддерживаемым средам разработки JetBrains и оригинальный тикет.
Шаблоны комментариев к проекту
(Доступно в планах SaaS: PREMIUM, ULTIMATE; Self-Managed: PREMIUM, ULTIMATE) Стадия цикла DevOps: Create
После релиза групповых шаблонов комментариев в GitLab 16.11 мы внедряем их в проекты в GitLab 17.0.
В рамках всей организации может оказаться полезным использовать один и тот же шаблонный ответ в тикетах, эпиках и мерж-реквестах. Эти ответы могут включать стандартные вопросы, на которые необходимо ответить, ответы на общие проблемы или хорошую структуру комментариев для ревью мерж-реквеста. Шаблоны комментариев на уровне проекта предоставляют вам дополнительный способ определить, где какие шаблоны доступны, предоставляя организациям больше контроля и гибкости при совместном использовании их пользователями.
Чтобы создать шаблон комментария, перейдите в любое поле комментариев в GitLab и выберите Вставить шаблон комментария > Управление шаблонами комментариев проекта (Insert comment template > Manage project comment templates). После создания шаблона комментариев он становится доступен всем участникам проекта. Во время добавления комментария выберите значок Вставить шаблон комментария – и сохранённый ответ будет применён.
Нам нравится эта версия шаблонов комментариев, и если у вас есть что сказать, напишите в тикете 45120.
Документация по шаблонам комментариев на уровне проекта и оригинальный тикет.
Стандартизированный процесс публикации компонентов каталога CI/CD
(Доступно в планах SaaS: FREE, PREMIUM, ULTIMATE; Self-Managed: FREE, PREMIUM, ULTIMATE) Стадия цикла DevOps: Verify
Мы много работаем над компонентами CI/CD, в том числе над тем, чтобы сделать процесс публикации компонентов в каталог CI/CD более последовательным. В рамках этой работы мы сделали единственным метод релиза версий из задания CI/CD с помощью ключевого слова release
и образа release-cli
. Все улучшения в процессе релиза будут применяться только к этому методу. Чтобы это ограничение ничего не сломало, убедитесь, что вы всегда используете последнюю версию образа (release-cli:latest
) или хотя бы версию выше v0.16
. Опция Релизы (Releases) в пользовательском интерфейсе теперь отключена для проектов компонентов CI/CD.
Документация по публикации нового релиза и оригинальный тикет.
Увеличение лимита авторизации агента Kubernetes
(Доступно в планах SaaS: FREE, PREMIUM, ULTIMATE; Self-Managed: FREE, PREMIUM, ULTIMATE) Стадия цикла DevOps: Deploy
С помощью агента GitLab для Kubernetes можно совместно использовать подключение одного агента с группой. Мы стремимся поддерживать одного агента в большом многопользовательском кластере. Однако вы могли столкнуться с ограничением на количество совместных подключений. До сих пор один агент мог использоваться в 100 проектах и группах, использующих CI/CD, и в 100 проектах и группах, использующих ключевое слово user_access
. В GitLab 17.0 количество проектов и групп, к которым можно предоставить общий доступ, увеличено до 500.
Если вам нужно запустить несколько агентов в кластере, мы хотели бы услышать ваши отзывы в тикете 454110.
Документация по GitLab Kubernetes Agent и оригинальный тикет.
Отслеживание мерж-реквестов с fast-forward при развёртывании
(Доступно в планах SaaS: FREE, PREMIUM, ULTIMATE; Self-Managed: FREE, PREMIUM, ULTIMATE) Стадия цикла DevOps: Deploy
В предыдущих релизах мерж-реквесты отслеживались при развёртывании, только если метод мержа в проекте был Merge commit или Merge commit with semi-linear history. Начиная с GitLab 17.0 мерж-реквесты отслеживаются при развёртывании и в проектах с методом мержа Fast-forward merge.
Документация по отслеживанию мерж-реквестов при развёртывании и оригинальный тикет.
Обновления анализатора для API тестирования безопасности
(Доступно в планах SaaS: ULTIMATE; Self-Managed: ULTIMATE) Стадия цикла DevOps: Secure
В рамках релиза 17.0 мы опубликовали следующие обновления анализатора для API тестирования безопасности:
-
Системные переменные окружения теперь передаются из обработчика заданий CI в пользовательские Python-скрипты, используемые для некоторых продвинутых сценариев (например, подписи запросов). Это упростит реализацию таких сценариев. Подробности в тикете 457795.
-
Контейнеры API Security теперь запускаются от имени непривилегированного пользователя, что повышает гибкость и улучшает соответствие требованиям. Подробности в тикете 287702.
-
Поддержка серверов, которые предлагают только шифры TLSv1.3, что позволяет большему числу клиентов использовать тестирование API Security. Подробности в тикете 441470.
-
Обновление до версии Alpine 3.19, в которой устранены уязвимости в системе безопасности. Подробности в тикете 456572.
Как было объявлено ранее, мы увеличили мажорный номер версии тестирования безопасности API до 5 in GitLab 17.0.
Документация по тестированию безопасности API и оригинальный эпик.
Сканирование зависимостей в образе Python по умолчанию
(Доступно в планах SaaS: ULTIMATE; Self-Managed: ULTIMATE) Стадия цикла DevOps: Secure
Вместо признанного устаревшим Python 3.9 в качестве образа Python по умолчанию теперь используется Python 3.11.
В уведомлении об устаревании говорилось, что целью для новой версии Python по умолчанию была версия 3.10. Прямой переход на Python 3.11 был необходим для обеспечения соответствия требованиям FIPS.
Документация по поддерживаемым языкам и пакетным менеджерам для сканирования зависимостей и оригинальный тикет.
Представляем расширенное отслеживание уязвимостей для обнаружения секретных ключей
(Доступно в планах SaaS: ULTIMATE; Self-Managed: ULTIMATE) Стадия цикла DevOps: Secure
Обнаружение секретных ключей теперь использует усовершенствованный алгоритм отслеживания уязвимостей для более точного определения случаев, когда один и тот же ключ перемещается внутри файла из-за рефакторинга или несвязанных изменений. Новое сообщение об обнаружении больше не создаётся, если:
- Утечка перемещается внутри файла
- В том же файле появляется новая утечка с тем же значением
В остальных случаях существующий рабочий процесс (виджет мерж-реквеста, отчёт конвейера и отчёт об уязвимости) будет обрабатывать найденное так же, как и раньше. Благодаря тому, что дубликаты уязвимостей не загромождают отчёт, командам легче справляться с утечками секретных ключей.
Документация по расширенному отслеживанию уязвимостей и оригинальный тикет.
Расширенное покрытие анализатора SAST для большего числа языков
(Доступно в планах SaaS: FREE, PREMIUM, ULTIMATE; Self-Managed: FREE, PREMIUM, ULTIMATE) Стадия цикла DevOps: Secure
Статическое тестирование безопасности приложений GitLab (SAST) теперь сканирует те же самые языки, используя меньшее количество анализаторов, предлагая более простой и настраиваемый процесс сканирования.
В GitLab 17.0 мы заменили анализаторы, специфичные для конкретного языка, на правила, управляемые GitLab в анализаторе на основе Semgrep для следующих языков:
- Android
- C и C++
- iOS
- Kotlin
- Node.js
- PHP
- Ruby
Как и было объявлено, мы обновили шаблон SAST CI/CD, чтобы отразить новое покрытие сканирования и удалить специфичные для конкретного языка задания анализатора, которые больше не используются.
Документация по поддерживаемым языкам и фреймворкам и оригинальный тикет.
Настройка аватаров пользователей
(Доступно в планах SaaS: FREE, PREMIUM, ULTIMATE) Стадия цикла DevOps: Govern
Теперь можно использовать API для загрузки кастомного аватара для любого типа пользователей, включая пользователей-ботов. Это может быть особенно полезно, чтобы в пользовательском интерфейсе сразу было видно, где пользователи-боты, например токены доступа к группам и проектам или сервисные аккаунты, а где пользователи-люди. Спасибо Phawin за этот вклад!
Документация по загрузке аватара пользователя и оригинальный тикет.
Идентификация сеансов, инициированных в режиме администратора
(Доступно в планах Self-Managed: FREE, PREMIUM, ULTIMATE) Стадия цикла DevOps: Govern
Когда администратор инстанса использует несколько браузеров или разные компьютеры, ему сложно определить, какие сеансы находятся в режиме администратора, а какие нет. Теперь администраторы могут перейти в Настройки пользователя > Активные сеансы (User Settings > Active Sessions), чтобы определить, какие сеансы используют режим администратора.
Спасибо Roger Meier за эту фичу!
Документация по проверке, включён ли режим администратора и оригинальный тикет.
Управление кастомными ролями на уровне инстанса с самостоятельным управлением
(Доступно в планах Self-Managed: ULTIMATE) Стадия цикла DevOps: Govern
До этого релиза в инстансах GitLab с самостоятельным управлением приходилось создавать кастомные роли на уровне группы. Это означало, что администраторы не могли централизованно управлять такими ролями для инстанса, что приводило к дублированию ролей во всем инстансе. Теперь пользовательские роли управляются на уровне инстанса. Создавать эти роли могут только администраторы, но назначать их – как администраторы, так и владельцы групп.
Дополнительную информацию о переносе существующих пользовательских ролей, конечных точек API и рабочих процессов смотрите в эпике 11851.
Это обновление не влияет на рабочие процессы с кастомными ролями на GitLab.com.
Документация по использованию кастомных ролей и оригинальный эпик.
Дополнительная настройка для комментариев от бота политики
(Доступно в планах SaaS: ULTIMATE; Self-Managed: ULTIMATE) Стадия цикла DevOps: Govern
Бот политики безопасности публикует комментарий к мерж-реквестам, нарушающим политику. Это помогает пользователям понять, когда политики применяются в их проекте, когда завершается оценка, и если есть какие-либо нарушения, блокирующие мерж-реквест, даёт указания по их устранению. Теперь эти комментарии не обязательны и могут быть включены или отключены в рамках каждой политики. Это даёт организациям гибкость и возможность определять, как они хотят донести информацию об этих политиках до своих пользователей.
Документация по настройке комментариев от бота безопасности и оригинальный тикет.
Улучшения пользовательского интерфейса для кастомных ролей
(Доступно в планах SaaS: ULTIMATE; Self-Managed: ULTIMATE) Стадия цикла DevOps: Govern
Пользовательский интерфейс для кастомных ролей стал лучше:
- При создании новой кастомной роли открывается новая страница
- Улучшен дизайн таблицы кастомных ролей
- Улучшен дизайн диалогового окна удаления кастомной роли
- Добавлена предварительная проверка разрешений базовой роли
Документация по использованию кастомных ролей и оригинальный эпик.
Улучшения чартов GitLab
(Доступно в планах Self-Managed: FREE, PREMIUM, ULTIMATE) Направление: Системы
GitLab Operator теперь доступен для использования в продакшене для гибридных облачных установок. Перед внедрением GitLab Operator ознакомьтесь с документацией по установке.
Удалена поддержка резервного копирования образов BusyBox при указании кастомных значений BusyBox (global.busybox
). Поддержка контейнеров инициализации на основе BusyBox была заменена в GitLab 16.2 (Helm chart 7.2) на общий образ инициализации на основе GitLab.
Поддержка gitlab.kas.privateApi.tls.enabled
и gitlab.kas.privateApi.tls.secretName
также удалена. Вместо них вы должны использовать global.kas.tls.enabled
и global.kas.tls.secretName
.
Устаревшие опции queue selector
и negate
удалены из таблицы Sidekiq.
В бета-версии доступен режим работы с двумя базами данных
(Доступно в планах Self-Managed: FREE, PREMIUM, ULTIMATE) Направление: Хранение данных
В настоящее время большинство клиентов с самостоятельным управлением используют только одну базу данных. Чтобы обеспечить одинаковые настройки между GitLab.com и self-managed, мы просим клиентов self-managed мигрировать и запускать декомпозированный режим по умолчанию. В версии 16.0 два соединения с базой данных стали использоваться по умолчанию для установок с самостоятельным управлением. В 17.0 мы прекращаем поддержку одиночных подключений к базам данных в self-managed, но продолжим поддерживать одиночные базы данных с двумя подключениями до 19.0. В 17.0 мы выпускаем режим двух баз данных в виде ограниченной бета-версии, с целью сделать декомпозированный режим общедоступным к 19.0. Миграция остаётся необязательной в 17.0, но должна быть выполнена перед обновлением до 19.0.
Миграция требует простоя. Клиенты с самостоятельным управлением могут использовать инструмент, который выполняет эту миграцию с некоторым простоем. Мы представили новую команду gitlab-ctl, которая позволяет вам обновить инстансы GitLab с одной базой данных до декомпозированной конфигурации. Эта установка содержит команды, которые будут работать с нашим пакетом Linux. Фактическая миграция (копирование базы данных) является частью задачи rake в проекте GitLab.
Документация по миграции баз данных и оригинальный тикет.
Полный текст релиза и инструкции по обновлению и установке вы можете найти в оригинальном англоязычном посте GitLab 17.0 released with generally available CI/CD Catalog and AI Impact analytics dashboard.
Над переводом с английского работали maryartkey, ainoneko и rishavant.
Lazytech
Похоже, дубль: https://habr.com/ru/articles/821225/
rsashka
Причем не единственный :-)
https://habr.com/ru/articles/821221/
https://habr.com/ru/articles/821223/
https://habr.com/ru/articles/821225/
Хотя это может глючит новый редактор или весь Хабр заболел :-(
Lazytech
Подозреваю, что просто интернет "моргнул" при отправке. Сам сталкивался (правда, на других сайтах).
rsashka
При открытии этих публикаций у меня меня проскакивало какое-то сообщение об ошибке на сайте, но очень быстро скрывалось и странице перерисовывалась скриптом движка. Поэтому, вряд ли тут дело в интернете, скорее всего что-то с кодом сайта или редактора перемудрили.
deepblack
Интересно что ID записей нечетные,
при этом если попробовать зайти на четные то хабр отвечает:
"Страница устарела, была удалена или не существовала вовсе"
tukreb
Меня всегда удивляли, почему нет никакой защиты у практически любого сайта со статьями? Тот же обычный хэш статей хранить и сравнивать, есть ли повтор. Да, у того же md5 может быть коллизия, но можно проверять хотя бы за последний час.
Либо сделать элементарную проверку через JavaScript блокирующий нажатие кнопки много раз. Эх сразу видно, программисты не работали с Arduino или другими устройствами, где есть физическая кнопка и нужно правильно обрабатывать импульс его нажатия, чтобы не было многократных срабатываний.
rsashka
Так может это и отрабатывает какая-то другая проверка для защиты, но чего-то другого :-)
Lazytech
Возможно, подобные ситуации возникают недостаточно часто для того, чтобы заморачиваться.
Согласен, в простейшем случае достаточно отключать кнопку (sendButton.disabled = true) после первого нажатия. Хотя в суровой действительности такой подход может создать дополнительные проблемы.
P.S. Нашел статью на эту тему: Don't disable buttons
artptr86
Ну так-то это немного о другом статья, а именно, что disabled = true делает кнопку невидимой для скринридеров. Но никто не запрещает поменять ей стиль, а в обработчике делать проверку на `isSending`. А ещё, как вариант, можно было бы генерировать случайный токен, которым затем проверять запросы на дублирование. Это даже лучше в случае с микросервисами.
artptr86
Вы хотите, чтобы на техническом портале обеспечили идемпотентность запросов? Да ну, бред какой-то :)