Partilhar via


Utilizar o Proxy de Programador em cenários de CI/CD

A utilização do Proxy de Programador em cenários de CI/CD é uma excelente forma de testar as suas aplicações num ambiente controlado. Quando combina o Proxy de Programador com testes que geram pedidos de API na sua aplicação, pode abranger uma vasta gama de cenários: desde garantir que a sua aplicação não utiliza APIs sombra ou de não produção para verificar se utiliza permissões mínimas do Microsoft Graph. Embora os passos de configuração exatos variem consoante o seu sistema CI/CD, seguem-se alguns princípios gerais que deve seguir.

Configurar o seu corredor

Quando utiliza o Proxy de Programador no seu computador local, este é executado interativamente, à espera que o controle ao premir as teclas. Quando o executa num pipeline CI/CD, não pode controlá-lo com chaves. Para instruir o Proxy de Programador de que deve ser executado de forma não interativa, defina o CI ambiente como 1 ou true.

Nota

A maioria dos corredores de CI/CD já tem a variável de CI ambiente definida. No entanto, se estiver a utilizar um corredor personalizado, poderá ter de o definir manualmente.

Quando o Proxy Dev deteta a CI variável de ambiente, não aguarda as teclas premidas. Em seguida, pode parar o Proxy de Programador corretamente ao enviar um SIGINT sinal para o processo. Fechar o Proxy de Programador corretamente é necessário quando grava pedidos e quer que o Proxy deV os analise com os plug-ins de relatórios. Sem a CI variável de ambiente, o Proxy de Programador esperaria que premisse Ctrl+C. A única forma de o parar seria fechar com força o processo através kill -9 de ou kill -KILL, o que para imediatamente o Proxy de Programador e impede que analise os pedidos registados.

Instalar o Proxy de Programador

Na maioria dos casos, o seu corredor não tem o Proxy Dev instalado. Por isso, antes de poder utilizar o Proxy Dev, tem de instalá-lo. Os passos de instalação dependem do sistema operativo que o seu corredor utiliza.

Dica

Para acelerar o pipeline, considere colocar em cache a pasta de instalação do Proxy Dev. Desta forma, não terá de transferir o Proxy de Programador sempre que executar o pipeline. Para obter os passos exatos, veja a documentação do seu sistema CI/CD.

Ao instalar o Proxy de Programador numa configuração ci/CD, é provável que queira afixar a versão do Proxy Dev que instalar. Afixar a versão garante que o pipeline utiliza a mesma versão do Proxy Dev sempre que a executar. Os passos exatos para afixar uma versão dependem do sistema operativo do seu corredor. Eis um exemplo de como pode afixar a versão do Proxy Dev num corredor baseado em Linux:

# install Dev Proxy v0.18.0
bash -c "$(curl -sL https://aka.ms/devproxy/setup.sh)" -- v0.18.0

Executar o Proxy de Programador a partir de um script

Quando executa o Proxy de Programador num pipeline ci/CD, tem de iniciá-lo a partir de um script. É necessário iniciar o Proxy de Programador a partir de um script porque, para fechar o Proxy deV corretamente, tem de enviar um SIGINT sinal para o processo. Fechar um processo com SIGINT é possível apenas a partir de um script com o controlo de tarefas ativado. Se iniciar o Proxy de Programador diretamente a partir do seu sistema CI/CD, o processo de Proxy Dev ignora o SIGINT sinal e continua em execução.

Eis um exemplo de um script bash com o controlo de tarefas ativado que inicia o Proxy de Programador:

# enable job control so that we can send SIGINT to Dev Proxy
set -m

# the rest of the script using Dev Proxy

Executar o Proxy de Desenvolvimento

Depois de instalar o Proxy de Programador, tem de iniciá-lo. Ao iniciar o Proxy de Programador num pipeline ci/CD, é importante que o inicie em segundo plano. Caso contrário, o pipeline é bloqueado até parar o Proxy de Programador.

Se estiver a utilizar um corredor baseado em Linux, pode iniciar o Proxy de Programador em segundo plano ao adicionar & no final do comando, por exemplo ./devproxy/devproxy &.

Aguarde pelo início do Proxy de Programador

Quando inicia o Proxy de Programador em segundo plano, o script continua a ser executado imediatamente. No entanto, o Proxy de Programador precisa de algum tempo para iniciar. Para garantir que o Proxy de Programador está pronto antes de começar a executar os testes, aguarde que seja iniciado. Para aguardar que o Proxy deV seja iniciado, registe a saída num ficheiro e, em seguida, verifique se o Proxy Dev está à escuta de pedidos 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

Registar pedidos

Se quiser analisar os pedidos de API emitidos pela sua aplicação, inicie o Proxy de Programador no modo de gravação. Pode iniciar o Proxy de Programador com a gravação, utilizando o argumento da --record linha de comandos, por exemplo:

./devproxy/devproxy --record

Parar Proxy de Programador

Depois de terminar os testes, pare o Proxy de Programador ao enviar um SIGINT sinal para o mesmo. Pode enviar o SIGINT sinal com o kill comando , por exemplo:

kill -INT $proxy_pid

Depois de parar o processo de Proxy deV, pode demorar algum tempo até que seja totalmente fechado. Este é especialmente o caso, quando configura o Proxy de Programador para analisar pedidos registados. Para garantir que o Proxy de Programador terminou o processamento dos pedidos registados, aguarde que o processo feche, 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 terminarem de ser executados, o Proxy Dev imprime a DONE mensagem na saída. Se não existirem pedidos para processar, o Proxy Dev imprime a No requests to process mensagem. Se ocorrer um erro num plug-in, o Proxy Dev imprime a An error occurred in a plugin mensagem. Quando vir qualquer uma destas mensagens, pode ter a certeza de que o Dev Proxy concluiu o processamento dos pedidos registados.

Script de exemplo

Eis um exemplo de um script bash que inicia o Proxy de Programador, aguarda que seja iniciado, executa testes, regista pedidos e para o Proxy Dev:

# 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