Коллеги, у меня тут возникла одна очень интересная задачка. Есть

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

12 ответов

13 просмотров

Добрый день, у вас задача часто выкатывать фронт?

Sergey Sizov
Добрый день, у вас задача часто выкатывать фронт?

Ага. По несколько раз в день. В песочницу.

სერგეი ქრისტოვი
Ага. По несколько раз в день. В песочницу.

Будто бы проще сделать выкат раздельным на уровне CI.

Sergey Sizov
Будто бы проще сделать выкат раздельным на уровне ...

Так а как выкат зависит? Хуку всё равно. Бандлом выкатывается.

Sergey Sizov
А хук у вас какого плана?

обычный helm hook в виде джобы.

Sergey Sizov
А, я понял. Подумал про webhook.

неа... просто джоба. я думал сделать её не как хук, а как первоочерёдный деплой. но что-то мне кажется это какой-то лютый костыль, который не факт что сработает.

@ilya_lesikov глянь пожалуйста, как время будет.

Могу предложить такой велосипед: обернуть Job в if-условие, в условии должна проверяться версия образа бэкенда в текущем деплойменте, которую теоретически можно взять с помощью lookup-функции , с версией нового релиза

Интересно, может средствами CI детектить изменения до сборки образа? И в зависимости от этого выкатывать только то что нужно

Можно попробовать такой вариант: # .helm/templates/migrate.yaml kind: Job metadata: # "v1" in the name must be changed everytime Job spec is changed name: migrate-{{ include (print $.Template.BasePath "/backend.yaml") . | sha256sum | trunc 10 }}-v1 annotations: helm.sh/hook: ... helm.sh/hook-delete-policy: "" # .helm/templates/backend.yaml kind: Deployment metadata: name: backend # .helm/templates/frontend.yaml kind: Deployment metadata: name: frontend Так каждый раз при изменении backend.yaml будет менять имя у Job, вызывая её перекат. Если же манифест джобы (включая её имя) не изменился, её выкат будет пропущен — так умеет werf 2.0. Единственное неудобство это то, что при изменении spec самой джобы, надо будет v1 в её имени поменять на что-то ещё, иначе получите ошибку "не можем обновить Job, т. к. она иммутабельна". Мы планировали добавить что-то вроде "werf.io/deploy-policy: recreateOnImmutableError", но пока не добрались.

Похожие вопросы

Обсуждают сегодня

падает джоба хотя уже была собрана на соседнем namespace, куда капать? │ │ Copying blob sha256:2fa066caddb8f09a71082b03aa43046f79346a01d9c89e06a1f508bb1207dba5 427 │ │ Copyin...
Andrei St
6
Здравствуйте. Задача состоит в том, чтобы сделать real-time чат в мобильном приложении. После передачи сообщения пользователем через веб-сокеты, для основного и долговременног...
🐾
5
Тут просто дело в том, что я не могу сейчас дать такие подробности из за того что рассчитать это всё нереально. Этого проекта который я хочу сделать ещё даже не существует) И ...
🐾
8
Подскажите пожалуйста, а я могу вот такую штуку использовать? rpc, только реализованное в реббите https://www.rabbitmq.com/tutorials/tutorial-six-php ( или https://habr.com/ru...
Artyom
11
Всем привет 👋 Подскажите пожалуйста, а чего тут не хватает permission или образ битый? Running with gitlab-runner 17.0.0 (44feccdf) on gitlab-runner-c58775949-d7znz YxYz2zp...
Max
2
приветствую. Я заметил такую тему, если был собран Dockerfile с 1 версией например werf. Но при запуске образа, werf скачивает новый релиз сама автоматом. drwxr-xr-x 3 root ro...
vⱥ𝖉iϻ ϻⱥlͥтsͣeͫv♛
1
Всем привет! Такой вопрос ребят. Есть значит у меня consumer подкл только к одному queue Есть два producer также которве отправляют по тому же queue Почему то когда был...
S I S
1
Вот этот метод, который создает соединения, он как часто вызывается и по каким причинам?
Владислав Килин
9
Привет. Почему может RabbitMQ через эндпойнт :15692/metrics/detailed?family=queue_metrics не выдавать метрик по конкретной очереди (выдавать нули)? кластер кроля в кубере сост...
Vlad
4
Доброго времени суток. Подскажите, у меня в queues - очень много очередей в статусе idle. правильно ли я понимаю что их не должно быть, т.е. разрабы должны эти очереди закрыва...
⁣ ⁣ Рабочий аккаунт
1
Карта сайта