Эта статья - перевод релизной статьи компании GitLab. Релизы выходят каждый месяц 22 числа.

Если вы пропустили предыдущие, вот ссылки: 8.10, 8.9, 8.8


В новом GitLab 8.11 столько всего интересного, что мы с трудом сдерживаем себя в рамках конструктивного повествования!

Итак, в новой версии появились:

MVP этого месяца — Clement Ho. Спасибо ему за мерж-реквесты и отзывчивость в работе над задачами.

Доска тикетов (Issue Board)

Тикеты (issues) в GitLab — очень гибкий инструмент. Они могут содержать ссылки друг на друга, можно обозначить их приоритеты, можно отсортировать по популярности. Доска тикетов добавляет новый способ работы с ними.

Теперь можно настраивать рабочие процессы (workflows) и быстро получать информацию о состоянии тикетов. Всё это доступно на простой и приятной глазу доске, похожей на те, что используются в Канбане или Скраме.

Доска тикетов в GitLab 8.11

Доска создается для каждого проекта автоматически. По умолчанию все открытые тикеты формируют список-бэклог (Backlog), а все закрытые появляются в списке завершённых (Done list).

Добавляя новые списки, вы создаёте новые рабочие процессы. Принадлежность тикета к списку определяется меткой. При добавлении тикета в список к ней добавляется соответствующая метка, при удалении из списка — метка удаляется.

Если у вас раньше были метки вроде фронтенд, бэкенд и дизайн — самое время сделать из них списки. Тикеты появятся в них автоматически. И, конечно, тикет может принадлежать более чем одному списку.

Если хотите посмотреть на эту фичу в действии, загляните на доску GitLab CE версии 8.12.

Документация по доскам тикетов

Разрешение конфликтов при мерже

Мержи в крупных и активно разрабатываемых проектах обычно вызывают много проблем. Мы хотим, чтобы у вас был встроенный инструмент для разрешения конфликтов. Поэтому теперь можно это делать прямо в интерфейсе GitLab.

Разрешение конфликтов при мерже в GitLab 8.11

Когда мерж блокируется конфликтом, можно просто нажать кнопку “Resolve these conflicts” и перейти в интерфейс разрешения. Там можно выбрать нужные строки и закоммитить полученный результат.

Разумеется, так получится разрешить далеко не все конфликты. Но мы надеемся, что в большинстве случаев этот инструмент поможет вам ускорить прохождение мерж-реквестов.

Документация по разрешению конфликтов

Разрешения на работу с ветками для конкретных пользователей (только EE)

Теперь в Enterprise Edition можно настраивать разрешения на пуш или мерж в ветку не только для подгрупп пользователей (как developers или owners), но и для конкретных пользователей.

Новые настройки можно совмещать с другой функциональностью, в том числе с разрешениями для подгрупп. Например, можно разрешить пушить непосредственно в ветку только тимлидам Пете и Маше, но подтверждать мерж-реквесты в эту ветку — всем членам группы уровня developer и выше.

Разрешения на работу с ветками в GitLab 8.11

Для каждого действия (пуш и мерж) можно настроить любое количество авторизованных пользователей.

Документация по разрешениям на работу с ветками

«Закрытие» комментариев в мерж-реквестах.

В мерж-реквестах бывают длинные ветки комментариев, в которых можно запутаться. Но каждый из них важен.

Мы добавили возможность отметить комментарий или целую ветку как обработанную и закрыть её.

Закрытие обсуждений в GitLab 8.11

В мерж-реквестах теперь также есть счётчик незакрытых обсуждений и удобная кнопка перехода к к следующему открытому обсуждению.

Переход к следующему открытому обсуждению в GitLab 8.11

Документация по закрытию обсуждений в мерж-реквестах

Схемы конвейеров.

Конвейеры в GitLab могут иметь достаточно сложную структуру с множеством последовательных и параллельных сборок. Теперь можно посмотреть на схему конкретного конвейера, отображающую его строение и состояние. Такая схема наглядно показывает происходящие в нём процессы.

Схемы конвейеров в GitLab 8.11

Просто кликните на конвейере на странице мерж-реквеста или в списке конвейеров. Вы увидите схему этого конвейера с отображением выполненных, проваленных, активных и ожидающих сборок.

Шаблоны тикетов и мерж-реквестов.

Возможность стандартизировать тикеты и мерж-реквесты с помощью шаблонов уже была в GitLab Enterprise Edition. Начиная с GitLab 8.11 шаблонов может быть много — например, один для ошибок, а другой для предложений. А сама возможность есть во всех версиях: GitLab.com, GitLab CE/EE.

Шаблоны пишутся в разметке Markdown и лежат в вашем репозитории соответственно в папках .gitlab/issue_templates и .gitlab/merge_request_templates:

