В данном методе используется инструмент werf от компании Флант для сборки и доставки приложения и их накопленные знания конфигураций CI/CD и деплоя приложений в K8s. Имеем микросервисную архитектуру в k8s, где крутятся и деплоятся сервисы на пхп, го, js ... Под каждый микросервис создается отдельный репозиторий, который содержит помимо исходников кода набор кубернетис ресурсов (deployment, configMap, Secret, Job...) Выкат и настройка каждого микросервиса становится головной болью, по сути каждый микросервис содержит одинаковые описания ресурсов для k8s (копипаст), нет единого места для изменения ресурсов кубурнетиса для проекта, много лишних знаний об инфроструктуре для программистов, да разработчики бывают разные, кто то может все настроить сам, понимает как это все работает, а кто то нет, по сути такая реализация и была задумана для того чтобы упростить настройку деплоя для разработчиков и девопсов. Иметь единый стандартизированный helm репозиторий (php, go, js ...), поддержка семантического версирования чарта, в дочернем проекте иметь только файлы values для определенного окружения с помощью которых настраивать деплой приложения. Gitlab, K8s, werf, docker (подразумевается что все доступы к k8s, Gitlab, docker уже имеются) Werf Установим werf на сервер Gitlab следуя официальной документации (werf можно использовать без установки на хост запуская image) https://ru.werf.io/documentation/v1.2/index.html?usage=ci&ci=gitlabCiCd&runnerType=hostRunner&os=linux&buildBackend=docker&projectType=simplified&sharedCICD=no&repoType=application Настроим runner для проекта Создаем новый репозиторий laravel-chart, структура файлов .helm/charts/laravel-chart/Chart.yaml .gitlab-ci.yaml подробное описание инструкций можно посмотреть в статье  3. Настроим токены для доступа к родительскому репозиторию, Settings -> Repository -> Deploy tokens,создаём новый токен с правами read_package_registry и write_package_registry Добавим переменные окружения CI/CD REPO_NAME - laravel-chart REPO_PUSH - название нашего токена который создали выше REPO_PUSH_SECRET - секрет нашего токена который создали выше Заходим на машину где будем запускать наш CI и и регестируем helm repo Коммитим и пушим наш чарт в репозиторий, после пуша наш чарт должен появится в Packages & Registries -> Package Registry нашего репозитория  1. Создаем новый репозиторий структура файлов .helm/Chart.yaml werf.yaml werf-giterminism.yaml (тут мы сознательно отключаем гитерминизм в werf т.к наш чарт не будет находится под гит контролем) .gitlab-ci.yaml Настроим токены для доступа к репозиторию, Settings -> Repository -> Deploy tokens,создаём новые токены Первый с правами write_package_registry и помещаем полученные значения в переменные окружения дочернего репозитория CLIENT_REPO_PUSH и CLIENT_REPO_PUSH_SECRET Второй с правами read_package_registry и помещаем полученные значения в переменные окружения дочернего репозиторияCLIENT_REPO_PULL и CLIENT_REPO_PULL_SECRET Переходим в родительский репозиторий в раздел Settings -> Repository -> Deploy tokens и создаем токен с правами read_package_registry, помещаем полученные значения в переменные окружения дочернего репозитория MAIN_REPO_PULL и MAIN_REPO_PULL_SECRET  В статье не рассматриваются тонкости подготовки образов,  настройки CI/CD и деплоя приложения используя werf. Это тема отдельной статьи. Итог После всех манипуляций мы имеем возможность настроить наш дочерний репозиторий имея только values в проекте, при запуске CI родительский чарт выкачается и запушится в дочерний package registry, имеем поддержку семантического версирования.