Aqui está uma citação parcial de uma resposta à pergunta sobre " Como evitar instabilidades causadas por integração contínua em ambientes de teste? ":
Esse ambiente geralmente congela durante os testes.
Minha pergunta: o que são implementações de exemplo de um ambiente congelado? Ou seja, o que você pode fazer para impor tecnicamente que ninguém (exceto se permitido por um usuário autorizado como um gerente de release) será capaz de alterar qualquer coisa nesse ambiente congelado.
Esclarecimentos :
Não estou falando sobre o que (acho) é chamado de "períodos congelados" durante (por exemplo) o processamento no final do ano nos bancos. Trata-se de não poder aplicar (repetir) alterações nos ambientes de produção, para reduzir o risco de novas alterações / correções serem introduzidas que possam impactar o processamento no final do ano.
Suponha que os usuários que têm permissão para aprovar / aplicar alterações de qualquer maneira (como o gerente de versão no meu exemplo), o façam apenas em casos excepcionais. Por exemplo, onde durante o teste é encontrado um problema de alta gravidade, para o qual adiar uma correção para uma próxima versão não é uma opção (pois a produção seria arriscada se a liberação fosse ativada sem essa correção).
Isso poderia ser apenas sobre a suspensão de qualquer atualização automatizada durante o tempo do teste. O ponto é: evitar que alguém atualize um Aplicativo A para a versão Y enquanto outra equipe ainda está testando o aplicativo B na versão X, que depende do aplicativo A. Isso pode significar ter uma proteção para evitar que uma equipe de teste exija uma atualização de uma dependência em teste.
fonte
O TeamCity possui um recurso de compilação de Recursos Compartilhados, que permite definir um recurso do qual várias Definições de Compilação dependem. As Definições de compilação podem exigir um bloqueio de leitura ou um bloqueio de gravação, você também pode definir se esses bloqueios são exclusivos ou permitem um grau de paralelismo.
Se fizermos as seguintes suposições sobre um ambiente compartilhado chamado PreProd :
Portanto, o seguinte é verdadeiro:
Você pode usar um mecanismo semelhante com o Jenkins usando o plug-in Exclusão . De fato, você pode criar essa funcionalidade em qualquer processo usando bloqueio ou semáforo - por exemplo, Apache ZooKeeper ou HashiCorp Consul .
fonte
Isso soa como um anti-padrão para mim. Acredito que todos ou ninguém devem ter acesso a todos os ambientes.
Se os usuários estiverem subvertendo o processo, eu examinaria seriamente o processo para tentar garantir que ele não esteja atrapalhando as pessoas.
A implementação de um mecanismo automatizado que impõe um estado específico também é útil para incentivar as pessoas a fazer as coisas da maneira certa. Isso pode ser via Gerenciamento de Configuração ou destruir qualquer instância imutável se alguém fizer o SSH nele
fonte