docker-compose up --exit-code-from завершает работу без ошибок, когда тестируемая система быстро падает - PullRequest
0 голосов
/ 01 июля 2019

Я создаю несколько интеграционных тестов для моих образов докера, используя docker-compose. docker-compose имеет аккуратный флаг --exit-code-from, позволяющий останавливать все докеры и возвращать код завершения из тестового докера после завершения тестов.

Однако проблема в том, что --exit-code-from автоматически включает флаг --abort-on-container-exit. Это вполне логично, но создает следующую проблему:

Нормальный случай

  1. запускается тестируемая система
  2. интеграционные тесты запускают тесты и завершают работу с кодом ошибки X
  3. все контейнеры остановлены
  4. возвращается код выхода X.

проблемный случай

  1. запускается тестируемая система
  2. до завершения интеграционных тестов тестируемая система завершает работу с ошибкой
  3. все контейнеры остановлены
  4. код выхода 0 возвращается! Как будто испытания пройдены успешно.

Вы можете воспроизвести это со следующими файлами:

Dockerfile

FROM alpine as development
ENTRYPOINT [ "/bin/false" ]

FROM alpine as test
ENTRYPOINT [ "/bin/sleep", "3" ]

докер-compose.yml

version: "3.5"
services:
  sut:
    build:
      context: .
      target: development
  test:
    build:
      context: .
      target: test

и затем работает

docker-compose up --build --exit-code-from test
echo $? # print exit code from previous command

, который вернет код выхода 0.

Я хотел бы, чтобы код выхода 0 означал: интеграционные тесты действительно выполнялись и были успешными.

EDIT: после просмотра этой проблемы https://github.com/docker/compose/pull/6077/commits объединены в docker-compose 1.22.0; Я снова побежал с последней версией docker-compose (на данный момент 1.24.1), но все еще сталкиваюсь с проблемой.

1 Ответ

0 голосов
/ 02 июля 2019

Это единственный обходной путь, который я нашел до сих пор.Не самое чистое решение, но оно делает хитрость:

docker-compose up --build --exit-code-from test | grep -q "_test_1 exited with code 0" $TMP

более длинная версия в чистом скрипте bash с опцией разбора, показывающая вывод docker-compose: https://gist.github.com/chrismaes87/7297d34d356b07a00a5da5f8e425326c

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...