(Desculpas antecipadamente pela estupidez nesta questão. Normalmente sou um programador, não um administrador de sistemas, mas decidi automatizar algumas coisas e limpar outras coisas que são automatizadas, mas não da maneira mais bonita :-)
Tenho pesquisado várias ferramentas para automação de implantação de software em vários servidores, como cfengine, Puppet e Chef. Até agora, o Puppet parece o mais atraente, mas certamente ainda não me comprometi com nada.
Todas essas ferramentas parecem poder fazer um ótimo trabalho em manter vários servidores atualizados compré-embaladoProgramas.
O que não entendi é: como usar uma ferramenta (como o Puppet) para gerenciar implantações de nosso próprio software interno? Acho que estou perdido porque vi milhares de tutoriais mostrando como manter o Apache ensure => latest
(queémuito legal), mas nada que corresponda ao meu caso de uso hoje, que é algo mais parecido com:
- quando um ser humano aperta o botão,
- extraia o branch A do repositório de controle de versão B
- execute o comando C para compilá-lo
- copie os binários D para os servidores E1 a E10
- em cada servidor, execute o comando F para que todas as alterações tenham efeito
Puppet parece ótimo, e vejo totalmente a vantagem da configuração declarativa e idempotente sobre alguns scripts de shell, mas não vi nenhum tutorial para "você deseja atualizar seus scripts de shell para Puppet (ou Chef, ou cfengine), então aqui está o que você deveria fazer". Existe uma coisa dessas? É óbvio para outras pessoas como pegar o que é fornecido na documentação do Puppet e replicar o comportamento que desejo? Eu simplesmente não estou entendendo?
O que parece para mim, até agora, é que o ser humano (#1) empacotaria manualmente o software (#2 e #3) externo ao Puppet, atualizaria manualmente a configuração do Puppet, o que faria com que o Puppet atualizasse os servidores. .. talvez? (Estou um pouco confuso aqui, como tenho certeza que você pode perceber.)
Obrigado!
Responder1
Usamos fantoches, mas não o usamos para implantações de aplicativos. Como você disse, você poderia empacotar seu software em debs ou rpms, configurar seu repositório privado em qualquer lugar e usar fantoches para controlar versões, mas ainda estará à mercê de esperar pela próxima atualização de 30 minutos em todos os seus servidores.
O que eu faria (e isso é próximo do que fazemos, mas usamos Rails, então não há etapa de compilação):
- Use o puppet para configurar tudo no servidor, exceto o próprio aplicativo. Dependências, servidores web, usuários, caminhos, etc.
- Faça com que seu servidor de compilação automatizado (bamboo, hudson, cruise control, etc.) coloque os artefatos compilados em um gerenciador de repositório como o Nexus.
- Use o capistrano para enviar a compilação para seus servidores.
O Chef pode ter mais recursos push em tempo real; Não estou muito familiarizado com isso.
Responder2
As etapas 1 a 3 são comumente automatizadas em um processo de construção. Normalmente, a saída deste processo passará por um ciclo de teste. Eu empacoto a saída para que ela possa ser implantada em um ambiente de teste de integração. Somente se os testes de integração forem aprovados as etapas 4 e 5 deverão ocorrer.
Sua etapa 5 implica uma interrupção na implantação. Para algo como o Apache, isso pode ser resolvido desligando e reiniciando durante a rotação do log. Um script crontab pode lidar com isso. Se você puder lidar com mudanças contínuas durante um período de uma hora ou mais, basta incluir a reinicialização na etapa de implantação 4. Puppet ou cfengine são ferramentas apropriadas para a etapa 4. Isso pode ser acionado atualizando o repositório quando os testes de integração forem aprovados.
Responder3
Pesquise receitas de fantoches e você encontrará toneladas de roteiros prontos para produção. Sim, você teria que empacotar manualmente o software. Se você estiver mantendo seu próprio repositório pessoal, poderá usar o sinalizador garantir => mais recente. Em seguida, escreva uma receita para dizer ao Puppet para instalar o software. A receita precisaria ser colocada no servidor mestre de onde seria propagada para os escravos.