Essa é uma pergunta muito boa, pois é um antipadrão comum para acoplar ci/cd
ferramentas a ambientes.
Jenkins é uma fábrica de construção. Como tal, deve ser totalmente independente da noção de ambiente, ou mesmo entrega.
A melhor prática é ter algum tipo de processo de preparação e / ou interface (se você puder pagar: um software de entrega dedicado).
Processo de preparação
Você deve tentar criar algum tipo de trabalho temporário para cada ambiente, no qual definirá a configuração do ambiente e agrupará o pacote final.
Em seguida, você terá trabalhos de entrega para cada ambiente.
Ferramentas de entrega
Para fazer criar as tarefas de teste e entrega, você pode usar ferramentas básicas de script, como shell
, mas existem ferramentas de script mais adaptadas, como Ansible
, puppet
, chef
...
Se você puder arcar com as despesas, considere investir em um software de implantação (mencionarei alguns com os quais trabalhei na seção de comentários).
Observe que esses softwares gerenciam algum tipo de processo de preparação do ambiente.
Obviamente, faz muito sentido combinar a implantação de softwares e scripts.
Além de segregar ferramentas e ambiente
Como você pediu as melhores práticas, parece-me que vale a pena mencionar outro anti-padrão comumente encontrado: acoplamento de ferramentas SCM e processo de entrega.
É uma prática muito boa armazenar a configuração do ambiente (não senhas ou informações confidenciais, é claro) e passar scripts ao vivo nas ferramentas do SCM (como svn
ou git
...). No entanto, é uma prática muito ruim fazer check-out da configuração do ambiente e ativar scripts ao vivo DURANTE a ativação. Pode estar simplesmente indisponível quando você precisar.
Essa fase de check-out deve fazer parte do processo de preparação que eu mencionei antes.
Idem potence
Outra prática recomendada é que seus scripts sejam idem-potent
: isso significa que você poderá reproduzir seus scripts uma vez para executar a preparação e a entrega. Então você deve poder reproduzi-los repetidamente, e eles não mudariam o estado do seu sistema, a menos que algo ocorresse na configuração.
Dimensionamento
Como prática recomendada final, compartilharei com a experiência direta a assustadora Jenkins: equipes diferentes têm necessidades e usos diferentes da Jenkins. Quando muitas equipes compartilham um Jenkins comum, pode haver problemas com os recursos. O pior caso é quando uma equipe precisa reiniciar o mestre Jenkins enquanto outra precisa entregar.
O ideal seria ter um Jenkins por equipe ou por grupo de equipes que compartilham o mesmo objetivo e planejamento de entrega.