Как вызвать STDERR на конвейерах освобождения в Azure Devops - PullRequest
0 голосов
/ 29 апреля 2020

У нас есть приложение angular, в котором есть несколько тестов e2e. Мы создаем автономный docker образ с тестами e2e, один для приложения.

Когда мы развертываем приложение, используя azure devops release pipe, у нас после развертывания есть шаг, который должен выполнить тесты 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?

Ответы [ 2 ]

1 голос
/ 30 апреля 2020
Журналы контейнеров

Docker являются stdout / stderr в одном и том же потоке, поэтому вы не можете различить их, используя команду az container logs.

Существуют два подхода, которые вы можете использовать

1) grep для известных ключевых слов, которые будут иметь ваши журналы ошибок (например, [ОШИБКА]), если есть какие-либо STDERR или журналы ошибок, которые вы хотели бы использовать ошибка при

2) обновить ваш процесс в контейнере docker (или точке входа контейнера), чтобы перенаправить поток stderr в локальный файл в контейнере. (например, start. sh 2> stderr.log) После того, как ваш конвейер запустит E2E, просто запустите задачи для запуска az container exec и проверьте, не было ли каких-либо журналов, записанных в stderr.log внутри контейнера.

В обоих случаях вы должны вернуть код выхода, отличный от 0, чтобы заставить ваш конвейер выйти из строя.

0 голосов
/ 01 мая 2020

Я закончил тем, что добавил это в задачу CLI Azure, которая регистрирует контейнер.

#!/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
...