web-dev-qa-db-fra.com

GitLab CI et MsBuild (avec des tests)

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)?

13

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. 

20

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%
1
Gluip

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.

1
cid