Файл .gitlab-ci.yml

Файл .gitlab-ci.yml размещенный в gitlab репозитории позволяет автоматически запускать тесты кода при каждом новом коммите. За счет этого выявляются ошибки.

.gitlab-ci.yml и запуск тестов

Самый простой тест может выглядеть так:

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 копировать на внешний сервер.

Файл с тестами после сохранения размещается в корне проекта.

gitlab-ci.yml

После каждого коммита он будет отрабатывать и результат всегда можно будет посмотреть в интерфейса.

Но чтобы тесты выполнялись нужен предустановленный Docker и runner, который установлен и зарегистрирован в Gitlab.