Implantar nosso próprio software usando o Puppet?

Implantar nosso próprio software usando o Puppet?

(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:

  1. quando um ser humano aperta o botão,
  2. extraia o branch A do repositório de controle de versão B
  3. execute o comando C para compilá-lo
  4. copie os binários D para os servidores E1 a E10
  5. 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.

informação relacionada