Delen via


Dev Proxy gebruiken in CI/CD-scenario's

Het gebruik van Dev Proxy in CI/CD-scenario's is een uitstekende manier om uw toepassingen te testen in een gecontroleerde omgeving. Wanneer u Dev Proxy combineert met tests die API-aanvragen genereren in uw toepassing, kunt u een breed scala aan scenario's behandelen: van ervoor zorgen dat uw app geen schaduw- of niet-productie-API's gebruikt tot controleren of er minimale Microsoft Graph-machtigingen worden gebruikt. Hoewel de exacte configuratiestappen variëren afhankelijk van uw CI/CD-systeem, zijn hier enkele algemene principes die u moet volgen.

Uw runner configureren

Wanneer u Dev Proxy op uw lokale computer gebruikt, wordt deze interactief uitgevoerd en wacht totdat u deze beheert door op toetsen te drukken. Wanneer u deze uitvoert in een CI/CD-pijplijn, kunt u deze niet beheren met sleutels. Als u dev proxy wilt instrueren dat deze niet-interactief moet worden uitgevoerd, stelt u de CI omgeving in op 1 of true.

Notitie

De meeste CI/CD-hardlopers hebben de CI omgevingsvariabele al ingesteld. Als u echter een aangepaste runner gebruikt, moet u deze mogelijk handmatig instellen.

Wanneer Dev Proxy de CI omgevingsvariabele detecteert, wacht deze niet op toetsdrukken. Vervolgens kunt u Dev Proxy probleemloos stoppen door een SIGINT signaal naar het proces te verzenden. Het is nodig om Dev Proxy correct te sluiten wanneer u aanvragen opneemt en wilt dat Dev Proxy deze analyseert met behulp van de rapportage-invoegtoepassingen. Zonder de omgevingsvariabele CI zou Dev Proxy wachten tot u op Ctrl+C drukt. De enige manier om dit te stoppen, is door het proces geforceerd te sluiten met behulp van kill -9 of kill -KILL, waardoor Dev Proxy onmiddellijk wordt gestopt en wordt voorkomen dat de vastgelegde aanvragen worden geanalyseerd.

Dev Proxy installeren

In de meeste gevallen is dev proxy niet geïnstalleerd op uw runner. Dus voordat u Dev Proxy kunt gebruiken, moet u deze installeren. De installatiestappen zijn afhankelijk van het besturingssysteem dat uw runner gebruikt.

Tip

Als u uw pijplijn wilt versnellen, kunt u overwegen de installatiemap Dev Proxy in de cache op te slaan. Op deze manier hoeft u de Dev Proxy niet elke keer te downloaden wanneer u uw pijplijn uitvoert. Raadpleeg de documentatie van uw CI/CD-systeem voor de exacte stappen.

Wanneer u Dev Proxy installeert in een CI/CD-installatie, wilt u waarschijnlijk de versie van Dev Proxy vastmaken die u installeert. Door de versie vast te maken, zorgt u ervoor dat uw pijplijn dezelfde versie van Dev Proxy gebruikt wanneer u deze uitvoert. De exacte stappen voor het vastmaken van een versie zijn afhankelijk van het besturingssysteem van uw runner. Hier volgt een voorbeeld van hoe u de versie van Dev Proxy vast kunt maken op een linux-runner:

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

Dev Proxy uitvoeren vanuit een script

Wanneer u Dev Proxy uitvoert in een CI/CD-pijplijn, moet u deze starten vanuit een script. Het starten van Dev Proxy vanuit een script is noodzakelijk, omdat u een SIGINT signaal naar het proces moet verzenden om Dev Proxy probleemloos te sluiten. Het sluiten van een proces met behulp van SIGINT is alleen mogelijk vanuit een script waarvoor taakbeheer is ingeschakeld. Als u Dev Proxy rechtstreeks start vanuit uw CI/CD-systeem, negeert het Dev Proxy-proces het SIGINT signaal en blijft het actief.

Hier volgt een voorbeeld van een bash-script met taakbeheer ingeschakeld waarmee Dev Proxy wordt gestart:

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

# the rest of the script using Dev Proxy

Dev Proxy uitvoeren

Nadat u Dev Proxy hebt geïnstalleerd, moet u deze starten. Bij het starten van Dev Proxy in een CI/CD-pijplijn is het belangrijk dat u deze op de achtergrond start. Anders wordt uw pijplijn geblokkeerd totdat u Dev Proxy stopt.

Als u een linux-runner gebruikt, kunt u Dev Proxy op de achtergrond starten door aan het einde van de opdracht toe te voegen & , bijvoorbeeld ./devproxy/devproxy &.

Wacht tot dev proxy is gestart

Wanneer u Dev Proxy op de achtergrond start, wordt uw script onmiddellijk uitgevoerd. Dev Proxy heeft echter enige tijd nodig om te starten. Om ervoor te zorgen dat Dev Proxy gereed is voordat u begint met het uitvoeren van uw tests, wacht u totdat deze is gestart. Als u wilt wachten tot dev proxy wordt gestart, meldt u de uitvoer aan een bestand en controleert u vervolgens of Dev Proxy luistert naar webaanvragen, bijvoorbeeld:

# 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

Recordaanvragen

Als u API-aanvragen wilt analyseren die zijn uitgegeven door uw app, start u Dev Proxy in de opnamemodus. U kunt Dev Proxy starten met opname, met behulp van het --record opdrachtregelargument, bijvoorbeeld:

./devproxy/devproxy --record

Dev Proxy stoppen

Nadat u klaar bent met uw tests, stopt u Dev Proxy door er een SIGINT signaal naar te verzenden. U kunt het SIGINT signaal verzenden met behulp van de kill opdracht, bijvoorbeeld:

kill -INT $proxy_pid

Nadat u het Dev Proxy-proces hebt gestopt, kan het even duren voordat het volledig is gesloten. Dit is met name het geval wanneer u Dev Proxy configureert om opgenomen aanvragen te analyseren. Om ervoor te zorgen dat Dev Proxy klaar is met het verwerken van de opgenomen aanvragen, wacht u totdat het proces is gesloten, bijvoorbeeld:

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

Wanneer alle opname-invoegtoepassingen zijn uitgevoerd, drukt Dev Proxy het DONE bericht af naar de uitvoer. Als er geen aanvragen zijn om te verwerken, drukt Dev Proxy het No requests to process bericht af. Als er een fout is opgetreden in een invoegtoepassing, wordt het An error occurred in a plugin bericht door Dev Proxy afgedrukt. Wanneer u een van deze berichten ziet, kunt u er zeker van zijn dat Dev Proxy de opgenomen aanvragen heeft verwerkt.

Voorbeeldscript

Hier volgt een voorbeeld van een bash-script dat Dev Proxy start, wacht totdat deze wordt gestart, tests uitvoert, aanvragen registreert en Dev Proxy stopt:

# 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