Ловушки, которые стоят дорого
Здесь собрано то, на чём спотыкаются по-настоящему. Не то, что кажется сложным — сложное люди читают внимательно. Дорого стоит как раз то, что выглядит безобидно.
#gated: true не значит «собери и подожди»

Название обманывает. Кажется, что это «сделай всё, но не выпускай до подтверждения».
На самом деле для окружения с gated: true сервис не создаёт ничего: ни файла настроек, ни строки в файле версий. Пусто.
Отсюда практическое следствие: не помечайте так окружение, которого ещё нет. Вы просите пропустить единственную работу, которая там есть, и потом удивляетесь, что ничего не появилось. Правильный порядок — построить окружение, убедиться фактом, что оно работает, и только тогда закрывать его от автоматических изменений.
#Имя базы данных запекается один раз
Если вы указали имя базы явно и оно не совпадает с тем, которое сервис вывел бы сам, — считайте, что вы приняли решение с длинными последствиями.
База создаётся один раз, при первом запуске, и имя фиксируется тогда же. Второго раза не будет. Исправление означает удалить кластер базы вместе с томом.
Поэтому: не указывайте имя, которое просто повторяет выводимое — это бесплатно, но бессмысленно. И не указывайте имя, которое ему противоречит, если не понимаете, зачем.
#schemas: [public] уничтожает базу до первого запуска
Выглядит как аккуратность. Работает как мина.
Сервис создаёт схемы командой без проверки «если не существует». Схема public уже есть в любой свежей базе. Значит команда упадёт — а первый запуск бывает один раз. Итог: база, которая никогда не поднимется, и лечение снова через удаление кластера с томом.
Если у вас есть сервис, для которого схема не нужна, живите с лишней пустой схемой. Она дешевле.
#Не перечисленный участник теряет доступ
Повторяю здесь, потому что это единственная ловушка из списка, которая задевает людей, а не машины.
Список участников — полное состояние, а не список изменений. Перед правкой посмотрите, кто в проекте есть, и перенесите всех. Предпросмотр покажет, у кого отберут доступ; этот список стоит читать.
#Осиротевший сервис продолжает работать
Убрали сервис из описания — он никуда не делся. Про него сообщат, и всё.
Ошибка здесь возникает в обратную сторону: человек думает, что выключил сервис, а тот работает. Выключение — отдельная работа.
#Двадцать одно имя, которыми нельзя назвать сервис
backend — самое частое, но не единственное. Запрещены все имена, совпадающие с ключами файла настроек:
image imagePullSecrets port backend worker envFrom datastores extraEnv
service persistence route autoscaling topologySpread nodeSelector
tolerations affinity podSecurityContext securityContext probes
nameOverride fullnameOverride
Причина одна для всех: имя сервиса и ключ настроек попадают в одно пространство имён, и под поднимется с образом, имя которого не имя.
Проверка такое имя не пропустит и перечислит весь список в сообщении, так что запоминать его не нужно. Знать полезно другое: у соседних проектов сборка часто называет то же самое именно backend, и человек, сравнивающий два места, решит, что имя поменяли без причины. Причина есть.
Обычный выбор — api и web.
#Справочник полей
Файл проекта
| поле | форма | нужно ли |
|---|---|---|
project | строка | да |
display_name | строка | да |
envs | {<имя>: {cluster, namespace, gated}} | да |
members | список {person, role, overrides} | да |
platforms | {gitlab: {group}} | если группа названа не как проект |
services | список, см. ниже | да |
datastores | {<движок>: {...}} | если нужны |
seald_project_id | число | почти никогда |
Сервис
| поле | форма | заметка | ||||
|---|---|---|---|---|---|---|
name | строка | не backend | ||||
tier | backend \ | frontend \ | mobile | |||
stack | python \ | nodejs \ | golang \ | react \ | flutter | определяет каркас |
port | число | выводится сам, указывайте только особенный | ||||
datastores | список движков | даёт схему на сервис | ||||
reads | список | зависимости от других сервисов | ||||
worker | true \ | false | второй процесс от того же образа | |||
image | строка | выводится сам | ||||
hostnames | {<окружение>: [хост]} | единственное, что делает сервис публичным | ||||
monorepo | строка | если выводимое имя не подходит | ||||
repo | строка | если у сервиса свой репозиторий | ||||
paths | список префиксов | префикс на хосте, не весь хост |
Человек в people.yaml
| поле | форма | заметка |
|---|---|---|
| ключ | почта | опознаёт человека везде |
name | строка | |
accounts | {gitlab: <handle>} | взять существующий аккаунт вместо создания нового |
Роли: guest, reporter, developer, maintainer, owner.
#Если что-то не сошлось
Сначала страница состояния: catalog.geekstudio.kg/onboarding. Смотрите не только на сделанное, но и на то, что сервис делать отказался — там будет причина, написанная словами.
Если ответа там нет, спросите в чате платформы и приложите ссылку на merge request. Это дешевле, чем править описание наугад: репозиторий управляет доступами, и правка вслепую здесь стоит дороже, чем в обычном коде.