Korzystanie z serwera proxy deweloperów w scenariuszach ciągłej integracji/ciągłego wdrażania
Korzystanie z serwera proxy deweloperskiego w scenariuszach ciągłej integracji/ciągłego wdrażania to doskonały sposób testowania aplikacji w kontrolowanym środowisku. Po połączeniu serwera proxy deweloperów z testami, które generują żądania interfejsu API w aplikacji, możesz uwzględnić szeroką gamę scenariuszy: od zapewnienia, że aplikacja nie używa interfejsów API w tle ani nieprodukcyjnych, aby sprawdzić, czy używa minimalnych uprawnień programu Microsoft Graph. Chociaż dokładne kroki konfiguracji różnią się w zależności od systemu ciągłej integracji/ciągłego wdrażania, poniżej przedstawiono pewne ogólne zasady, które należy przestrzegać.
Konfigurowanie modułu uruchamiającego
Gdy używasz serwera proxy deweloperskiego na komputerze lokalnym, działa interaktywnie, czekając na sterowanie nim przez naciśnięcie klawiszy. Po uruchomieniu go w potoku ciągłej integracji/ciągłego wdrażania nie można kontrolować za pomocą kluczy. Aby poinstruować serwer proxy deweloperów, że powinien działać nieinterakcyjne, ustaw CI
dla środowiska wartość 1
lub true
.
Uwaga
Większość modułów uruchamianych ciągłej integracji/ciągłego CI
wdrażania ma już ustawiony zmienną środowiskową. Jeśli jednak używasz niestandardowego modułu uruchamiającego, może być konieczne ręczne ustawienie go.
Gdy serwer proxy deweloperów wykryje zmienną CI
środowiskową, nie czeka na naciśnięcie klawiszy. Następnie możesz bezpiecznie zatrzymać serwer proxy dewelopera, wysyłając SIGINT
sygnał do procesu. Zamknięcie serwera proxy deweloperskiego w sposób bezproblemowy jest konieczne, gdy rejestrujesz żądania i chcesz, aby serwer proxy deweloperów analizować je przy użyciu wtyczek raportowania. Bez zmiennej środowiskowej CI
serwer proxy deweloperów czeka na naciśnięcie klawisza Ctrl+C. Jedynym sposobem zatrzymania byłoby wymuszanie zamknięcia procesu przy użyciu metody kill -9
lub kill -KILL
, która natychmiast zatrzymuje serwer proxy deweloperów i uniemożliwia analizowanie zarejestrowanych żądań.
Instalowanie serwera proxy deweloperskiego
W większości przypadków moduł uruchamiający nie ma zainstalowanego serwera proxy deweloperów. Aby można było użyć serwera proxy deweloperskiego, należy go zainstalować. Kroki instalacji zależą od systemu operacyjnego używanego przez moduł uruchamiający.
Porada
Aby przyspieszyć potok, rozważ buforowanie folderu instalacyjnego serwera proxy deweloperów. W ten sposób nie trzeba pobierać serwera proxy deweloperskiego za każdym razem, gdy uruchamiasz potok. Aby zapoznać się z dokładnymi krokami, zapoznaj się z dokumentacją systemu ciągłej integracji/ciągłego wdrażania.
Podczas instalowania serwera proxy deweloperów w konfiguracji ciągłej integracji/ciągłego wdrażania prawdopodobnie chcesz przypiąć wersję zainstalowanego serwera proxy deweloperskiego. Przypinanie wersji gwarantuje, że potok używa tej samej wersji serwera proxy deweloperskiego za każdym razem, gdy go uruchomisz. Dokładne kroki przypinania wersji zależą od systemu operacyjnego modułu uruchamiającego. Oto przykład sposobu przypinania wersji serwera proxy deweloperskiego w module uruchamiającym opartym na systemie Linux:
# install Dev Proxy v0.18.0
bash -c "$(curl -sL https://aka.ms/devproxy/setup.sh)" -- v0.18.0
Uruchamianie serwera proxy deweloperskiego ze skryptu
Po uruchomieniu serwera proxy deweloperskiego w potoku ciągłej integracji/ciągłego wdrażania należy uruchomić go ze skryptu. Uruchamianie serwera proxy deweloperskiego ze skryptu jest konieczne, ponieważ aby bezproblemowo zamknąć serwer proxy deweloperów, musisz wysłać SIGINT
sygnał do jego procesu. Zamknięcie procesu przy użyciu SIGINT
jest możliwe tylko z poziomu skryptu z włączoną kontrolką zadania. Jeśli uruchamiasz serwer proxy deweloperów bezpośrednio z systemu ciągłej integracji/ciągłego wdrażania, proces serwera proxy deweloperów ignoruje SIGINT
sygnał i nadal działa.
Oto przykład skryptu powłoki bash z włączoną kontrolką zadania uruchamianą przez serwer proxy deweloperów:
# enable job control so that we can send SIGINT to Dev Proxy
set -m
# the rest of the script using Dev Proxy
Uruchamianie serwera proxy deweloperskiego
Po zainstalowaniu serwera proxy deweloperskiego należy go uruchomić. Podczas uruchamiania serwera proxy deweloperskiego w potoku ciągłej integracji/ciągłego wdrażania ważne jest uruchomienie go w tle. W przeciwnym razie potok zostanie zablokowany do momentu zatrzymania serwera proxy deweloperskiego.
Jeśli używasz modułu uruchamiającego opartego na systemie Linux, możesz uruchomić serwer proxy deweloperów w tle, dodając &
na końcu polecenia, na przykład ./devproxy/devproxy &
.
Poczekaj na uruchomienie serwera proxy deweloperskiego
Po uruchomieniu serwera proxy deweloperskiego w tle skrypt będzie działać natychmiast. Jednak serwer proxy deweloperów musi trochę czasu rozpocząć. Aby upewnić się, że serwer proxy deweloperów jest gotowy przed rozpoczęciem uruchamiania testów, poczekaj na jego uruchomienie. Aby poczekać na uruchomienie serwera proxy deweloperskiego, zarejestruj jego dane wyjściowe w pliku, a następnie sprawdź, czy serwer proxy deweloperów nasłuchuje żądań internetowych, na przykład:
# 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
Rejestrowanie żądań
Jeśli chcesz analizować żądania interfejsu API wystawione przez aplikację, uruchom serwer proxy deweloperów w trybie nagrywania. Serwer proxy deweloperów można uruchomić przy użyciu rejestrowania przy użyciu argumentu --record
wiersza polecenia, na przykład:
./devproxy/devproxy --record
Zatrzymywanie serwera proxy deweloperskiego
Po zakończeniu testów zatrzymaj serwer proxy deweloperów, wysyłając SIGINT
do niego sygnał. Sygnał można wysłać SIGINT
przy użyciu kill
polecenia, na przykład:
kill -INT $proxy_pid
Po zatrzymaniu procesu tworzenia serwera proxy może upłynąć chwilę, aż zostanie ona w pełni zamknięta. Jest to szczególnie istotne w przypadku skonfigurowania serwera proxy deweloperskiego w celu analizowania zarejestrowanych żądań. Aby upewnić się, że serwer proxy deweloperów zakończył przetwarzanie zarejestrowanych żądań, poczekaj na zamknięcie procesu, na przykład:
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
Po zakończeniu działania wszystkich wtyczek nagrywania serwer proxy deweloperów DONE
wyświetla komunikat do danych wyjściowych. Jeśli nie było żadnych żądań do przetworzenia, serwer proxy deweloperów No requests to process
wyświetla komunikat. Jeśli wtyczki wystąpił błąd, serwer proxy deweloperów An error occurred in a plugin
wyświetla komunikat. Po wyświetleniu dowolnego z tych komunikatów możesz mieć pewność, że serwer proxy deweloperów zakończył przetwarzanie zarejestrowanych żądań.
Przykładowy skrypt
Oto przykład skryptu powłoki bash, który uruchamia serwer proxy deweloperów, czeka na jego uruchomienie, uruchamia testy, rejestruje żądania i zatrzymuje serwer proxy deweloperów:
# 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