Жизненный цикл развёртывания
Как приложение проходит путь от запуска до работающей версии.
Развёртывание — одна попытка собрать приложение и запустить новую версию на сервере. История развёртываний видна на странице «Развёртывания» (в пределах выбранной области) и в ленте «Последние развёртывания» на странице сервиса.
Как запустить
На странице сервиса:
| Кнопка | Что делает |
|---|---|
| Развернуть | Собирает последний коммит выбранной ветки и выкатывает его вместо текущей версии |
| Пересобрать | Собирает сервис заново — полезно, когда сборка сломалась, а код не менялся |
Запускать развёртывания могут участники с правом на запуск развёртываний в их роли. Если кнопка «Развернуть» неактивна, подсказка объяснит причину: не подключён репозиторий, не выбран сервер, сервер не отвечает и т. п.
Новую версию можно запустить и без сборки — из каталога образов, см. Откаты и артефакты.
Этапы
- Очередь. На одном сервере одновременно выполняется одно развёртывание, остальные ждут со статусом «В очереди». Новый запуск не отменяет текущий.
- Сборка. DeployCode забирает код, собирает образ и пишет всё в журнал. Если у приложения выбран реестр, образ публикуется в него и загружается на сервер развёртывания. Так работает и отдельный сервер сборки.
- Запуск. Docker Swarm заменяет контейнеры сервиса новой версией.
- Проверка готовности. DeployCode ждёт, пока все реплики новой версии запустятся и простоят без сбоев;
если в образе есть healthcheck — пока он не станет
healthy. Подробнее — Готовность и healthcheck.
Статусы
| Статус | Что значит |
|---|---|
| В очереди | Ждёт, пока сервер освободится |
| Идёт | Сборка или запуск выполняются |
| Успешно | Новая версия запущена и прошла проверку готовности |
| Ошибка | Развёртывание не удалось — нажмите на статус, чтобы увидеть причину |
| Отменён | Развёртывание отменено |
| Отмена запрошена | Отмена принята, сборка остановится перед запуском образа |
| Проверяем состояние | Обновления перестали поступать, DeployCode проверяет сборку и приложение на сервере, см. ниже |
| Сборка продолжается | Обновлений нет, но проверка подтвердила, что сборка на сервере ещё идёт |
| Результат не подтверждён | Проверить состояние на сервере не удалось, проверка повторится автоматически. Это не ошибка |
Статус с пояснением можно нажать: откроется причина ошибки или ход наблюдения за развёртыванием и время последней проверки. Статусы одинаковы в истории, на странице сервиса, в обзоре и на карте.
Для частых причин ошибок — нехватка места или памяти, недоступный Docker — DeployCode показывает сообщение с подсказкой. В остальных случаях откройте журнал.
Отмена
Отменить можно в меню развёртывания в истории — «Отменить развёртывание»:
- запуск из очереди отменяется сразу;
- если сборка уже идёт, она завершит текущую команду, а новый образ не будет запущен;
- после того как Docker начал заменять контейнеры, отменить развёртывание уже нельзя.
Если обновления перестали поступать
Во время работы развёртывание регулярно сообщает о себе. Если сообщений нет больше 45 секунд, например при перезапуске панели, статус меняется на «Проверяем состояние». Запускать развёртывание заново не нужно: DeployCode сам выяснит, чем оно закончилось.
Если тишина длится больше двух минут, DeployCode сверяется с сервером и решает, что делать:
- если новая версия ещё не начала запускаться, DeployCode проверяет сборку. Пока она идёт, статус «Сборка продолжается», и DeployCode ждёт до 30 минут. Если образ готов, запуск продолжается, а если образа нет, развёртывание завершается с ошибкой;
- если запуск уже начался, DeployCode до 10 минут следит за Docker и завершает развёртывание по факту: успешно или с ошибкой.
Если сервер не ответил на проверку, статус будет «Результат не подтверждён», а проверка повторится автоматически.
Кнопка «Проверить состояние» в карточке развёртывания запускает проверку сразу. Новое развёртывание она не создаёт и не завершает текущее раньше двух минут тишины.
Если развёртывание завершилось успешно после такого перерыва, журнал может обрываться. Это не меняет результат: статус «Успешно» подтверждён проверкой на сервере.
Подробности запуска
В истории у каждого развёртывания есть меню: «Сведения о запуске», «Открыть журнал», «Скопировать ID», «Открыть сервис». В карточке развёртывания три вкладки:
- Запуск — этапы развёртывания, сервер сборки и сервер развёртывания, коммит, ветка, репозиторий, время начала и окончания, длительность, образ и ошибка, если она была;
- Логи — журнал развёртывания;
- Изменения — коммиты и файлы, изменившиеся с предыдущего успешного развёртывания.
На вкладках «Запуск» и «Логи» также есть блок «История запуска»: когда развёртывание началось, прерывались ли обновления, когда наблюдение восстановилось, когда начался запуск приложения и чем всё закончилось. Если обновления прерывались, над блоком показано, что DeployCode выяснил и когда проверял последний раз.
Этапы развёртывания
Во вкладке «Запуск» блок «Этапы развёртывания» показывает, где сейчас развёртывание. Пока оно идёт, блок обновляется каждые две секунды.
| Этап | Когда нужен |
|---|---|
| Сборка образа | При сборке из репозитория |
| Публикация в реестр | Если у приложения выбран реестр публикации |
| Загрузка на сервер развёртывания | Если образ берётся из реестра |
| Запуск приложения | Всегда |
Каждый этап отмечен как «Ожидает», «Выполняется», «Готово», «Ошибка», «Остановлено», «Не требуется» или «Нет данных». У старых запусков без сохранённой конфигурации часть этапов может быть без данных.
Сколько хранится история
Для каждого приложения хранятся 10 последних развёртываний вместе с журналами — более старые удаляются при новом запуске.