Použití vývojového proxy serveru ve scénářích CI/CD
Použití vývojového proxy serveru ve scénářích CI/CD je skvělý způsob, jak otestovat aplikace v řízeném prostředí. Když zkombinujete vývojový proxy server s testy, které ve vaší aplikaci generují požadavky rozhraní API, můžete projít celou řadu scénářů: od zajištění, že vaše aplikace nepoužívá stínová nebo neprodukční rozhraní API, až po kontrolu, jestli používá minimální oprávnění Microsoft Graphu. I když se přesný postup konfigurace liší v závislosti na vašem systému CI/CD, tady jsou některé obecné zásady, kterými byste se měli řídit.
Konfigurace runneru
Když na místním počítači používáte dev Proxy, běží interaktivně a čeká na to, až ho budete ovládat stisknutím kláves. Když ho spustíte v kanálu CI/CD, nemůžete ho ovládat pomocí klíčů. Pokud chcete dát vývojovému proxy serveru pokyn, aby běžel neinteraktivně, nastavte CI
prostředí na 1
nebo true
.
Poznámka
Většina běžců CI/CD už má nastavenou proměnnou CI
prostředí. Pokud ale používáte vlastní runner, možná ho budete muset nastavit ručně.
Když dev proxy zjistí proměnnou CI
prostředí, nečeká na stisknutí kláves. Dev Proxy pak můžete řádně zastavit odesláním SIGINT
signálu do procesu. Pokud zaznamenáváte požadavky a chcete, aby je služba Dev Proxy analyzovala pomocí modulů plug-in pro generování sestav, je nutné řádně zavírat proxy vývojáře. CI
Bez proměnné prostředí by dev proxy počkalo, až stisknete Ctrl+C. Jediným způsobem, jak ho zastavit, je vynuceně zavřít proces pomocí příkazu kill -9
nebo kill -KILL
, který okamžitě zastaví službu Dev Proxy a zabrání jí v analýze zaznamenaných požadavků.
Instalace vývojového proxy serveru
Ve většině případů nemá váš běžec nainstalovaný Dev Proxy. Proto než budete moct dev proxy používat, musíte ho nainstalovat. Postup instalace závisí na operačním systému, který váš runner používá.
Tip
Pokud chcete kanál urychlit, zvažte ukládání instalační složky dev proxy do mezipaměti. Díky tomu nebudete muset stahovat dev Proxy při každém spuštění kanálu. Přesný postup najdete v dokumentaci k systému CI/CD.
Při instalaci dev proxy serveru v instalaci CI/CD budete pravděpodobně chtít připnout verzi dev Proxy, kterou nainstalujete. Připnutím verze zajistíte, že kanál bude při každém spuštění používat stejnou verzi dev proxy serveru. Přesný postup připnutí verze závisí na operačním systému vašeho runneru. Tady je příklad, jak můžete připnout verzi vývojového proxy serveru na linuxovém runneru:
# install Dev Proxy v0.18.0
bash -c "$(curl -sL https://aka.ms/devproxy/setup.sh)" -- v0.18.0
Spuštění vývojového proxy serveru ze skriptu
Když spouštíte dev Proxy v kanálu CI/CD, musíte ho spustit ze skriptu. Spuštění proxy serveru pro vývoj ze skriptu je nezbytné, protože k řádnému zavření dev proxy serveru je potřeba odeslat SIGINT
signál do procesu. Zavření procesu pomocí je SIGINT
možné pouze ze skriptu s povoleným řízením úloh. Pokud spustíte dev Proxy přímo ze systému CI/CD, proces dev proxy bude signál ignorovat SIGINT
a bude dál běžet.
Tady je příklad skriptu Bash s povoleným řízením úloh, který spouští dev proxy:
# enable job control so that we can send SIGINT to Dev Proxy
set -m
# the rest of the script using Dev Proxy
Spuštění vývojového proxy serveru
Po instalaci dev proxy serveru ho musíte spustit. Při spouštění dev proxy v kanálu CI/CD je důležité, abyste ho spustili na pozadí. V opačném případě se váš kanál zablokuje, dokud nezastavíte vývojový proxy server.
Pokud používáte linuxový runner, můžete dev Proxy spustit na pozadí přidáním &
na konec příkazu, například ./devproxy/devproxy &
.
Počkejte, až se spustí dev proxy server.
Když na pozadí spustíte dev Proxy, bude se váš skript okamžitě spouštět. Dev Proxy ale potřebuje nějaký čas ke spuštění. Abyste měli jistotu, že dev Proxy je před spuštěním testů připravená, počkejte, až se spustí. Pokud chcete počkat na spuštění vývojového proxy serveru, zapište jeho výstup do souboru a pak zkontrolujte, jestli dev Proxy naslouchá webovým požadavkům, například:
# 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
Zaznamenat žádosti
Pokud chcete analyzovat požadavky rozhraní API vydané vaší aplikací, spusťte Dev Proxy v režimu záznamu. Dev Proxy můžete spustit pomocí záznamu pomocí argumentu příkazového --record
řádku, například:
./devproxy/devproxy --record
Zastavit proxy vývoj
Jakmile dokončíte testy, zastavte dev proxy tím, že do něj pošlete SIGINT
signál. Signál můžete odeslat SIGINT
pomocí kill
příkazu , například:
kill -INT $proxy_pid
Po zastavení procesu dev proxy může chvíli trvat, než se úplně zavře. To je zejména případ, kdy nakonfigurujete proxy pro vývoj k analýze zaznamenaných požadavků. Pokud chcete zajistit, aby služba Dev Proxy dokončila zpracování zaznamenaných požadavků, počkejte na ukončení procesu, například:
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
Jakmile se všechny moduly plug-in pro nahrávání dokončí, dev Proxy zprávu vytiskne DONE
do výstupu. Pokud neexistují žádné požadavky na zpracování, dev Proxy zprávu vytiskne No requests to process
. Pokud došlo k chybě v modulu plug-in, dev Proxy tuto zprávu vytiskne An error occurred in a plugin
. Když se zobrazí některá z těchto zpráv, můžete si být jistí, že služba Dev Proxy dokončila zpracování zaznamenaných požadavků.
Ukázkový skript
Tady je příklad skriptu Bash, který spustí proxy vývoj, počká na jeho spuštění, spustí testy, zaznamenává požadavky a zastaví proxy vývoj:
# 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