GitLab CI и MsBuild (с тестами)

Я в процессе переноса моего repsitories SVN на Git с Гитлаб.

теперь я видел, что существует непрерывная реализация интеграции с GitLab CI и просто хочу попробовать.

Я уже установил и настроил Runner, но Gitlab жалуется, что у меня нет .

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

может кто-нибудь скажи мне, где я могу найти простой пример gitlab-ci.yml файл, который в основном просто строит мое решение и запускает все тесты (MSTests)?

3 ответов


по-видимому, нет простого примера msbuild, но это должно заставить вас начать:

variables:
  Solution: MySolution.sln

before_script:
  - "echo off"
  - 'call "%VS120COMNTOOLS%\vsvars32.bat"'
  # output environment variables (usefull for debugging, propably not what you want to do if your ci server is public)
  - echo.
  - set
  - echo.

stages:
  - build
  - test
  - deploy

build:
  stage: build
  script:
  - echo building...
  - 'msbuild.exe "%Solution%"'
  except:
  - tags

test:
  stage: test
  script:
  - echo testing...
  - 'msbuild.exe "%Solution%"'
  - dir /s /b *.Tests.dll | findstr /r Tests\*\bin\ > testcontainers.txt
  - 'for /f %%f in (testcontainers.txt) do mstest.exe /testcontainer:"%%f"'
  except:
  - tags

deploy:
  stage: deploy
  script:
  - echo deploying...
  - 'msbuild.exe "%Solution%" /t:publish'
  only:
  - production

выяснить, какие тесты запускать, немного сложно. Мое соглашение заключается в том, что каждый проект имеет тесты папок, в которых тестовые проекты названы после схемы MyProject.Ядро.Тесты (для проекта под названием MyProject.Core)

Как первая обратная связь с gitlab-ci

Мне нравится простота и интеграция управления версиями. Но я хотел бы иметь возможность чтобы изменить сценарий перед выполнением (особенно при изменении сценария), но я мог бы повторно запустить определенную фиксацию и ввести переменные или изменить сценарий (я могу сделать это с teamcity). Или даже проигнорировать неудачный тест и снова запустить сценарий (я часто делаю это с teamcity). Я знаю, что gitlab-ci ничего не знает о моих тестах, у меня просто есть командная строка, которая возвращает код ошибки.


в качестве дополнения к Jürgen Steinblock ответ, Я хотел бы предложить более простую альтернативу для сценария этапа тестирования:

variables:
  SOLUTION_DIR: "MySolution"
  BUILD_DIR: "Release"
  TESTER: "vstest.console.exe" # or "mstest.exe /testcontainer:"

before_script:
  - call "%VS120COMNTOOLS%\vsvars32" # import in path tools like msbuild, mstest, etc using VS script

test:
  stage: test
  script:
  - for /f %%F in ('dir /s /b %SOLUTION_DIR%\%BUILD_DIR%\*Tests.dll') do set dllPath=%%F
  - "%TESTER% %dllPath%"

это запустит тестирование на всех найденных двоичных файлах тестового проекта, которое заканчивается соглашением с *Tests.dll в каталоге сборки. Это имеет то преимущество, что не используется промежуточный файл.


это то, что я использовал в конце концов. Он запускает все * тесты.Dll в одном запуске.

  dir /s /b *.Tests.dll | findstr /r bin\Debug > testcontainers.txt
  for /f %%x in (testcontainers.txt) do set list=!list! %%x
  set list=%list:~1%
  vstest.console.exe %list%