如何在 Azure Devops 中的发布管道上触发 STDERR

How to trigger STDERR on release pipelines in Azure Devops

我们有一个 angular 应用程序,上面有一些端到端测试。我们使用 e2e 测试创建一个独立的 docker 图像,一个用于应用程序。

当我们部署应用程序时,使用 azure devops 发布管道,我们有一个后期步骤,部署后应该 运行 e2e 测试。

我们运行这些命令:

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) 如果有一些 STDERR 或错误日志你想在

2) 更新 docker 容器(或容器的入口点)内的进程,将其 stderr 流重定向到容器中的本地文件。 (例如 start.sh 2> stderr.log)在你的管道 运行s E2E 之后,简单的 运行 任务到 运行 az container exec 并检查是否有任何日志写入容器内的 stderr.log

在这两种情况下,您都应该 return 一个非 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