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 Puppetpackage
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 ex.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.