Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Использование прокси-сервера разработки в сценариях CI/CD — отличный способ тестирования приложений в управляемой среде. При объединении Dev Proxy с тестами, создающими запросы API в вашем приложении, можно охватить широкий спектр сценариев: от проверки, что приложение не использует неофициальные или непроизводственные API, до проверки использования минимальных разрешений Microsoft Graph. Хотя точные шаги конфигурации зависят от системы CI/CD, ниже приведены некоторые общие принципы, которые следует выполнить.
Настройка исполнителя
При использовании прокси-сервера разработки на локальном компьютере он работает в интерактивном режиме, ожидая, когда вы будете управлять им, нажав клавиши. При запуске в конвейере CI/CD его нельзя управлять ключами. Чтобы указать Прокси сервера разработки, что он должен выполняться неинтерактивно, задайте для среды CI
значение 1
или true
.
Заметка
Большинство средств выполнения CI/CD уже имеют набор переменных среды CI
. Однако если вы используете пользовательский модуль выполнения, может потребоваться вручную установить его.
Когда прокси-сервер Dev обнаруживает переменную среды CI
, он не ждёт нажатий клавиш. Затем вы можете остановить прокси-сервер разработки, отправив сигнал "SIGINT
" в процесс. Корректное закрытие прокси-сервера разработки необходимо, если вы записываете запросы и хотите, чтобы он проанализировал их через плагины для отчетов. Без переменной среды CI
прокси-сервер разработки ожидал бы, пока вы не нажмёте Ctrl +C. Единственный способ остановить процесс будет принудительно закрыть процесс с помощью kill -9
или kill -KILL
, что останавливает прокси-сервер разработки немедленно и предотвращает его анализ записанных запросов.
Установка прокси-сервера разработки
В большинстве случаев у вашего runner не установлен Dev Proxy. Таким образом, прежде чем использовать прокси-сервер разработки, необходимо установить его. Этапы установки зависят от операционной системы, которую использует ваш runner.
Подсказка
Чтобы ускорить ваш конвейер, рассмотрите кэширование папки установки Dev Proxy. Таким образом, вам не нужно загружать Dev Proxy каждый раз, когда вы запускаете конвейер. Подробные инструкции см. в документации по системе CI/CD.
При установке прокси-сервера разработки в установке CI/CD вы, скорее всего, хотите закрепить версию прокси-сервера разработки, которую вы установили. Закрепление версии гарантирует, что конвейер использует одну и ту же версию прокси-сервера разработки при каждом запуске. Точные шаги по закреплению версии зависят от операционной системы вашей исполняющей среды. Ниже приведен пример того, как можно закрепить версию прокси-сервера разработки на сервере runner под управлением Linux:
# install Dev Proxy v0.29.2
bash -c "$(curl -sL https://aka.ms/devproxy/setup.sh)" -- v0.29.2
Запуск прокси-сервера разработки из скрипта
При запуске Dev Proxy в конвейере CI/CD необходимо запускать его из скрипта. Запуск прокси-сервера разработки из скрипта необходим, так как для корректного закрытия прокси-сервера разработки необходимо отправить сигнал SIGINT
в процесс. Закрытие процесса с помощью SIGINT
возможно только из скрипта с включенным элементом управления заданием. При запуске прокси-сервера разработки непосредственно из системы CI/CD процесс прокси-сервера разработки игнорирует сигнал SIGINT
и продолжает работать.
Ниже приведен пример скрипта bash с включенным элементом управления заданием, который запускает прокси-сервер разработки:
# enable job control so that we can send SIGINT to Dev Proxy
set -m
# the rest of the script using Dev Proxy
Запуск прокси-сервера разработки
После установки прокси-сервера разработки необходимо запустить его. При запуске прокси-сервера разработки в конвейере CI/CD важно, чтобы он запускался в фоновом режиме. В противном случае конвейер блокируется до тех пор, пока вы не остановите прокси-сервер разработки.
Если вы используете средство выполнения на основе Linux, вы можете запустить прокси-сервер разработки в фоновом режиме, добавив &
в конце команды, например ./devproxy/devproxy &
.
Дождитесь запуска прокси-сервера разработки
При запуске прокси-сервера разработки в фоновом режиме скрипт продолжает выполняться немедленно. Однако для запуска прокси-сервера разработки требуется некоторое время. Чтобы убедиться, что прокси-сервер разработки готов перед началом выполнения тестов, дождитесь его запуска. Чтобы дождаться запуска прокси-сервера разработки, запишите его вывод в файл, а затем проверьте, прослушивает ли прокси-сервер разработки веб-запросы, например:
# 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
Запросы записи
Если вы хотите проанализировать запросы API, выданные приложением, запустите прокси разработки в режиме записи. Вы можете запустить прокси-сервер разработки с записью, используя аргумент командной строки --record
, например:
./devproxy/devproxy --record
Остановка прокси-сервера разработки
После завершения тестов остановите прокси-сервер разработки, отправив в него сигнал SIGINT
. Вы можете отправить сигнал SIGINT
с помощью команды kill
, например:
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
После завершения работы всех подключаемых модулей записи Dev Proxy выводит сообщение DONE
в консоль. Если не было запросов на обработку, прокси-сервер разработки печатает сообщение No requests to process
. Если в подключаемом модуле произошла ошибка, Dev Proxy выводит сообщение An error occurred in a plugin
. Когда вы увидите любое из этих сообщений, вы можете убедиться, что прокси-сервер разработки завершил обработку записанных запросов.
Пример скрипта
Ниже приведен пример скрипта bash, который запускает прокси-сервер разработки, ожидает запуска, выполняет тесты, записывает запросы и останавливает прокси-сервер разработки:
# 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