在 CI/CD 方案中使用开发代理是一种在受控环境中测试应用程序的好方法。 将 Dev Proxy 与在应用程序中生成 API 请求的测试相结合时,可以涵盖各种场景:从确保应用不使用影子或非生产环境 API,到检查其是否使用最少的 Microsoft Graph 权限。 虽然确切的配置步骤因 CI/CD 系统而异,但应遵循一些一些一般原则。
在大多数情况下,运行器未安装 Dev Proxy。 因此,在使用 Dev Proxy 开发代理工具之前,您需要安装它。 安装步骤取决于运行程序使用的操作系统。
小窍门
若要加快管道速度,请考虑缓存开发代理安装文件夹。 这样,每次运行管道时都不需要下载开发代理。 有关确切步骤,请参阅 CI/CD 系统的文档。
在 CI/CD 安装中安装开发代理时,通常需要固定所安装的开发代理版本。 固定版本可确保每次运行管道时都使用相同的开发代理版本。 固定版本的确切步骤取决于运行器的操作系统。 下面是如何在 Linux 的运行环境上锁定 Dev Proxy 版本的示例:
# install Dev Proxy v1.0.0
bash -c "$(curl -sL https://aka.ms/devproxy/setup.sh)" -- v1.0.0
启动开发代理
安装开发代理后,需要启动它。 在 CI/CD 管道中启动开发代理时,请务必在后台启动它。 否则,您的管道将被阻塞,直到停止 Dev Proxy。
如果使用基于 Linux 的运行程序,可以在后台启动开发代理:
# start Dev Proxy in the background
./devproxy/devproxy &`.
信任开发代理根证书
启动开发代理后,需要在发送请求之前信任开发代理根证书,因为开发代理使用自签名根证书。
开发代理启动时,将在 rootCert.pfx
文件夹中创建 ~/.config/dev-proxy/rootCert
证书。
根据你的权限,可能需要先创建 ~/.config/dev-proxy/rootCert
文件夹,然后再启动开发代理:
# ensure the rootCert folder
echo "Ensuring the Dev Proxy rootCert folder"
mkdir -p ~/.config/dev-proxy/rootCert
# start Dev Proxy
echo "Starting Dev Proxy"
./devproxy/devproxy &
如果使用基于 Linux 的运行程序,可以通过将其复制到系统的受信任 CA 证书存储来安装开发代理根证书:
# export the Dev Proxy's Root Certificate
echo "Exporting the Dev Proxy's Root Certificate"
openssl pkcs12 -in ~/.config/dev-proxy/rootCert.pfx -clcerts -nokeys -out dev-proxy-ca.crt -passin pass:""
# install root certificate
echo "Installing the Dev Proxy's Root Certificate"
sudo cp dev-proxy-ca.crt /usr/local/share/ca-certificates/
# update CA certificates
echo "Updating the CA certificates"
sudo update-ca-certificates
等待开发代理启动
在后台启动开发代理时,脚本将立即执行。 但是,开发代理需要一些时间才能完成启动。 若要确保开发代理在开始发出请求之前准备就绪,请等待它启动。 若要等待开发代理启动,请将其输出记录到文件中,然后检查开发代理是否正在侦听 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 &
# 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
配置代理环境变量
许多应用程序和库使用 http_proxy
环境变量 https_proxy
来确定要用于 HTTP 和 HTTPS 请求的代理服务器。 若要确保应用程序使用开发代理,需要将这些环境变量设置为指向开发代理实例。
export http_proxy=http://127.0.0.1:8000
export https_proxy=http://127.0.0.1:8000
控制开发代理
在 CI/CD 管道中运行开发代理时,无法以交互方式控制它。 相反,可以通过向 开发代理 API 发送请求来控制它。
如果要分析应用发出的 API 请求,可以向终结点发送 POST
请求 /record
:
curl -X POST http://localhost:8897/proxy/record -H "Content-Type: application/json" -d '{"recording": true}'
若要停止 Dev Proxy,您可以向 /stop
终结点发送 POST
请求。
curl -X POST http://localhost:8897/proxy/stop
停止开发代理进程后,它可能需要花费一段时间才能完全关闭。 若要确保开发代理完成,请等待进程关闭,例如:
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
所有录制插件都运行完毕后,开发代理会将 DONE
消息输出。 如果没有要处理的请求,开发代理服务器会打印 No requests to process
消息。 如果插件中出现错误,开发代理将输出 An error occurred in a plugin
消息。 看到这些消息中的任何一条消息时,可以确保开发代理已完成处理记录的请求。
示例启动脚本
下面是可用于在 CI/CD 管道中启动开发代理的 bash 脚本的示例:
log_file=devproxy.log
echo "Ensuring Dev Proxy rootCert folder"
mkdir -p ~/.config/dev-proxy/rootCert
# start Dev Proxy in the background
# log Dev Proxy output to the log file
# log stdout and stderr to the file
echo "Starting Dev Proxy"
./devproxy/devproxy > $log_file 2>&1 &
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
echo "Exporting 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 the Dev Proxy's Root Certificate"
sudo cp dev-proxy-ca.crt /usr/local/share/ca-certificates/
echo "Updating the CA certificates"
sudo update-ca-certificates
echo "Set proxy variables"
export http_proxy=http://127.0.0.1:8000
export https_proxy=http://127.0.0.1:8000