Testar seus recursos após a implantação
Ao validar e visualizar a implantação do Bicep, você conseguiu ter confiança de que seus arquivos Bicep serão implantados com sucesso. Mas a implantação não é a história completa. Após a conclusão da implantação, também é útil verificar se ela fez o que você esperava.
Nesta unidade, você aprenderá mais sobre os testes que podem ser executados após a conclusão da implantação. Você também verá como reverter a implantação se as coisas não funcionarem conforme o esperado.
Executar smoke tests e testes negativos
Quando você define recursos em um arquivo Bicep, sua meta não é apenas criar recursos no Azure. A meta é agregar valor à sua organização, atendendo também aos requisitos dela. Ao validar e visualizar seus arquivos do Bicep, você ganha confiança de que as definições de recurso são válidas, mas não necessariamente sabe que os recursos realmente farão o que você deseja.
Por exemplo, imagine que você implante um novo servidor lógico do SQL do Azure usando um pipeline de implantação do Bicep. A definição do Bicep para o servidor é válida, passando, portanto, pelas fases do linter e de validação de simulação. O comando de teste de hipóteses mostra que um servidor será criado, o que é o esperado. A implantação também é concluída com sucesso. No entanto, no final do processo de implantação, é possível que você ainda não tenha um servidor de banco de dados funcionando e pronto para uso. Os motivos podem incluir:
- Você não configurou regras de firewall para permitir que o tráfego de rede chegue ao servidor.
- Você habilitou a autenticação do Microsoft Entra em seu servidor quando não deveria, ou vice-versa.
Mesmo quando você só está implantando arquivos Bicep básicos, vale a pena considerar como validar se os recursos implantados realmente funcionam e atendem às suas necessidades. Aqui estão exemplos de como você pode aplicar essa validação:
- Ao implantar um site, experimente acessar o aplicativo Web no pipeline. Verifique se o pipeline se conecta ao site com êxito e recebe um código de resposta válido.
- Ao implantar uma CDN (rede de distribuição de conteúdo), tente se conectar a um recurso por meio dela. Verifique se o pipeline se conecta à CDN com êxito e recebe um código de resposta válido.
Às vezes, esses testes são chamados de smoke tests de infraestrutura. O teste de fumaça é uma forma simples de teste projetada para descobrir grandes problemas em sua implementação.
Observação
Alguns recursos do Azure não são fáceis de serem acessados por meio de um agente de pipeline hospedado pela Microsoft. Talvez seja necessário considerar o uso de um agente auto-hospedado para executar fases de smoke test se elas exigirem acesso aos recursos por meio de redes privadas.
Também é uma boa ideia executar testes negativos. Testes negativos ajudam você a confirmar que seus recursos não se comportam de maneiras indesejadas. Por exemplo, quando você implanta uma máquina virtual, é uma boa prática usar o Azure Bastion para se conectar com segurança à máquina virtual. Você pode adicionar um teste negativo ao pipeline para verificar se não consegue se conectar a uma máquina virtual diretamente usando a Conexão de Área de Trabalho Remota ou o SSH.
Importante
A meta desses testes não é verificar se o Bicep implantou seus recursos corretamente. Ao usar o Bicep, você pressupõe que ele implantará os recursos especificados em seus arquivos Bicep. Em vez disso, a meta é verificar se os recursos definidos funcionarão para sua situação e atenderão às suas necessidades.
Executar testes no Azure Pipelines
Há várias maneiras de executar testes no pipeline. Neste módulo, você usará o Pester, que é uma ferramenta de software livre que executa testes gravados por meio do PowerShell. Você pode optar por usar uma estrutura de teste diferente ou até mesmo executar testes sem uma ferramenta de teste. Por exemplo, outra ferramenta de teste a ser considerada é o PSRule para Azure, que inclui testes e regras predefinidos para o Azure. Ele pode executar a validação nos seus modelos e executar testes nos recursos do Azure implantados. Há um link para PSRule no resumo do módulo.
Quando você usa uma estrutura de teste compatível, o Azure Pipelines entende os resultados de cada teste. Ele exibe os resultados do teste junto com as informações da execução de pipeline e acompanha o histórico de cada teste ao longo do tempo. No próximo exercício, você verá como usar o Azure Pipelines com smoke tests de infraestrutura.
Transmitir dados entre etapas e fases
Quando você divide seu pipeline em estágios, cada um com sua própria responsabilidade, às vezes é necessário passar os dados entre esses estágios. Por exemplo, uma fase pode criar um recurso do Azure com o qual outra fase precisa trabalhar. Para você fazer isso, a segunda fase precisa saber o nome do recurso criado. Por exemplo, no exercício a seguir, a etapa de smoke test precisa acessar os recursos que a etapa de implantação implanta.
O arquivo Bicep implanta os recursos, de modo que ele possa acessar as propriedades do recurso e publicá-las como saídas da implantação. Você pode acessar uma saída de implantação no pipeline. No Azure Pipelines, há uma sintaxe especial para publicar variáveis a fim de disponibilizá-las entre as fases.
Primeiro, você precisa publicar uma variável de saída para uma fase do pipeline. Para gerar a variável, você grava uma cadeia de caracteres especialmente formatada no log de pipeline, que o Azure Pipelines pode ler. No seguinte exemplo, uma variável chamada myVariable é definida com o valor myValue:
echo "##vso[task.setvariable variable=myVariable;isOutput=true]myValue"
O Azure Pipelines lê e interpreta a cadeia de caracteres do log do pipeline e disponibiliza o valor da variável como uma saída. Você pode combinar esse valor com mais scripts para publicar um valor de saída de implantação do Bicep como uma variável de saída de uma fase do pipeline. Você verá como fazer esse script no próximo exercício.
Em segundo lugar, você precisa disponibilizar a variável para o trabalho da fase de smoke test. Você definirá uma variável para o trabalho e usará outra cadeia de caracteres do YAML com formatação especial:
- stage: SmokeTest
jobs:
- job: SmokeTest
variables:
myVariable: $[ stageDependencies.DeployStage.DeployJob.outputs['DeployJob.DeployStep.myVariable'] ]
Agora, todas as etapas do trabalho de smoke test podem acessar o valor myVariable como qualquer outra variável, usando a sintaxe $(myVariable). Você usará uma variável no próximo exercício.
Outros tipos de testes
Os testes funcionais e os testes de integração são frequentemente usados para validar se os recursos implantados se comportam conforme o esperado. Por exemplo, um teste de integração pode se conectar ao seu site, enviar uma transação de teste e aguardar para confirmar se a transação foi concluída com êxito. Usando testes de integração, você pode testar a solução que sua equipe cria, além da infraestrutura na qual ela está sendo executada. Em um módulo futuro, você verá como pode adicionar esses tipos de testes ao pipeline.
Também é possível executar outros tipos de testes de um pipeline de implantação, incluindo testes de desempenho e testes de penetração de segurança. Esses testes estão fora do escopo deste módulo, mas podem agregar valor a um processo de implantação automatizado.
Reverter ou efetuar roll forward
Suponha que o pipeline implante os recursos com êxito, mas os testes falhem. O que fazer agora?
Anteriormente neste módulo, você aprendeu que o Azure Pipelines permite criar estágios de reversão executados quando um estágio anterior falha. Você pode usar essa abordagem para criar uma fase de reversão quando a fase de teste relatar um resultado inesperado. Você também pode reverter manualmente suas alterações ou executar novamente todo o pipeline, se achar que a falha foi causada por um problema temporário que foi resolvido desde então.
Observação
Ao enviar uma implantação para o Azure Resource Manager, você pode solicitar que ele execute novamente sua última implantação bem-sucedida em caso de falha. Para fazer isso, você precisa usar a etapa da CLI do Azure para implantar o arquivo e adicionar o parâmetro --rollback-on-error ao enviar a implantação usando o comando az deployment group create.
Geralmente é difícil solucionar as etapas que uma fase de reversão deve executar. Em geral, as implantações do Bicep são complexas e não é fácil reverter alterações. É especialmente difícil revertê-las quando a implantação inclui outros componentes.
Por exemplo, imagine que o pipeline implanta um arquivo Bicep que define um banco de dados SQL do Azure e adiciona alguns dados ao banco de dados. Quando a implantação é revertida, os dados devem ser excluídos? O banco de dados também deve ser removido? É difícil prever como cada falha e cada reversão podem afetar o ambiente em execução.
Por esse motivo, muitas organizações preferem avançar, o que significa que elas corrigem rapidamente o motivo da falha e, em seguida, implantam novamente. Ao criar um processo de implantação automatizada de alta qualidade e seguir todas as práticas recomendadas que você aprendeu ao longo desses roteiros de aprendizagem, você poderá corrigir problemas rapidamente e reimplantar seus arquivos Bicep, mantendo a alta qualidade.
Dica
Um dos princípios de uma mentalidade de DevOps é aprender com os erros. Se você precisar reverter uma implantação, considere cuidadosamente por que o erro aconteceu e adicione testes automatizados antes que sua implantação seja iniciada para detectar o mesmo problema se isso acontecer no futuro.