Usar Dev Proxy em cenários CI/CD
Usar o Dev Proxy em cenários de CI/CD é uma ótima maneira de testar seus aplicativos em um ambiente controlado. Ao combinar o Proxy de Desenvolvimento com testes que geram solicitações de API em seu aplicativo, você pode cobrir uma ampla variedade de cenários: desde garantir que seu aplicativo não use APIs de sombra ou de não produção até verificar se ele usa permissões mínimas do Microsoft Graph. Embora as etapas exatas de configuração variem dependendo do seu sistema de CI/CD, aqui estão alguns princípios gerais que você deve seguir.
Configure seu corredor
Quando você usa o Dev Proxy em sua máquina local, ele é executado interativamente, esperando que você o controle pressionando teclas. Quando o executas num pipeline de CI/CD, não o podes controlar com as chaves. Para instruir o Dev Proxy de que ele deve ser executado de forma não interativa, defina o ambiente CI
como 1
ou true
.
Observação
A maioria dos executores de CI/CD já tem a variável de ambiente CI
configurada. No entanto, se você estiver usando um corredor personalizado, talvez seja necessário configurá-lo manualmente.
Quando o Dev Proxy deteta a variável de ambiente CI
, ele não espera por pressionamentos de teclas. Você pode então parar o Dev Proxy graciosamente enviando um sinal de SIGINT
para o processo. Fechar o Dev Proxy normalmente é necessário quando você grava solicitações e deseja que o Dev Proxy as analise usando seus plug-ins de relatório. Sem a variável de ambiente CI
, o Dev Proxy esperaria que você pressionasse Ctrl+C. A única maneira de pará-lo seria fechar à força seu processo usando kill -9
ou kill -KILL
, o que para o Dev Proxy imediatamente e o impede de analisar as solicitações gravadas.
Instalar o Dev Proxy
Na maioria dos casos, seu corredor não tem o Dev Proxy instalado. Então, antes de poder usar o Dev Proxy, você precisa instalá-lo. As etapas de instalação dependem do sistema operacional que seu corredor usa.
Dica
Para acelerar seu pipeline, considere armazenar em cache a pasta de instalação do Dev Proxy. Dessa forma, você não precisará baixar o Dev Proxy toda vez que executar seu pipeline. Para obter as etapas exatas, consulte a documentação do seu sistema CI/CD.
Ao instalar o Dev Proxy em uma configuração de CI/CD, você provavelmente desejará fixar a versão do Dev Proxy que você instala. Definir a versão garante que o seu pipeline utilize sempre a mesma versão do Dev Proxy sempre que o executa. As etapas exatas para fixar uma versão dependem do sistema operacional do seu corredor. Aqui está um exemplo de como você pode fixar a versão do Dev Proxy em um corredor baseado em Linux:
# install Dev Proxy v0.18.0
bash -c "$(curl -sL https://aka.ms/devproxy/setup.sh)" -- v0.18.0
Executar Dev Proxy a partir de um script
Quando você executa o Dev Proxy em um pipeline de CI/CD, você precisa iniciá-lo a partir de um script. Iniciar o Dev Proxy a partir de um script é necessário, porque para fechar o Dev Proxy graciosamente, você precisa enviar um sinal de SIGINT
para seu processo. Fechar um processo usando SIGINT
só é possível a partir de um script com o controle de trabalho habilitado. Se você iniciar o Dev Proxy diretamente do seu sistema CI/CD, o processo do Dev Proxy ignorará o sinal de SIGINT
e continuará em execução.
Aqui está um exemplo de um script bash com controle de trabalho habilitado que inicia o Dev Proxy:
# enable job control so that we can send SIGINT to Dev Proxy
set -m
# the rest of the script using Dev Proxy
Executar proxy de desenvolvimento
Depois de instalar o Dev Proxy, você precisa iniciá-lo. Ao iniciar o Dev Proxy em um pipeline de CI/CD, é importante iniciá-lo em segundo plano. Caso contrário, seu pipeline será bloqueado até que você pare o Dev Proxy.
Se você estiver usando um runner baseado em Linux, poderá iniciar o Dev Proxy em segundo plano adicionando &
no final do comando, por exemplo, ./devproxy/devproxy &
.
Aguarde até que o Dev Proxy inicie
Quando você inicia o Dev Proxy em segundo plano, seu script continua sendo executado imediatamente. No entanto, o Dev Proxy precisa de algum tempo para começar. Para garantir que o Dev Proxy esteja pronto antes de começar a executar os testes, aguarde até que ele inicie. Para aguardar o Proxy de Desenvolvimento iniciar, registre sua saída em um arquivo e verifique se o Proxy de Desenvolvimento está escutando solicitações da Web, por exemplo:
# log file path
log_file=devproxy.log
# start Dev Proxy in the background
# log Dev Proxy output to the log file
# log stdout and stderr to the file
./devproxy/devproxy > $log_file 2>&1 &
# store the Dev Proxy process ID
proxy_pid=$!
# wait for init
echo "Waiting for Dev Proxy to start..."
while true; do
if grep -q "Listening on 127.0.0.1:8000" $log_file; then
break
fi
sleep 1
done
# the rest of your script
Pedidos de registo
Se você quiser analisar as solicitações de API emitidas pelo seu aplicativo, inicie o Dev Proxy no modo de gravação. Você pode iniciar o Dev Proxy com gravação, usando o argumento de linha de comando --record
, por exemplo:
./devproxy/devproxy --record
Parar Proxy Dev
Depois de concluir os testes, pare o Dev Proxy, enviando um sinal de SIGINT
para ele. Você pode enviar o sinal de SIGINT
usando o comando kill
, por exemplo:
kill -INT $proxy_pid
Depois de parar o processo de Proxy de Desenvolvimento, pode levar um momento para que ele feche totalmente. Este é especialmente o caso, quando você configura o Dev Proxy para analisar solicitações gravadas. Para garantir que o Dev Proxy tenha concluído o processamento das solicitações gravadas, aguarde o fechamento do processo, por exemplo:
echo "Waiting for Dev Proxy to complete..."
while true; do
if grep -q -e "DONE" -e "No requests to process" -e "An error occurred in a plugin" $log_file; then
break
fi
sleep 1
done
Quando todos os plug-ins de gravação terminam de ser executados, o Dev Proxy imprime a mensagem DONE
na saída. Se não houver solicitações para processar, o Dev Proxy imprimirá a mensagem No requests to process
. Se ocorreu um erro em um plugin, o Dev Proxy imprimirá a mensagem An error occurred in a plugin
. Quando você vir qualquer uma dessas mensagens, você pode ter certeza de que o Dev Proxy terminou de processar as solicitações gravadas.
Exemplo de script
Aqui está um exemplo de um script bash que inicia o Dev Proxy, espera que ele seja iniciado, executa testes, registra solicitações e para o Dev Proxy:
# enable job control so that we can send SIGINT to Dev Proxy
set -m
log_file=devproxy.log
echo "Starting Dev Proxy..."
# start Dev Proxy in the background
# log Dev Proxy output to the log file
# log stdout and stderr to the file
./devproxy/devproxy --record > $log_file 2>&1 &
proxy_pid=$!
# wait for init
echo "Waiting for Dev Proxy to start..."
while true; do
if grep -q "Recording" $log_file; then
break
fi
sleep 1
done
# From: https://www.eliostruyf.com/playwright-microsoft-dev-proxy-github-actions/
# setup certificates
echo "Export the Dev Proxy's Root Certificate"
openssl pkcs12 -in ~/.config/dev-proxy/rootCert.pfx -clcerts -nokeys -out dev-proxy-ca.crt -passin pass:""
echo "Installing certutil..."
sudo apt install libnss3-tools
echo "Adding certificate to the NSS database for Chromium..."
mkdir -p $HOME/.pki/nssdb
certutil --empty-password -d $HOME/.pki/nssdb -N
certutil -d sql:$HOME/.pki/nssdb -A -t "CT,," -n dev-proxy-ca.crt -i dev-proxy-ca.crt
echo "Certificate trusted."
echo "Running Playwright tests..."
npm test
# send SIGINT to Dev Proxy to close it gracefully
echo "Stopping Dev Proxy..."
kill -INT $proxy_pid
echo "Waiting for Dev Proxy to complete..."
while true; do
if grep -q -e "DONE" -e "No requests to process" -e "An error occurred in a plugin" $log_file; then
break
fi
sleep 1
done