Compartir a través de


Uso del proxy de desarrollo en escenarios de CI/CD

El uso del proxy de desarrollo en escenarios de CI/CD es una excelente manera de probar las aplicaciones en un entorno controlado. Al combinar Dev Proxy con pruebas que generan solicitudes de API en la aplicación, puede cubrir una amplia gama de escenarios: desde garantizar que la aplicación no use API de sombras o no de producción para comprobar que usa permisos mínimos de Microsoft Graph. Aunque los pasos de configuración exactos varían en función del sistema de CI/CD, estos son algunos principios generales que debe seguir.

Configuración del ejecutor

Cuando se usa Dev Proxy en el equipo local, se ejecuta de forma interactiva, esperando a controlarlo presionando las teclas. Cuando se ejecuta en una canalización de CI/CD, no se puede controlar con claves. Para indicar al proxy de desarrollo que se debe ejecutar de forma no interactiva, establezca el CI entorno 1 en o true.

Nota

La mayoría de los ejecutores de CI/CD ya tienen establecida la variable de CI entorno. Sin embargo, si usa un ejecutor personalizado, es posible que tenga que establecerlo manualmente.

Cuando Dev Proxy detecta la CI variable de entorno, no espera a que presione la tecla. Después, puede detener de forma correcta el proxy de desarrollo enviando una SIGINT señal al proceso. El cierre correcto del proxy de desarrollo es necesario cuando registra solicitudes y quiere que el proxy de desarrollo los analice mediante sus complementos de informes. Sin la CI variable de entorno, Dev Proxy esperaría a que presione Ctrl+C. La única manera de detenerlo sería cerrar con fuerza su proceso mediante kill -9 o kill -KILL, que detiene de inmediato el Proxy de desarrollo e impide que analice las solicitudes grabadas.

Instalación del proxy de desarrollo

En la mayoría de los casos, el ejecutor no tiene instalado el proxy de desarrollo. Por lo tanto, para poder usar el proxy de desarrollo, debe instalarlo. Los pasos de instalación dependen del sistema operativo que usa el ejecutor.

Sugerencia

Para acelerar la canalización, considere la posibilidad de almacenar en caché la carpeta de instalación del proxy de desarrollo. De este modo, no tendrá que descargar el proxy de desarrollo cada vez que ejecute la canalización. Para conocer los pasos exactos, consulte la documentación del sistema de CI/CD.

Al instalar Dev Proxy en una instalación de CI/CD, es probable que quiera anclar la versión del proxy de desarrollo que instale. Anclar la versión garantiza que la canalización use la misma versión del proxy de desarrollo cada vez que la ejecute. Los pasos exactos para anclar una versión dependen del sistema operativo del ejecutor. Este es un ejemplo de cómo puede anclar la versión del proxy de desarrollo en un ejecutor basado en Linux:

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

Ejecución del proxy de desarrollo desde un script

Al ejecutar el proxy de desarrollo en una canalización de CI/CD, debe iniciarlo desde un script. Es necesario iniciar el proxy de desarrollo desde un script, ya que para cerrar el proxy de desarrollo correctamente, debe enviar una SIGINT señal a su proceso. Cerrar un proceso mediante SIGINT solo es posible desde un script con el control de trabajo habilitado. Si inicia el proxy de desarrollo directamente desde el sistema ci/CD, el proceso de proxy de desarrollo omite la SIGINT señal y sigue ejecutándose.

Este es un ejemplo de un script de Bash con el control de trabajo habilitado que inicia dev Proxy:

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

# the rest of the script using Dev Proxy

Ejecutar proxy de desarrollo

Después de instalar dev Proxy, debe iniciarlo. Al iniciar el proxy de desarrollo en una canalización de CI/CD, es importante que lo inicie en segundo plano. De lo contrario, la canalización se bloquea hasta que detenga el proxy de desarrollo.

Si usa un ejecutor basado en Linux, puede iniciar el proxy de desarrollo en segundo plano agregando & al final del comando, por ejemplo ./devproxy/devproxy &.

Espere a que se inicie el proxy de desarrollo

Al iniciar dev Proxy en segundo plano, el script continúa ejecutándose inmediatamente. Sin embargo, el proxy de desarrollo necesita algún tiempo para iniciarse. Para asegurarse de que el proxy de desarrollo está listo antes de empezar a ejecutar las pruebas, espere a que se inicie. Para esperar a que se inicie el proxy de desarrollo, registre su salida en un archivo y, a continuación, compruebe si el proxy de desarrollo está escuchando solicitudes web, por ejemplo:

# 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

Registrar solicitudes

Si quiere analizar las solicitudes de API emitidas por la aplicación, inicie Dev Proxy en el modo de grabación. Puede iniciar dev Proxy con grabación, mediante el --record argumento de línea de comandos, por ejemplo:

./devproxy/devproxy --record

Detener proxy de desarrollo

Una vez que haya terminado con las pruebas, detenga el proxy de desarrollo mediante el envío de una SIGINT señal a ella. Puede enviar la SIGINT señal mediante el kill comando , por ejemplo:

kill -INT $proxy_pid

Después de detener el proceso del proxy de desarrollo, puede tardar un momento en cerrarse por completo. Este es especialmente el caso, cuando configura el proxy de desarrollo para analizar las solicitudes grabadas. Para asegurarse de que el proxy de desarrollo ha terminado de procesar las solicitudes grabadas, espere a que se cierre el proceso, por ejemplo:

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

Cuando todos los complementos de grabación terminen de ejecutarse, Dev Proxy imprime el DONE mensaje en la salida. Si no había solicitudes para procesar, Dev Proxy imprime el No requests to process mensaje. Si se produjo un error en un complemento, Dev Proxy imprime el An error occurred in a plugin mensaje. Cuando vea cualquiera de estos mensajes, puede asegurarse de que el proxy de desarrollo ha terminado de procesar las solicitudes grabadas.

Script de ejemplo

Este es un ejemplo de un script de Bash que inicia el proxy de desarrollo, espera a que se inicie, ejecute pruebas, registre solicitudes y detenga el proxy de desarrollo:

# 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