Файл .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.
