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 in een gecontroleerde omgeving te testen. Wanneer u Dev Proxy combineert met tests voor het genereren van API-aanvragen in uw toepassing, kunt u een breed scala aan scenario's behandelen: van het garanderen dat uw app geen schaduw- of niet-productie-API's gebruikt om te controleren of er minimale Microsoft Graph-machtigingen worden gebruikt. Hoewel de exacte configuratiestappen variëren, afhankelijk van uw CI/CD-systeem, volgen hier enkele algemene principes die u moet volgen.

Uw runner configureren

Wanneer u Dev Proxy op uw lokale computer gebruikt, wordt deze interactief uitgevoerd, zodat u deze kunt beheren door op de 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 al de CI omgevingsvariabele ingesteld. Als u echter een aangepaste runner gebruikt, moet u deze mogelijk handmatig instellen.

Wanneer Dev Proxy de omgevingsvariabele CI detecteert, wordt er niet gewacht op toetsdrukken. Vervolgens kunt u Dev Proxy op een goede manier stoppen door een SIGINT signaal naar het proces te verzenden. Het op een nette manier sluiten van Dev Proxy is noodzakelijk wanneer u aanvragen registreert en wilt dat Dev Proxy deze analyseert met behulp van de rapportage-invoegtoepassingen. Zonder de omgevingsvariabele CI, wacht dev proxy totdat u op Ctrl+C-drukt. De enige manier om het 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 voor 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

U kunt de pijplijn versnellen door de map Dev Proxy-installatie in de cache op te slaan. Op deze manier hoeft u de Dev Proxy niet telkens 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 vastzetten die u installeert. Door de versie vast te maken, zorgt u ervoor dat uw pijplijn steeds dezelfde versie van Dev Proxy gebruikt wanneer u deze uitvoert. De exacte stappen voor het vastzetten van een versie zijn afhankelijk van het besturingssysteem van uw runner. Hier volgt een voorbeeld van hoe u de versie van Dev Proxy kunt vastmaken aan 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 nodig, omdat u een SIGINT signaal naar het proces moet verzenden om dev proxy correct 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 vanuit uw CI/CD-systeem start, negeert het Dev Proxy-proces het SIGINT signaal en blijft actief.

Hier volgt een voorbeeld van een bash-script waarvoor taakbeheer is 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. Wanneer u Dev Proxy in een CI/CD-pijplijn start, 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 & toe te voegen aan het einde van de opdracht, bijvoorbeeld ./devproxy/devproxy &.

Wacht tot de dev-proxy is gestart

Wanneer u Dev Proxy op de achtergrond start, wordt het 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 wordt gestart. Als u wilt wachten tot dev proxy is gestart, meldt u de uitvoer aan een bestand en controleert u 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

Aanvragen registreren

Als u API-aanvragen wilt analyseren die zijn uitgegeven door uw app, start u Dev Proxy in de opnamemodus. U kunt Dev Proxy met opname starten 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 opdracht kill, 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 voor het analyseren van vastgelegde aanvragen. Wacht totdat het proces is gesloten om ervoor te zorgen dat dev proxy de vastgelegde aanvragen heeft verwerkt, 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 opnameinvoegtoepassingen 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, drukt Dev Proxy het An error occurred in a plugin bericht af. Wanneer u een van deze berichten ziet, kunt u ervoor zorgen dat dev proxy klaar is met het verwerken van de geregistreerde aanvragen.

Voorbeeldscript

Hier volgt een voorbeeld van een bash-script waarmee Dev Proxy wordt gestart, wordt gewacht totdat het wordt gestart, tests worden uitgevoerd, aanvragen voor records worden uitgevoerd en dev proxy wordt gestopt:

# 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