У меня уже установлен и запущен Discourse. При каждой пересборке приложения он подтягивает репозиторий launcher, Docker-образ discourse/base и репозиторий Discourse.
Я хочу ограничить это поведение, чтобы пересборка не проверяла обновления и не подтягивала их автоматически, если не передан специальный параметр.
Цель состоит в том, чтобы получать обновления из репозитория GitHub или Docker Hub только тогда, когда это необходимо, а не при каждой пересборке контейнера.
Да, я использую стандартный автономный подход. Я понимаю необходимость поддержания приложения в актуальном состоянии. Моя идея заключается в том, чтобы добавить флаг в лаунчер, когда я хочу обновить репозиторий.
Суть стабильной версии — отсутствие изменений. Зачем вы вообще пересобираете?
Причина, по которой происходит загрузка контейнера, — поддержание его в соответствии с требованиями кода Discourse.
Если вы хотите зайти в контейнер без выполнения pull, вы можете использовать:
docker exec -it app bash
А если вы хотите добавить плагин без пересборки, вы можете зайти в директорию плагина, клонировать его и затем выполнить миграцию базы данных, но вам всё равно нужно убедиться, что вы получаете нужный коммит плагина для версии (строго) стабильной.
Учитывая, что стабильные релизы относительно редки, они очень редко вносят разрушающие изменения и обычно сопровождаются важными обновлениями безопасности, я не понимаю ваше требование.
На мой взгляд, установка плагина — это хороший повод обновиться и убедиться, что вы получили все доступные обновления.
Не обновляться на стабильной версии, на мой взгляд, плохая практика, так как это может подвергнуть вас известным уязвимостям на более длительный срок.
echo " --pull-git Получить последнюю версию из git-репозитория"
echo " --pull-image Получить последнюю версию Docker-образа"
pull_git=false
pull_image=false
rebuild)
if [ "$(git symbolic-ref --short HEAD)" = "master" ] && [ "$pull_git" = true ]; then
git branch -m master main
git fetch origin
git branch -u origin/main main
git remote set-head origin -a
fi
....
Благодаря этому мне удалось избежать необходимости обновлять его каждый раз при выполнении rebuild. Это позволяет установить плагин.
Это может работать только для плагинов, использующих API, но любой JavaScript новых плагинов требует компиляции, которая происходит в процессе сборки.
Следовательно, чтобы добавить новый плагин, в большинстве случаев необходимо выполнить повторную сборку.
Другая проблема, с которой вы сталкиваетесь, заключается в том, что изменение скриптов сборки ядра может привести к серьёзным проблемам, если вы не будете осторожны, особенно если в скриптах ядра вносятся значительные изменения.