(Peço desculpas antecipadamente pela estupidez nesta pergunta. Normalmente sou um programador, não um administrador de sistemas, mas resolvi automatizar algumas coisas e limpar outras que são automatizadas, mas não da maneira mais bonita . :-)
Estive pesquisando várias ferramentas para automação da 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 com o software pré - empacotado .
O que não entendo é: como alguém usa uma ferramenta (como o Puppet) para gerenciar implantações de nosso próprio software interno? Acho que estou perdida porque vi milhares de tutoriais mostrando como manter o Apache ensure => latest
(o que é bem legal), mas nada que corresponda ao meu caso de uso hoje, que é algo mais como:
- quando um ser humano aperta o botão,
- extrair a ramificação 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 entrem em vigor
O Puppet parece ótimo, e eu 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 levar as coisas fornecidas nos documentos do Puppet e replicar o comportamento que eu quero? Eu simplesmente não estou entendendo?
Até agora, o que parece para mim é que o ser humano (# 1) empacotaria manualmente o software (# 2 e # 3) externo ao Puppet, atualizaria manualmente a configuração do Puppet, o que acionaria o Puppet para atualizar os servidores. .. talvez? (Estou um pouco confuso aqui, como tenho certeza de que você pode perceber.)
Obrigado!
Respostas:
Usamos fantoche, mas não o usamos para implantações de aplicativos. Como você disse, você pode empacotar seu software em debs ou rpms, configurar seu repositório privado em qualquer lugar e usar o puppet para controlar versões, mas você ainda está à mercê de aguardar a 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 trilhos para que não haja etapa de compilação):
O chef pode ter mais recursos de envio em tempo real; Eu não estou muito familiarizado com isso.
fonte
As etapas de 1 a 3 são geralmente automatizadas em um processo de compilação. Normalmente, a saída desse processo passará por um ciclo de teste. Empacote 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 ocorrerão.
Sua etapa 5 implica uma interrupção na implantação. Para algo como apache, isso pode ser tratado com o desligamento e a reinicialização durante a rotação do log. Um script crontab pode lidar com isso. Se você puder lidar com mudanças contínuas por um período de uma hora, inclua a reinicialização na etapa 4. De implantação ou fantoches são ferramentas apropriadas para a etapa 4. Isso pode ser acionado atualizando o repositório quando os testes de integração forem aprovados.
fonte
Procure receitas de marionetes e você encontrará toneladas de scripts 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 fantoche para instalar o software. A receita precisaria ser colocada no servidor mestre de onde seria propagada para os escravos.
fonte