Nous utilisons la ligne de commande en ligne de commande TeamCity pour appeler un fichier chauve-souris. Le fichier chauve-souris construit notre solution en appelant le "devenv.exe" de Visual Studio 2008, puis il exécute les tests unitaires et crée la structure de dossier correcte. Ce que nous aimerions faire est d'arrêter d'exécuter le fichier chauve-souris si l'appel à devenv échoue et de faire comprendre à TeamCity que la compilation a échoué. Nous pouvons attraper l'appel devenv défectueux en vérifiant ErrorLevel (ce qui est 1 si la construction a échoué) et nous pouvons quitter notre fichier bat à ce stade. Mais comment pouvons-nous dire à la TeamCity que la construction a échoué?Runner de génération de ligne de commande TeamCity: comment faire échouer la construction?
C'est ce que nous avons essayé:
call "build.bat"
IF ERRORLEVEL 1 EXIT /B 1
Mais TeamCity ne reconnaît pas notre code de sortie. Au lieu de cela, le journal de construction ressemble à ceci:
[08:52:12]: ========== Build: 28 succeeded or up-to-date, 1 failed, 0 skipped ==========
[08:52:13]: C:\_work\BuildAgent\work\bcd14331c8d63b39\Build>IF ERRORLEVEL 1 EXIT /B 1
[08:52:13]: Process exited with code 0
[08:52:13]: Publishing artifacts
[08:52:13]: [Publishing artifacts] Paths to publish: [build/install, teamcity-info.xml]
[08:52:13]: [Publishing artifacts] Artifacts path build/install not found
[08:52:13]: [Publishing artifacts] Publishing files
[08:52:13]: Build finished
TeamCity signale que la génération a réussi. Comment pouvons-nous régler ceci?
Solution:
TeamCity fournit un mécanisme appelé Service Messages qui peut être utilisé pour gérer les situations comme celle-ci. J'ai mis à jour mon script de compilation pour ressembler à ce qui suit:
IF %ERRORLEVEL% == 0 GOTO OK
echo ##teamcity[buildStatus status='FAILURE' text='{build.status.text} in compilation']
EXIT /B 1
:OK
En conséquence TeamCity rapportera ma construction comme ayant échoué en raison d'un « échec dans la compilation ».
Où va «GOTO OK»? Et qu'est-ce que% ERRORLEVEL%? –