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%