Se os seus testes durarem semanas, você pode pensar em aplicar ideias de sucesso do mundo da engenharia de software, como Recurso Alterna . Dessa forma, você pode alternar entre o código antigo / novo usando essas alternâncias implementadas por meio de atributos de função ou tags no Chef.
Como estamos, no entanto, também invertemos o ambiente de nós específicos de tempos em tempos e restringimos produção à versão latest - 1
, atualmente experimento com o seguinte que facilita o uso de vários ambientes com as mesmas configurações (não há garantia de que realmente funciona bem, ainda não tentei isso em produção):
# environments/production.rb
name "production"
env_cookbook_versions = {
"mysql" => "<= 6.0.18",
"extra-constrained" => "= 1.1.2"
}
env_default_attributes = {}
eval File.read("production_settings.rb")
Este arquivo (que eu carrego por meio de knife environment from file
) contém algumas restrições específicas, que não são válidas para outro ambiente, como pre-production
, que não possui um pin de versão para o livro de receitas extra-constrained
.
Por fim, o production_settings.rb
(as partes comuns entre todos esses ambientes (para mim, estou falando apenas de production
e pre-production
, não muito mais)) podem ser assim:
# environments/production_common.rb
env_cookbook_versions["foo"] = "= 0.0.1"
cookbook_versions(env_cookbook_versions)
env_default_attributes.merge!({
"rabbitmq" => {
"server" => "mq.example.org"
},
"base" => {
"flags" => {
"production" => true
}
}
})
default_attributes(env_default_attributes)
Como você sabe, você precisa ter cuidado ao procurar outros nós no mesmo ambiente. Além disso, não tenho certeza se tudo isso praticamente funciona bem. Você precisa garantir que todos os ambientes, dependendo do production_settings.rb
, sejam carregados, uma vez que isso seja alterado. Mas talvez isso te dê algumas ideias.
Entre. em relação à testabilidade sem o Chef-Server: raramente encontro coisas que não posso testar com o test-kitchen. Você sabe que também pode adicionar bolsas de dados e também outras falsas < um href="https://github.com/TYPO3-cookbooks/t3-tinc/tree/master/test/integration/nodes"> nós ao seu livro de receitas para testar o código que usa tais consultas de pesquisa?