Шаблоны тикетов и мерж-реквестов в GitLab 8.11

Цель этой фичи — улучшить внешний вид и полноту предложений, сообщений об ошибках и мерж-реквестов.

Документация по шаблонам

Слеш-команды

Теперь в GitLab есть слеш-команды (/command) — так же, как в IRC, HipChat, Mattermost или Slack. Они позволяют менять метки, назначать исполнителей, подписываться и отписываться от тикетов и делать многое другое — быстро и не отрывая рук от клавиатуры. Команды работают в описании тикета или мерж-реквеста, а также в комментариях.

Как ими пользоваться:

  1. Вы вводите текст, содержащий команду (с клавиатуры, из шаблона, через API, как угодно).
  2. Подтверждаете отправку комментария, сохранение тикета или реквеста.
  3. Команды выполняются и больше не показываются в тексте. Если комментарий состоял только из команд, он будет выполнен, но не опубликован.

Слеш-команды в комментариях в GitLab 8.11

Можно использовать слеш-команды даже при создании нового тикета или реквеста:

Слеш-команды при создании тикета в GitLab 8.11

Если последовательно указать несколько команд, то все они будут выполнены.

Несколько идей, как можно использовать слеш-команды:

  • В письме в ответ на оповещение из тикета или мерж-реквеста (текст письма становится комментарием).
  • В шаблоне тикета или мерж-реквеста.
  • Через notes API.

Мы сами с нетерпением ждём ваших рассказов о том, какие ещё способы использования вы изобретёте.

Документация по слеш-командам

Интеграция с Koding

Koding позволяет запускать среду разработки в облаке, использовать единые настройки этой среды для всей команды и даже использовать локальный редактор. Благодаря этому не нужно тратить время на установку и настройку стека для каждого нового компьютера и при любом изменении.

Начиная с версии 8.11 GitLab поддерживает интеграцию с Koding. Теперь одним нажатием кнопки можно выкачать проект целиком или отдельный мерж-реквест и открыть его в полноценной облачной IDE. (обратите внимание, что на GitLab.com интеграция с Koding пока не добавлена).

Включите поддержку Koding в Admin > Application settings

Koding, an integrated IDE in GitLab 8.11

Настройте Koding для работы с вашим проектом:

Koding, an integrated IDE in GitLab 8.11

Koding, an integrated IDE in GitLab 8.11

И все! Теперь вы можете быстро выкачать любой мерж-реквест, ветку и коммит проекта в полноценную IDE.

Koding, an integrated IDE in GitLab 8.11

Мы подготовили небольшое видео, показывающее процесс работы связки Koding + GitLab:

Для того, чтобы узнать больше о Koding в GitLab, обратитесь к нашей документации.

Конвейеры в мерж-реквестах

Теперь конвейеры отображаются в мерж-реквестах:

Pipelines in merge requests in GitLab 8.11

Нажмите на конвейер, чтобы увидеть его схему и билды, относящиеся к нему.

Отображение статуса развертывания для мерж-реквестов

Теперь вы можете указывать URL для своих сред развертывания (environments):

Set the URL of any environment in GitLab 8.11

Благодаря этому GitLab показывает статус развертывания для мерж-реквестов в случаях, когда развертывание происходит автоматически при мерже:

See deploy status in merge request in GitLab 8.11

После успешного мержа GitLab покажет вам ссылку на среду развертывания, что позволяет увидеть результат мерж-реквеста в один клик.

Веб-хуки для конвейеров (pipelines)

Для упрощения интеграции с конвейерами GitLab мы добавили веб-хуки для них. Они срабатывают при создании, запуске или завершении работы конвейера.

Для того, чтобы добавить веб-хук, выберите Webhooks в меню Settings вашего проекта.

Подсветка и скрытие кода

Теперь редактор GitLab поддерживает подсветку и позволяет скрывать блоки кода.

Code highlighting in GitLab 8.11

Ссылки на мерж-реквесты при пуше

Теперь при пуше на GitLab появляются ссылки на создание мерж-реквеста, а также на все мерж-реквесты, имеющие отношение к текущему.

Merge request links when pushing in GitLab 8.11

Значок покрытия тестами (test coverage)

Появилась возможность создавать значки, показывающие покрытие тестами вашего проекта:

Coverage Badge in GitLab 8.11

Если вы не использовали отображение покрытия в GitLab, подключите его в настройках конвейеров: pipelines/settings.

Документация по значкам покрытия тестами

Временные ограничения на доступ к проекту

При выдаче доступа к проекту одиночному пользователю, либо группе, теперь можно установить определенную дату, после которой доступ к проекту будет для них закрыт.

Это упрощает работу с правами доступа для временных членов команды.

Перемещение проектов между шардами (только EE)

В GitLab 8.10 были добавлены множественные точки монтирования (mount points).

