2010-09-09 50 views
27

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 ».

+1

Où va «GOTO OK»? Et qu'est-ce que% ERRORLEVEL%? –

Répondre

21

Voir le sujet Build Script Interaction with TeamCity.

Vous pouvez signaler des messages pour journal de la construction de la façon suivante:

##teamcity[message text='<message text>' errorDetails='<error details>' status='<status value>']

où:

  • L'attribut d'état peut prendre des valeurs suivantes: NORMAL, AVERTISSEMENT, NON, ERREUR. La valeur par défaut est NORMAL.
  • L'attribut errorDetails est utilisé uniquement si l'état est ERROR, dans les autres cas, il est ignoré.

Ce message échoue la construction dans le cas où son statut est erreur et « Fail construire si un message d'erreur est enregistré par le coureur de construction » case est cochée la configuration de construction page Paramètres généraux. Par exemple:

##teamcity[message text='Exception text' errorDetails='stack trace' status='ERROR']

Mise à jour 30/08/2013:

Au TeamCity 7.1 échecs de construction doivent être signalés en utilisant le message de service buildProblem à la place:

##teamcity[buildProblem description='<description>' identity='<identity>'] 
+0

Merci! J'ai réussi à faire fonctionner le truc en utilisant le message buildStatus. Je mettrai à jour le message original avec cette information. –

+3

Cela fonctionne également avec les scripts PowerShell, par ex. 'echo" ## teamcity [message texte = 'oops' errorDetails = '' status = 'ERREUR'] "' –