Файл .gitlab-ci.yml размещенный в gitlab репозитории позволяет автоматически запускать тесты кода при каждом новом коммите. За счет этого выявляются ошибки.
.gitlab-ci.yml и запуск тестов в Gitlab
Самый простой тест может выглядеть так:
cat file1.txt file2.txt | grep -q "expected string-result"
Открываются два файла и проверяет соответствие их содержимого ожидаемому результату. Если в одном из файлов или в обоих другое содержимое — тест не пройдет.
Эту команду можно вручную выполнить из консоли, ее же можно поместить в файл .gitlab-ci.yml
Любой .gitlab-ci.yml размещенный в корне репозитория автоматически будет выполняться при каждом коммите в репозиторий.
mcedit .gitlab-ci.yml
test:
script: cat file1.txt file2.txt | grep -q "expected string-result"
Более сложный файл, который может использоваться в реальной инсталяции при усложнении теста.
Тесты для обеспечения безопасности будут выполняться в изолированных Docker конейнерах.
Первой строкой указывается образ alpine. Он будет использоваться для создания контейнера.
Затем перечисляются stage-и. Заданные для каждого из них блоки кода будут выполняться в приведенном порядке. Сначала сборка — compile, потом тестирование — test. В последнюю очередь package — подготовка артефакта — пакета или файла с результатом.
image: alpine stages: - compile - test - package compile: stage: compile script: cat file1.txt file2.txt > compiled.txt artefacts: paths: - compiled.txt test: stage: test script: cat compiled.txt | grep -q "expected string-result" package: stage: package script: cat compiled.txt | gzip > package.gz artefacts: paths: - packages.gz
Артефакт в виде текстового файла compiled.txt получается еще на первой стадии. Содержимое тестируется, и если тест проходит, текстовый файл упаковывается в архив, который доступен для скачивания.
Архив можно дополнительно перемещать в какой-то каталог или при помощи rsync копировать на внешний сервер.
Файл с тестами после сохранения размещается в корне проекта.
После каждого коммита он будет отрабатывать и результат всегда можно будет посмотреть в интерфейса.
Но чтобы тесты выполнялись нужен предустановленный Docker и runner, который установлен и зарегистрирован в Gitlab.