Skip to content

Конвейеры развёртывания ​

Конвейер продвигает готовые объекты между пространствами по цепочке Разработка → Тест → Прод. Источник, датасет, виджет и дашборд копируются из одного пространства в следующее вместе со своими зависимостями, а подключения к базам по дороге подменяются на те, что положены принимающему пространству: тестовый отчёт смотрит в тестовую базу, рабочий — в рабочую.

Так отчётность переносят между контурами, не собирая её заново в каждом пространстве.

Раздел открывается из меню слева вверху, рядом с логотипом, — пункт Конвейеры развёртывания. Пункта нет, если у вас нет ни одного общего пространства: сначала попросите завести их — это делают участники группы «Менеджеры рабочих пространств», см. Пространства.

Список конвейеров: карточка с тремя стадиями

Что нужно, чтобы собрать конвейер ​

Три общих пространства — по одному на стадию, и в каждом из них у вас должна быть роль Администратор. Личное пространство к стадии не привязывается: попытка отвечает «К стадии можно привязать только командное пространство» — «командным» платформа называет в сообщениях тот же тип, который в списке пространств подписан Общее.

Одно пространство участвует не более чем в одном конвейере. Если пространство уже стоит в чьей-то стадии, платформа откажет: «Пространство уже участвует в другом пайплайне».

Пространства заводит менеджер рабочих пространств

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

Создать конвейер ​

  1. Нажмите Создать конвейер.
  2. Укажите Название и, если нужно, Описание.
  3. Нажмите Создать.

Конвейер заводится сразу с тремя пустыми стадиями — Разработка, Тест и Прод. Пространства к ним привязываются потом, названия стадий не меняются.

После создания вы остаётесь в списке: новая карточка помечена Не настроен, пока не привязано ни одной стадии, и Привязано N из 3, пока привязаны не все. Щёлкните по названию, чтобы открыть конвейер.

На странице конвейера в каждой колонке нажмите кнопку с плюсом и выберите пространство — список можно отфильтровать полем Поиск пространства. В нём только свободные командные пространства, где вы администратор; если список пуст, платформа так и пишет: «Нет свободного командного пространства, где вы администратор». Меню ⋯ у привязанной стадии позволяет Сменить пространство или Отвязать его.

Привязанное пространство не удаляется

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

Отвязка стадии разрывает связь копий

Объекты и правила подмены остаются на месте, а вот память о том, какая копия кому соответствует, стирается. Если вернуть то же пространство обратно, платформа перестанет узнавать прежние копии: они станут показываться как Только здесь, а исходные объекты — снова как Новые, и следующее развёртывание создаст в стадии вторые экземпляры вместо обновления прежних. Отвязывайте стадию, только когда пространство выводится из конвейера насовсем.

Доска стадий ​

Страница конвейера показывает три колонки — по стадии в каждой. Внутри колонки объекты сгруппированы по видам в том порядке, в котором их применяет развёртывание: источники, датасеты, виджеты, дашборды.

Колонка собирается из сравнения соседних стадий, поэтому состав виден, когда рядом есть привязанная стадия. У первых двух это следующая за ними: пока она пуста, вместо списка стоит подсказка «Состав стадии виден через сравнение с соседней». У последней стадии соседняя — предыдущая: её содержимое видно, но без плашек сравнения, а в подвале написано «Последняя стадия — развёртывать дальше некуда».

Доска конвейера: три стадии, статусы объектов и кнопка «Развернуть»

Плашка рядом с объектом говорит, чем стадия отличается от следующей за ней:

ПлашкаЧто означает
НовыйКопии в следующей стадии ещё нет — развёртывание её создаст
ИзменёнОбъект правили после последнего развёртывания
Без измененийС последнего развёртывания объект не менялся
Только здесьИз предыдущей стадии объект не приезжал: его завели в этой стадии сами

Сравнение идёт по времени правки, а не по содержимому

Объект, сохранённый без единого изменения, тоже станет Изменён. У источников эта плашка появляется сразу после развёртывания: платформа отмечает оригинал как изменённый в тот же момент, когда создаёт копию. Ориентируйтесь на то, правили вы объект или нет, а не на цвет плашки.

Развернуть объекты в следующую стадию ​

Развёртывание идёт только вперёд и только на один шаг: из «Разработки» в «Тест», из «Теста» в «Прод». Перепрыгнуть через стадию нельзя.

  1. В колонке-источнике отметьте объекты. Ссылка все над группой отмечает вид целиком. Сколько выбрано, показывают подвал колонки и счётчик рядом с кнопкой Развернуть.
  2. Нажмите Развернуть — круглую кнопку между колонками. Таких кнопок две: между «Разработкой» и «Тестом» и между «Тестом» и «Продом»; нажимайте ту, что справа от колонки-источника.
  3. Проверьте состав в окне и нажмите Развернуть.

Окно развёртывания: состав пачки и что останется как есть

Зависимости добавляются сами: с виджетом переносится его датасет, с датасетом — его источники. Отмечать их отдельно не нужно.

Повторное развёртывание того же объекта обновляет копию, а не создаёт вторую: связь оригинала и копии платформа помнит сама. В отчёте после развёртывания у каждого объекта написано, что с ним произошло — «создан» или «обновлён».

Развёртывание идёт одной транзакцией: если хотя бы один объект перенести не удалось, не переносится ничего, и окно сообщает «Ничего не развёрнуто».

Если в принимающей стадии уже есть объект с таким же именем, но не связанный с вашим, платформа предупреждает об этом строкой «В целевой стадии уже есть объект с именем „…“» и всё равно создаёт копию: в стадии окажутся два объекта с одним названием.

