Azure devops 如何在Azure Devops中的发布管道上触发STDERR
我们有一个angular应用程序,上面有一些e2e测试。我们使用e2e测试创建一个独立的docker映像,一个用于应用程序 当我们使用azure devops发布管道部署应用程序时,我们在部署后有一个应该运行e2e测试的后期步骤 我们运行以下命令:Azure devops 如何在Azure Devops中的发布管道上触发STDERR,azure-devops,azure-cli,azure-container-instances,Azure Devops,Azure Cli,Azure Container Instances,我们有一个angular应用程序,上面有一些e2e测试。我们使用e2e测试创建一个独立的docker映像,一个用于应用程序 当我们使用azure devops发布管道部署应用程序时,我们在部署后有一个应该运行e2e测试的后期步骤 我们运行以下命令: az container create --resource-group $(DEV_RG) --name $(E2E_IMAGE_NAME) --image $(E2E_IMAGE_REGISTRY) --registry-username $(R
az container create --resource-group $(DEV_RG) --name $(E2E_IMAGE_NAME) --image $(E2E_IMAGE_REGISTRY) --registry-username $(REGISTRY_USERNAME) --registry-password $(REGISTRY_PASSWORD) --vnet $(VNET_LOCATION) --subnet $(E2E_SUBNET) --subnet-address-prefix $(E2E_IP_GROUP) --command-line ./rune2e.sh
然后,我们希望看到输出:
az container logs --resource-group $(DEV_RG) --name $(E2E_IMAGE_NAME)
我也试过了
az container attach --resource-group $(DEV_RG) --name $(E2E_IMAGE_NAME)
无论这些日志中发生了什么,该步骤始终为绿色
如何捕获容器正在输出的
stderr
事件,并在Azure devops中将步骤标记为红色?Docker容器日志都是同一个流上的stdout/stderr,因此在使用az container logs
命令查看它们时无法进行区分
你可以采取两种方法
1) grep查找错误日志中的已知关键字(例如,[error]),如果您希望在某些STDERR或错误日志上失败
2) 更新docker容器(或容器入口点)内的进程,将其stderr流重定向到容器中的本地文件。(例如start.sh 2>stderr.log)管道运行E2E后,只需运行一个tasks来运行az container exec
,并检查容器内是否有任何日志写入stderr.log
在这两种情况下,您都应该返回非0退出代码以强制管道失败 Docker容器日志都是同一流上的stdout/stderr,因此使用
az container logs
命令查看它们时无法区分
你可以采取两种方法
1) grep查找错误日志中的已知关键字(例如,[error]),如果您希望在某些STDERR或错误日志上失败
2) 更新docker容器(或容器入口点)内的进程,将其stderr流重定向到容器中的本地文件。(例如start.sh 2>stderr.log)管道运行E2E后,只需运行一个tasks来运行az container exec
,并检查容器内是否有任何日志写入stderr.log
在这两种情况下,您都应该返回非0退出代码以强制管道失败 我最终将其添加到记录容器的Azure CLI任务中
#!/bin/bash
az container logs --resource-group $(DEV_RG) --name $(E2E_IMAGE_NAME) --only-show-errors | grep Error\:
if [ $? -eq 0 ]
then
echo "Failure: I found error in file. Test failed."
exit 1
else
echo "Success: I did not find error in file. Test passed." >&2
exit 0
fi
最后,我将其添加到记录容器的Azure CLI任务中
#!/bin/bash
az container logs --resource-group $(DEV_RG) --name $(E2E_IMAGE_NAME) --only-show-errors | grep Error\:
if [ $? -eq 0 ]
then
echo "Failure: I found error in file. Test failed."
exit 1
else
echo "Success: I did not find error in file. Test passed." >&2
exit 0
fi
我现在正在使用Azure CLI任务,它不支持grep和启动脚本吗?我必须在管道中使用Bash任务来实现这一点?正确,您需要使用Bash任务来更好地控制您需要执行的自定义脚本。无法使用Bash,不知何故,使我们能够部署到云的服务主体不支持它。我现在正在使用Azure CLI任务,它不支持grep和启动脚本吗?我必须使用管道中的Bash任务来实现这一点?正确,您将需要使用Bash任务来更好地控制您需要执行的自定义脚本。使用Bash是不可能的,不知何故,使我们能够部署到云中的服务主体不支持它。非常感谢您在这里分享的解决方案。如果你能接受这个答案,那么其他人就可以直接知道这个有效的方法了:-)非常感谢你在这里分享的解决方案。如果你能接受这个答案就太好了,那么其他人就可以直接知道这个有效的方法:-)