次の方法で共有


CI/CD シナリオで開発プロキシを使用する

CI/CD シナリオで開発プロキシを使用することは、制御された環境でアプリケーションをテストするための優れた方法です。 アプリケーションで API 要求を生成するテストと Dev Proxy を組み合わせると、アプリでシャドウまたは非運用環境の API が使用されていないことの確認から、最小限の Microsoft Graph アクセス許可が使用されていることを確認するなど、さまざまなシナリオに対応できます。 正確な構成手順は CI/CD システムによって異なりますが、以下に従う必要がある一般的な原則をいくつか示します。

ランナーを構成する

ローカル コンピューターで Dev Proxy を使用すると、キーを押して制御するまで、対話形式で実行されます。 CI/CD パイプラインで実行する場合、キーで制御することはできません。 非対話型で実行するように Dev Proxy に指示するには、環境を または true1設定しますCI

注意

ほとんどの CI/CD ランナーには、環境変数が既に CI 設定されています。 ただし、カスタム ランナーを使用している場合は、手動で設定する必要がある場合があります。

Dev Proxy が環境変数を CI 検出しても、キーが押されるまで待機しません。 その後、プロセスにシグナルを送信することで、 SIGINT Dev Proxy を正常に停止できます。 Dev Proxy を正常に閉じるのは、要求を記録し、Dev Proxy でレポート プラグインを使用してそれらを分析する場合に必要です。 環境変数がないCI場合、開発プロキシは CtrlCキー+を押すのを待ちます。 これを停止する唯一の方法は、 または kill -KILLを使用してそのプロセスをkill -9強制的に閉じ、Dev Proxy を直ちに停止し、記録された要求を分析できないようにすることです。

Dev Proxy のインストール

ほとんどの場合、ランナーに Dev Proxy がインストールされていません。 そのため、開発プロキシを使用する前に、それをインストールする必要があります。 インストール手順は、ランナーが使用するオペレーティング システムによって異なります。

ヒント

パイプラインを高速化するには、Dev Proxy インストール フォルダーのキャッシュを検討してください。 これにより、パイプラインを実行するたびに Dev Proxy をダウンロードする必要はありません。 正確な手順については、CI/CD システムのドキュメントを参照してください。

CI/CD セットアップで開発プロキシをインストールする場合は、インストールする Dev Proxy のバージョンをピン留めする必要があります。 バージョンをピン留めすると、実行するたびにパイプラインで同じバージョンの Dev Proxy が使用されるようになります。 バージョンをピン留めする正確な手順は、ランナーのオペレーティング システムによって異なります。 Linux ベースのランナーに Dev Proxy のバージョンをピン留めする方法の例を次に示します。

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

スクリプトから Dev Proxy を実行する

CI/CD パイプラインで Dev Proxy を実行する場合は、スクリプトから開始する必要があります。 Dev Proxy を正常に閉じるには、そのプロセスにシグナルを送信 SIGINT する必要があるため、スクリプトから Dev Proxy を開始する必要があります。 を使用してプロセスを SIGINT 閉じることは、ジョブ制御が有効になっているスクリプトからのみ可能です。 CI/CD システムから開発プロキシを直接起動すると、Dev Proxy プロセスはシグナルを SIGINT 無視し、実行を続けます。

Dev Proxy を起動するジョブ 制御が有効になっている 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 ベースのランナーを使用している場合は、 コマンドの末尾に を追加 & することで、バックグラウンドで Dev Proxy を開始できます (例: ./devproxy/devproxy &)。

開発プロキシが起動するまで待ちます

バックグラウンドで Dev Proxy を起動すると、スクリプトはすぐに実行されます。 ただし、開発プロキシを開始するには時間が必要です。 テストの実行を開始する前に Dev Proxy の準備が整っていることを確認するには、テストが開始されるまで待ちます。 Dev Proxy が起動するのを待つには、その出力をファイルにログに記録し、Dev Proxy が Web 要求をリッスンしているかどうかを確認します。次に例を示します。

# 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 要求を分析する場合は、記録モードで Dev Proxy を起動します。 コマンド ライン引数を使用して、記録を使用して --record Dev Proxy を開始できます。次に例を示します。

./devproxy/devproxy --record

開発プロキシの停止

テストが完了したら、シグナルを送信して Dev Proxy を SIGINT 停止します。 次のように、 SIGINT コマンドを使用してシグナルを kill 送信できます。

kill -INT $proxy_pid

Dev Proxy プロセスを停止した後、完全に終了するまでに少し時間がかかることがあります。 これは特に、記録された要求を分析するように Dev Proxy を構成する場合です。 Dev Proxy が記録された要求の処理を完了したことを確認するには、プロセスが閉じるのを待ちます。次に例を示します。

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 出力に出力されます。 処理する要求がない場合は、Dev Proxy によってメッセージが No requests to process 出力されます。 プラグインでエラーが発生した場合、Dev Proxy によってメッセージが An error occurred in a plugin 出力されます。 これらのメッセージのいずれかが表示されたら、Dev Proxy が記録された要求の処理を完了したことを確認できます。

サンプル スクリプト

次に示すのは、開発プロキシを起動し、その起動を待機し、テストを実行し、要求を記録し、Dev Proxy を停止する 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