Что развёртывание не переносит:

  • подключение источника — без правила подмены копия сохраняет подключение исходной стадии, о чём отчёт предупреждает отдельной строкой;
  • данные извлечения — материализованному датасету в принимающей стадии нужен первый прогон синхронизации;
  • права — в принимающей стадии они настраиваются заново, см. Управление доступом;
  • расписание обновления датасета — его задают в копии отдельно, см. Синхронизация и ETL.

Подменить подключение на стадии ​

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

  1. В меню ⋯ нужной стадии выберите Подключения источников.
  2. Слева выберите источник. Метка рядом показывает, что задано сейчас: правило или как в «Разработка».
  3. Заполните параметры подключения — хост, порт, базу, учётные данные, при необходимости SSL, SSH-туннель и Initial SQL. Порт подставляется по типу источника.
  4. Нажмите Проверить подключение, затем Сохранить правило.

Кнопок «Проверить подключение» в окне две — нажимайте нижнюю

В текущей версии работает только та, что стоит рядом с Сохранить правило: при успехе она отвечает сообщением «Подключение успешно», при отказе — текстом ошибки под формой. Верхняя кнопка, сразу под полями подключения, не делает ничего.

Окно подключений стадии: источники слева, параметры подключения справа

Слева перечислены источники предыдущей стадии — те, копии которых сюда попадут. У первой стадии предыдущей нет, поэтому подменять там нечего. Файловому источнику правило не нужно: файл копируется вместе с источником.

Кнопка Удалить правило возвращает источник к подключению исходной стадии: платформа спрашивает подтверждение, после него метка источника снова читается «как в „<имя стадии>“». Правила, чей источник уже удалён, собраны отдельным списком Правила без источника — их можно убрать кнопкой Удалить рядом с каждым.

Кто что может ​

ДействиеЧто требуется
Видеть конвейерЛюбая роль в любой привязанной стадии либо авторство конвейера
Создать конвейерЛюбая учётная запись
Переименовать и удалить конвейер, привязать стадиюРоль «Администратор» во всех привязанных стадиях
Развернуть в стадию«Администратор» в принимающей стадии и любая роль в исходной
Править правила подмены«Администратор» в стадии, где заводится правило

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

Кнопка Развернуть неактивна, пока чего-то не хватает, и подсказка называет чего: «Обе стадии должны быть привязаны к пространствам», «Нужны права администратора в целевом пространстве», «Выберите объекты в левой колонке». Запрос в обход интерфейса отвечает «Доступ запрещён».

Ограничения текущей версии ​

Иерархия на вычисляемом поле ломает развёртывание

Если хотя бы один уровень иерархии построен на вычисляемом поле датасета, окно отвечает «Ничего не развёрнуто: Внутренняя ошибка сервера», и не переносится вся пачка целиком. Иерархии из обычных полей таблицы переносятся штатно.

Обход: уберите такой уровень из иерархии, разверните датасет, а в копии соберите иерархию заново — Иерархии, фильтры и параметры.

Кроме этого:

  • конвейер не удаляется — кнопка Удалить отвечает «Внутренняя ошибка сервера», конвейер остаётся на месте. Ненужный конвейер можно отвязать от пространств: без привязок он ничего не держит;
  • отката нет — вернуть копию к прежней версии нельзя, история копий не хранится;
  • объект переносится целиком — доставить часть полей датасета или один виджет из дашборда не получится;
  • стадии всегда три, их состав и названия не настраиваются.

Настройка запросами к API ​

Всё то же делается запросами — это удобно, когда развёртывание встроено в чужой процесс. Токен берётся обычным входом, см. Работа через REST API; $API — адрес установки с /api на конце.

Стадии в запросах адресуются порядковым номером: 0 — Разработка, 1 — Тест, 2 — Прод. Сравнивать и разворачивать можно только соседние: compare?from=2 и deploy с from_stage: 2 отвечают отказом, потому что после последней стадии ничего нет.

bash
# создать конвейер: в ответе сразу три стадии
curl -s -X POST -H "Authorization: Bearer $T" -H "Content-Type: application/json" \
  -d '{"name":"Продажи","description":"отчётность отдела продаж"}' "$API/pipeline"

# привязать пространство к стадии — по её порядковому номеру, не по идентификатору
curl -s -X PUT -H "Authorization: Bearer $T" -H "Content-Type: application/json" \
  -d '{"workspace_id":5}' "$API/pipeline/1/stage/0"

# что изменилось между стадией и следующей за ней
curl -s -H "Authorization: Bearer $T" "$API/pipeline/1/compare?from=0"

# развернуть выбранное в следующую стадию
curl -s -X POST -H "Authorization: Bearer $T" -H "Content-Type: application/json" \
  -d '{"from_stage":0,"objects":[{"type":"dataset","id":1413}]}' "$API/pipeline/1/deploy"

Типы объектов в теле: data_source, dataset, widget, dashboard. В ответе compare у каждого объекта поле status — new, changed, same или target_only, в ответе deploy поле action — created или updated.

Пустой список объектов разворачивает стадию целиком

"objects": [] в теле deploy означает «взять всё, что есть в исходной стадии», а не «ничего не делать». Перечисляйте объекты явно.

Правила подмены лежат по адресу $API/pipeline/{id}/stage/{order}/data-source-rule: GET возвращает источники предыдущей стадии вместе с уже заведёнными правилами, PUT создаёт или меняет правило, DELETE с идентификатором правила — удаляет. В теле PUT поле source_uuid — код источника из ответа GET, и settings того же состава, что у источника этого типа, см. Источники данных.

Конвейер и перенос объектов — разные инструменты

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

Что дальше ​