O que eu faço:
Toda a configuração do servidor que precisa ser alterada da linha de base do SO instalada é gerenciada pelo Chef, que é armazenado em módulos (chamados de livros de receitas), que são armazenados no controle de versão por meio do Git.
A maioria das configurações foi feita manualmente em um sistema de teste (geralmente uma imagem de VM ou simplesmente uma instância do EC2) e, em seguida, uma receita de configuração escrita para cobrir todos os vários componentes das alterações. A atualização do fluxo de trabalho do ambiente é algo assim:
- Crie um ticket no sistema apropriado que uma alteração precisa ser feita.
- Documente todos os porquês e o que acontece com a mudança.
- Edite a (s) receita (s) de configuração, modelos, arquivos, etc, necessários para que a mudança ocorra no sistema ou sistemas de destino.
- Confirme a alteração no repositório local e envie para o servidor de controle de versão principal.
- Atualize o ticket para revisão por pares das alterações.
- As alterações são assinadas e a alteração é implantada no servidor Chef para que ele saiba sobre os bits atualizados.
- Execute o Chef manualmente em clientes ou deixe-o rodar automaticamente dependendo do requisito da mudança. (Eu não diria mais do que meia dúzia de sistemas à mão).
O modo de operação do Chef é falhar se houver um problema ao executar o cliente, como se um pacote não existisse ou um arquivo de modelo não fosse encontrado ou muitos outros problemas. Corrija o problema, documente no ticket e execute novamente o cliente.
A pessoa com o requisito de negócios para a alteração verifica se foi bem-sucedida e fecha o ticket.
Chef específico, porque é isso que eu uso. Subsulte a ferramenta apropriada para o seu ambiente e, se você não estiver usando uma ferramenta de gerenciamento de configuração, precisará examinar algo, porque isso torna todo esse processo muito mais robusto e confiável. Sem mencionar escalável.