Partager via


Utiliser le proxy de développement dans les scénarios CI/CD

L’utilisation du proxy de développement dans des scénarios CI/CD est un excellent moyen de tester vos applications dans un environnement contrôlé. Lorsque vous combinez le proxy de développement avec des tests qui génèrent des demandes d’API dans votre application, vous pouvez couvrir un large éventail de scénarios : de vous assurer que votre application n’utilise pas d’API d’ombre ou de non-production à vérifier qu’elle utilise des autorisations Microsoft Graph minimales. Bien que les étapes de configuration exactes varient en fonction de votre système CI/CD, voici quelques principes généraux que vous devez suivre.

Configurer votre exécuteur

Lorsque vous utilisez le proxy de développement sur votre ordinateur local, il s’exécute de manière interactive, en attendant que vous le contrôlez en appuyant sur les touches. Lorsque vous l’exécutez dans un pipeline CI/CD, vous ne pouvez pas le contrôler avec des clés. Pour indiquer au proxy de développement qu’il doit s’exécuter de manière non interactive, définissez l’environnement sur CI1 ou true.

Notes

La plupart des exécuteurs CI/CD ont déjà la variable d’environnement CI définie. Toutefois, si vous utilisez un exécuteur personnalisé, vous devrez peut-être le définir manuellement.

Lorsque dev Proxy détecte la CI variable d’environnement, il n’attend pas les appuis sur les touches. Vous pouvez ensuite arrêter le proxy de développement correctement en envoyant un SIGINT signal au processus. La fermeture du proxy de développement correctement est nécessaire lorsque vous enregistrez des demandes et souhaitez que dev Proxy les analyse à l’aide de ses plug-ins de création de rapports. Sans la CI variable d’environnement, dev proxy attend que vous appuyiez sur Ctrl+C. La seule façon de l’arrêter serait de fermer de manière forcée son processus à l’aide kill -9 de ou kill -KILL, ce qui arrête immédiatement dev Proxy et l’empêche d’analyser les requêtes enregistrées.

Installer le proxy de développement

Dans la plupart des cas, le proxy de développement n’est pas installé sur votre exécuteur. Par conséquent, avant de pouvoir utiliser le proxy de développement, vous devez l’installer. Les étapes d’installation dépendent du système d’exploitation utilisé par votre exécuteur.

Conseil

Pour accélérer votre pipeline, envisagez de mettre en cache le dossier d’installation du proxy de développement. Ainsi, vous n’aurez pas besoin de télécharger le proxy de développement chaque fois que vous exécutez votre pipeline. Pour connaître les étapes exactes, reportez-vous à la documentation de votre système CI/CD.

Lorsque vous installez dev Proxy dans une configuration CI/CD, vous souhaiterez probablement épingler la version du proxy de développement que vous installez. L’épinglage de la version garantit que votre pipeline utilise la même version de Dev Proxy chaque fois que vous l’exécutez. Les étapes exactes pour épingler une version dépendent du système d’exploitation de votre exécuteur. Voici un exemple de la façon dont vous pouvez épingler la version du proxy de développement sur un exécuteur Linux :

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

Exécuter le proxy de développement à partir d’un script

Lorsque vous exécutez le proxy de développement dans un pipeline CI/CD, vous devez le démarrer à partir d’un script. Le démarrage du proxy de développement à partir d’un script est nécessaire, car pour fermer le proxy dev correctement, vous devez envoyer un SIGINT signal à son processus. La fermeture d’un processus à l’aide SIGINT de n’est possible qu’à partir d’un script avec le contrôle de travail activé. Si vous démarrez dev Proxy directement à partir de votre système CI/CD, le processus Dev Proxy ignore le SIGINT signal et continue à s’exécuter.

Voici un exemple de script bash avec le contrôle de travail activé qui démarre le proxy de développement :

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

# the rest of the script using Dev Proxy

Exécuter le proxy de développement

Après avoir installé Dev Proxy, vous devez le démarrer. Lorsque vous démarrez un proxy de développement dans un pipeline CI/CD, il est important que vous le démarrez en arrière-plan. Sinon, votre pipeline est bloqué jusqu’à ce que vous arrêtiez dev Proxy.

Si vous utilisez un exécuteur Linux, vous pouvez démarrer le proxy de développement en arrière-plan en ajoutant & à la fin de la commande, par exemple ./devproxy/devproxy &.

Attendez que le proxy de développement démarre

Lorsque vous démarrez dev Proxy en arrière-plan, votre script continue de s’exécuter immédiatement. Toutefois, le proxy de développement a besoin d’un certain temps pour démarrer. Pour vous assurer que le proxy de développement est prêt avant de commencer à exécuter vos tests, attendez qu’il démarre. Pour attendre le démarrage du proxy de développement, consignez sa sortie dans un fichier, puis vérifiez si le proxy de développement écoute les requêtes web, par exemple :

# 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

Enregistrer les demandes

Si vous souhaitez analyser les demandes d’API émises par votre application, démarrez Dev Proxy en mode enregistrement. Vous pouvez démarrer dev Proxy avec l’enregistrement, à l’aide de l’argument --record de ligne de commande, par exemple :

./devproxy/devproxy --record

Arrêter le proxy de développement

Une fois vos tests terminés, arrêtez dev Proxy en lui envoyant un SIGINT signal. Vous pouvez envoyer le signal à l’aide SIGINT de la kill commande, par exemple :

kill -INT $proxy_pid

Une fois que vous avez arrêté le processus dev Proxy, la fermeture complète peut prendre un certain temps. C’est particulièrement le cas lorsque vous configurez le proxy de développement pour analyser les requêtes enregistrées. Pour vous assurer que le proxy de développement a terminé le traitement des demandes enregistrées, attendez que le processus se ferme, par exemple :

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

Lorsque tous les plug-ins d’enregistrement se terminent, le proxy de développement imprime le DONE message dans la sortie. S’il n’y a pas eu de demandes à traiter, le proxy de développement imprime le No requests to process message. Si une erreur s’est produite dans un plug-in, dev Proxy imprime le An error occurred in a plugin message. Lorsque vous voyez l’un de ces messages, vous pouvez être sûr que le proxy de développement a terminé le traitement des demandes enregistrées.

Exemple de script

Voici un exemple de script bash qui démarre le proxy de développement, attend qu’il démarre, exécute des tests, enregistre des demandes et arrête le proxy de développement :

# 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