Puppet: compilando binários

1

Usamos o fantoche para distribuir nosso próprio software (ou seja, as coisas que escrevemos, que queremos executar em nossos próprios servidores). Então, em algum lugar, temos que compilar este software.

Faz sentido para mim poder puxar e compilar no mestre das marionetes. Compile uma vez, distribua, nossas máquinas são homogêneas e os binários executam seus hosts ungidos.

Mas quando atualizamos os hosts, várias bibliotecas mudam e podemos nos encontrar precisando recompilar para o novo conjunto de bibliotecas.

Parece que a coisa certa a fazer é empacotar nosso software, servir esses debs para nós mesmos e depois usar diretivas de pacote no fantoche.

Q1: Isso soa bem / Eu senti falta de algo importante aqui?

Q2: Então como os deb's são empacotados e enviados? Este é um processo de liberação manual? O que significa que atualizamos um servidor de teste para as novas versões do sistema operacional e da biblioteca, a fim de compilar e empacotar.

Q2B: Agora, suponha que eu instale esse servidor de IC e continuo dizendo a minha equipe que irei instalar. O servidor de CI não sabe nada sobre dist-upgrades, tanto quanto eu posso dizer. Então esta parte tem que permanecer manual?

    
por jma 23.09.2015 / 10:18

1 resposta

5

Seu procedimento de criação pode ser manual ou automatizado via CI, por meio de vários acionadores. Por exemplo (e este é apenas um exemplo), você pode marcar uma nova versão no Git ou mover uma tag existente e seu aplicativo de CI vigia esse repositório ou essa marca e cria / envia seu pacote.

Seu procedimento de liberação também pode ser manual ou automatizado.

  • Use ensure => latest em seus recursos do Puppet package para que, assim que publicar pacotes em seu repositório, eles sejam coletados e instalados por seus nós.
  • Use ensure => 'x.y.z' para fixar um pacote em uma versão específica. Com essa abordagem, você pode aumentar manualmente as versões em nós / papéis / ambientes específicos.
  • Você pode adotar uma abordagem híbrida combinando os dois acima usando hiera e parametizando seus módulos - você pode garantir latest em seus ambientes dev / build e x.y.z em seu ambiente de produção, por exemplo.

  • Você pode remover o Puppet da equação completamente e fazer versões manuais usando uma ferramenta como o Capistrano .

Uma solução separada é usar a Entrega Contínua e tratar seus servidores no gado, e reprová-los completamente a cada lançamento - veja Martin Fowler's blog para mais informações sobre isso.

Nota importante: Os procedimentos construção e release devem ser idealmente completamente independentes e não devem interagir, embora uma construção bem sucedida possa aciona uma liberação automatizada para um ambiente UAT, por exemplo, e usa um procedimento de liberação manual / diferente para produção.

    
por 23.09.2015 / 10:59

Tags