Настройка CI/CD runner в Gitlab для автоматического тестирования при комите C#

Всем привет. Прошу помощи. Уже неделю разбираюсь с возможностью настройки автоматического юнит-тестирования при комите решений на C#. Все что я понял - это необходимо иметь проект и юнит-тесты под него, батник для запуска тестов. Каким образом настроить гитлаб, чтобы при комите запускались тесты и их результаты выводились в pipeline?


Ответы (1 шт):

Автор решения: Maxim

гитлаб сам по себе ничего не делает.

Чтобы сделать то, что вам нужно, вам нужна связка GitLab + Gitlab-runner.

Gitlab-runner - это среда исполнения сборочных линий или отдельных этапов этих линий, как сконфигурируете.

Соответственно, чтобы заработала сборочная линия, в настройках проекта у вас должен быть хотя бы один раннер, который будет обрабатывать сборочную линию. Как установить его, читайте тут Install gitlab runner

Затем, вам нужна сборочная линия, которая конфигурируется в файле .gitlab-ci.yml. Что можно прописать в этом файлике можно почитать тут: GitLab CI/CD pipeline configuration reference

Моя лень сегодня победила и я не доделал публикацию проекта на IIS, но вот пример построения проекта при любом коммите (актуально для мерджей - провалилась линия, мердж не пройдет) и сборка релиза для публикации:

    stages:
  - build
  - deploy
  
build:
  stage: build
  script:
    dotnet build project.sln
    
deploy:
  stage: deploy
  script:
    dotnet build project.sln -c Release
  only:
    refs:
      - master
  environment: production

Запустить тесты можно командой

dotnet test

или

mstest /testcontainer:testdllname.dll

А поскольку, вы не указали какие именно у вас тесты, MS Unit Test, XUnit, NUnit то предметно разбираться в нюансах придется вам самим, но в целом результаты выводятся как в консоль - вы увидите это в логах линии, так и в файлы - можно поместить в артефакты и хранить хоть вечно.

Обратите внимание, что не тэгированные линии обычно не запускаются - нужно в настройках раннера, привязанного к проекту галочку поставить, либо в yml файле теги раннера указать. Это сделано специально, так как у вас может быть сконфигурирован кластер с кучей различных раннеров под разные среды, тэги помогают определить который будет выполнять вашу сборочную линию.

→ Ссылка