Je suis en train de migrer mes représentants svn vers git avec GitLab.
Maintenant, j'ai vu qu'il y avait une implémentation d'intégration continue avec GitLab CI et je voulais juste l'essayer.
J'ai déjà installé et configuré un Runner mais Gitlab se plaint de ne pas avoir de fichier .gitlab-ci.yml
.
J'utilise déjà TeamCity pour l'intégration continue et je ne veux donc pas trop m'efforcer d'écrire un script de compilation.
Quelqu'un peut-il me dire où je peux trouver un exemple de base d'un fichier gitlab-ci.yml
qui ne construit que ma solution et exécute tous les tests (MSTests)?
Apparemment, il n'y a pas d'exemple msbuild simple, mais cela devrait vous aider à démarrer:
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
Déterminer quels tests exécuter est un peu délicat. Ma convention est que chaque projet a un dossier tests dans lequel les projets de test sont nommés d'après le schéma MyProject.Core.Tests (pour un projet appelé MyProject.Core)
Juste comme un premier retour vers gitlab-ci
J'aime la simplicité et l'intégration du contrôle de source. Mais j'aimerais pouvoir modifier le script avant son exécution (en particulier lors de la modification du script), mais je pouvais créer une image pour réexécuter un commit spécifique et injecter des variables ou modifier le script (je peux le faire avec teamcity). Ou même ignorer un test qui a échoué et relancer le script (je le fais souvent avec teamcity). Je sais que gitlab-ci ne sait rien de mes tests, je viens juste d'une ligne de commande qui retourne un code d'erreur.
C'est ce que j'ai utilisé par la suite. Il exécute tous les * Tests.Dll en une seule exécution.
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%
En tant que complément à Jürgen Steinblock answer , je voudrais suggérer une alternative plus simple au script de la phase de test:
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%"
Cela lancera les tests sur tous les fichiers binaires du projet test trouvés qui se terminent par convention avec *Tests.dll
dans le répertoire de construction. Cela a l'avantage de ne pas utiliser de fichier intermédiaire.