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 CI
1
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