Как протестировать Docker container? Существуют ли готовые юнит тесты для GitLab?
Здравствуйте
Новичек в CI/CD и во всем что с ним связано.
Есть ли какие-то best practice как тестировать работоспособность контейнера в pipeline gitlab?
Ну т.е. сбилдил я контейнер через runner а дальше как проверить его работоспособность?
Поднимать контейнер с имейджа, чекать курлом и далее тушить?
A если билд кривой и сервис не запустился или отдает 500тую, но тем не менее контейнер запущен и занимает порт, а я фикшу сервис и выполняю пуш изменений, но дальше CI матерится "мол порт занят", не могу ранить контейнер для теста, тогда выходит нужно докер тестить до билда, на зачем тогда тесты...
Господа DevOps. Может кто-то меня просветить?
VITYA-XY1, Запустили, подождали хелсчек, проверили статус, убили, закончили ошибкой если контейнеру было плохо. К сожалению, на встроенные хелсчеки docker сам не умеет реагировать, только в swarm.
container_id=$(docker run -d --rm ...) && sleep healthcheck_timeout && if [[ $(docker inspect '--format={{json .State.Health.Status}}' $container_id) == '"healthy"']]; then echo "Runs fine"; status=0; else echo "Failed to run"; status=1; docker stop $container_id; exit $status
chupasaurus, согласен разобрался почему curl не ставился), теперь вопрос:
есть приложение, есть БД, в контейнере приложения мы первоначально запускаем миграции схем,
1) как выполняется проверка, что схемы существуют и нет необходимости их добавлять при обновлении приложения?
2) Это должно делать приложение или какие-то интеграционные тесты?
3) Как пишутся интеграционные тесты? Это должно быть в докер контейнере приложения или это должен быть какой-то тестовый контейнер(проверка базы, связи с редисом или каким-то сторейджом).
Где про все это можно почитать?
Спасибо
VITYA-XY1, это должен делать собственно процесс миграции с падением при несостыковках. Проблемы, возникающие в работе приложения уже после наката миграций - интеграционными тестами.
Обновил вопрос :) не могли бы вы ответить на все три вопроса? Не у кого спросить, что гуглить непонятно, так как не знаю "кухню". А как ее понять, без опыта, тоже пока не представляю.
В виде прогона сценариев для проверки соответствия поведения нужному. Если приложение — утилита командной строки, то обычно прогоняются в отдельных контейнерах этого приложения. Если приложение имеет API — интеграционные тесты удобнее запускать снаружи. В принципе особой разницы по сравнению с бесконтейнерной средой нет, только стенды проще поднимать.