В GitLab 8.11 появилась возможность перемещать проекты между шардами (shards) при помощи команды rake. Эта функциональность не предполагается для частого использования, однако она может оказаться полезной в случаях, когда вы хотите протестировать новый шард или переместить часто используемый проект на хранилище с быстрым доступом.

Улучшения производительности

В данном релизе был введен ряд изменений направленных на повышение производительности - мерж-реквесты и их диффы стали еще быстрее! Ниже приведены графики, показывающие разницу в производительности после развертывания GitLab 8.11 RC2 на GitLab.com (падение в производительности попадает на развертывание).

Время загрузки диффов для мерж-реквестов:

Performance improvements in GitLab 8.11

Количество выполненных SQL-запросов при отображении диффов:

Performance improvements in GitLab 8.11

Время, потраченное на выполнение SQL-запросов при отображении диффов:

Performance improvements in GitLab 8.11

Также значительно повысилась производительность конвейеров:

Performance improvements in GitLab 8.11

Ниже приведен детальный список проведенных улучшений и соответствующих мерж-реквестов:

Улучшения

  • Улучшен процесс проверки на возможность пользователю просматривать несколько тикетов: !5370
  • Улучшена процесс проверки максимального уровня доступа пользователя: !5412
  • Уменьшено количество SQL-запросов для отображения CI графиков: !5502
  • Добавлены улучшения для работы GitLab’а с Git, направленные на уменьшение количества используемых команд и более быструю сортировку номеров версий: !5536, !5375
  • Информация об авторах коммитов теперь кешируется для каждой Sidekiq-транзакции во избежание дополнительных выборок: !5537
  • Уменьшено количество запросов, используемых для отображения диффов мерж-реквестов: !5551
  • Улучшена итерация по наборам диффов: !5564
  • Повышена производительность методов, зависящих исключительно от статистики диффов: !5568
  • Повышена производительность создания диффов путем удаления излишних проверок на текстовые блобы: !5575
  • Удалены ненужные вызовы методов при создании диффов: !5591
  • Улучшена проверка на активность diff note: !5597
  • Улучшен процесс создания ссылок на трекер тикетов: !5608
  • Повышена производительность парсинга ссылок в документах Markdown: !5629
  • Повышена производительность синтаксической подсветки блоков кода в документах Markdown: !5643
  • Улучшен процесс генерации ключей кеша для документов Markdown: !5715
  • Улучшен процесс сортировки тегов Git: !5723
  • Удалены триграммные индексы для таблицы ci_runners (только для PostgreSQL): !5755
  • Удалены выборки коммитов в DiffHelper: !5756
  • Удалены 45 избыточных индексов для баз данных: !5759
  • Обратно добавлено кеширование todo-счетчиков: !5789
  • Уменьшено количество проектов, используемых в запросах на получение списка todo: !5791
  • Более не отображаются SVG-изображения размером более 2 мегабайт, благодаря чему уменьшено время загрузки и использование памяти: !5794
  • Решена проблема с утечкой памяти в sanitization-фильтре Markdown: !5808
  • Изменено отображение выпадающего меню, показывающего список проектов, в которые можно переместить тикет - теперь используется постраничный вывод вместо отображения полного списка: !5828, !5686
  • Удалены вызовы методов, ответственных за поиск ненужных блобов Git: !5848
  • Добавлена асинхронная загрузка выпадающих меню для веток в диалогах cherry pick и revert: !5607
  • Улучшены запросы, используемые для отметки todo как завершенных: !5832
  • Проведен апдейт gitlab_git до версии 10.4.7 для использования улучшений, появившихся в этой версии библиотеки: !5851
  • Улучшены проверки доступа Git в Enterprise Edition: !647
  • Удален ненужный индекс таблицы geo_nodes: !639
  • Ace Editor теперь загружается только по необходимости, что уменьшает размер используемого JavaScript почти на 100 килобайт: !4914

Новые фичи

  • Sidekiq теперь кеширует некоторые объекты транзакций. Эта опция включена по умолчанию, ее можно отключить через переменную окружения: !5054
  • Теперь GitLab может использовать ruby-prof при обработке запросов, сохраняя данные профилировки на диск для дальнейшего просмотра. Для использования этой фичи нужно определить токен в заголовке: !5281
  • Добавлена возможность отслеживания кастомных событий с помощью GitLab Performance Monitoring. Например, количество пушей, форков проектов и т. д.: !5830

Инструментирование

  • Проведено инструментирование Nokogiri: !5470
  • Уменьшена ненужная нагрузка на инструментирование вызовов методов: !5550
  • Проведено инструментирование класса Repository: !5621
  • Проведено инструментирование Gitlab::Highlight: !5644
  • Проведено повторное интсрументирование Project.visible_to_user: !5793

