Implantar nosso próprio software usando o Puppet?

8

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

  1. quando um ser humano aperta o botão,
  2. extrair a ramificação 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 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!

Ken
fonte
O Puppet deve funcionar com o padrão "Pacotes, Arquivos, Serviços". O Puppet seria ótimo para preparar seus servidores, mas um servidor de compilação contínuo como o Jenkins pode ser uma ferramenta melhor para esse caso de uso.
Spuder

Respostas:

5

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

  • Use o fantoche 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 capistrano para enviar a build para seus servidores.

O chef pode ter mais recursos de envio em tempo real; Eu não estou muito familiarizado com isso.

Ben Jencks
fonte
Este software em particular não está usando Ruby. Tive a impressão de que o Puppet é bastante agnóstico, mas o Capistrano foi desenvolvido para funcionar melhor com os aplicativos Rails. Mas já se passaram alguns anos desde que usei o boné, então talvez isso tenha mudado, e vou ver agora.
Ken
1
O Capistrano se inclina para o Rails, mas é flexível e pode ser facilmente usado para outros idiomas. Basta ler as receitas de implantação padrão e substituí-las na sua própria receita. É apenas programação. Minha empresa implementa dezenas de aplicativos PHP em vários servidores via Capistrano, embora usemos o front-end do Webistrano para torná-lo mais gerenciável.
Martijn Heemels
2
Capistrano está bem, mas o MCollective e o RunDeck estão mais bem ajustados para se integrarem ao Puppet.
jgoldschrafe
Você também pode dar uma olhada no Fabric; é um pouco como o Capistrano, mas em Python.
Xiong Chiamiov 13/03/11
1

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.

BillThor
fonte
1

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.

Sameer
fonte