У нас файлом /etc/project_name.yml заведует Puppet. Сам проект собирается на CI-сервере в deb-пакет (там же делается bower install, gulp build etc). В postinstall-скрипте пакета с сайтом написано что-то вроде
cp /etc/project_name.yml /var/www/project_name/app/config/parameters.yml
.
То есть, нужная конфигурация уже лежит на сервере и пакет при установке просто себе ее копирует. Если нужно добавить новый параметр в файл, то сначала правится json-файл в hiera соответствующего хоста, он раскатывается на фронты, а потом уже накатывается пакет с сайтом, требующий новый ключ конфига.
В том же postinstall выполняется скрипт проверки соответствия ключей в parameters.yml.dist и свежепоявившемся parameters.yml и если ключи расходятся, то установка считается неудачной (читай, как разработчики накосячили с конфигом, ситуация требует ручного вмешательства).
Ключевой пойнт в том, что ни разработчики, ни CI-сервер ничего не знают про параметры боевого сервера и ограничены свой областью ответственности.
Ну а Puppet и так "слишком много знает" об инфраструктуре, поэтому, ему этот файл доверять не страшно.