GitLab Mattermost 3.3

GitLab 8.11 поставляется с Mattermost 3.3, открытым аналогом Slack.

В Mattermost 3.3 добавлены локализации на китайский, корейский и голландский языки, бот на Go, возможность помечать (flag) посты, упоминания вида @here и многое другое.

Кроме того, в этоу версию Mattermost вошли несколько security updates, поэтому мы настоятельно рекомендуем обновиться на нее.

Поддержка Redis Sentinel

В GitLab теперь еть экспериментальная поддержка Redis Sentinel.

Все подробности в документации

Прочие изменения

Этот релиз включает в себя и многие другие улучшения, включая различные security fixes. Полный список изменений доступен в Changelog.

Upgrade-барометр

Обновление до GitLab 8.11 потребует даунтайма из-за миграций баз данных

Даунтайм для сайта GitLab.com (самый крупный из известных нам инстансов GitLab) составил 15-30 минут. В зависимости от количества данных на вашем инстансе ваш даунтайм может быть меньше.

Одна из миграций удаляет несколько столбцов в нескольких таблицах (и инстанс GitLab нужно свернуть, чтобы эти данные не пропали в процессе доступа к ним).

Две другие миграции создают новые таблицы и наполняют их информацией на основе уже существующих в системе данных: в этом случае даунтайм нужен, чтобы добавляемые данные не поменялись в процессе работы миграции (и оставались неизменными, пока развертывание 8.11 не завершено полностью).

Наконец, еще одна миграция добавляет два внешних ключа (foreign keys), и здесь даунтайм нужен для гарантии отсутствия одновременного доступа к изменяемым данным.

Устаревание (deprecation) Ruby 2.1

С этим релизом мы обновили Ruby до версии 2.3.

Для ручных установок мы настоятельно рекомендуем вам обновить Ruby до 2.3. Установки GitLab, сделанные через Omnibus, автоматически будут использовать Ruby 2.3.

Поддержка Ruby 2.1 и 2.2 будет полностью прекращена в GitLab версии 8.13.

Для тех, кто обновился раньше остальных

Если вы обновились до 8.11 сразу после релиза и в процессе reconfigure получили ошибку undefined method merge! for nil:NilClass, то скачайте более новый пакет с младшей версией .1: 8.11.0-ce.1.

Просто запустите apt-get update and apt-get install gitlab-ce / apt-get install gitlab-ee, и всё должно починиться само.

Форсированная двухфакторная аутентификация при использоваии GitLab API и Git поверх HTTP

Если у вас включена двухфакторная аутентификация и вы пытаетесь получить API-токен через метод /sessions или Resource Owner Password Credentials flow provided в OAuth2, то вы не сможете залогиниться. Для успешного логина в этих случаях вам нужно будет использовать Personal Access Token.

Подробнее о personal access tokens

Реиндексирование Elasticsearch (только для EE)

Мы изменили структуру индексов Elasticsearch и теперь они используют взаимоотношения типа «родитель-ребенок». Это повышает производительность, но требует полной перестройки всех индексов Elasticsearch. После обновления до 8.11 вам надо будет вручную удалить старые индексы и построить новые.

Для удаления старых индексов сделайте вот такой запрос к Elasticsearch:

curl -XDELETE 'http://localhost:9200/_all/'

Для перестройки индексов выполните действия описанные в документации по интеграции с Elasticsearch

Внимание Описанное выше применимо только если вы обновляетесь с предыдущей версии (8.10). Если вы обновляетесь с более ранних версий, проверьте разделы «Upgrade-барометр» для всех промежуточных версий.

Если вы обновляетесь с версии GitLab, меньшей, чем 8.0 и при этом у вас включен CI, вам нужно сначала обновиться до 8.0.

По умолчанию в процессе обновления все пакеты Omnibus будут остановлены, потом будут прогнаны все их миграции, и только потом они будут запущены снова. Это поведение не зависит от «размера» обновления. Изменить это поведение можно, создав файл /etc/gitlab/skip-auto-migrations.

Установка

Если вы устанавливаете GitLab с «нуля», прочитайте соответствующий раздел: https://about.gitlab.com/installation/

Обновление

Инструкции по обновлению: https://about.gitlab.com/update/

Enterprise Edition

GitLab Enterprise Edition включает в себя дополнительные функции типа поддержки LDAP-групп. Подробную информацию можно посмотреть в описании GitLab EE.

GitLab EE доступен только по подписке, подробности и цены можно посмотреть вот тут.

Не хватает времени на установку и настройку нового инструмента? В стоимость подписки входят услуги по установке и обновлению GitLab на ваших серверах.

P.S. Если будете обновляться, обновляйтесь сразу на 8.11.2

P.P.S. Над переводом работали @chebureque, @nick_volynkin и @sgnl_0