Comment puis-je obtenir erreurs pour se propager dans le TeamCity PowerShell runner
J'ai un TeamCity 7 Configuration de Build qui est à peu près seulement, l'invocation d'un .ps1
script à l'aide de divers TeamCity Paramètres.
J'espérais que peut-être une simple question de réglage:
-
Script
Fichier
-
Fichier De Script
%système.teamcity.construire.workingDir%/Script.ps1
-
L'exécution du Script en mode
Exécuter .ps1 script avec "Fichier" argument
-
Les arguments du Script
%système.teamcity.construire.workingDir% -OptionB %BuildConfigArgument% %BuildConfigArg2%
Et alors je m'attends à:
- si je le rate mes arguments et le script ne démarre pas, l'échec de la construction
- si mon Script.ps1 script lance, l'échec de la construction
- Si le script
exit
s avec un non-0
Niveau d'Erreur je veux le Construire à l'Échec (peut-être que ce n'est pas idiomatique PS erreur de gestion de cas .ps1 seulement fait état de la réussite par l'absence d'exceptions?)
La question: Il ne fonctionne tout simplement pas. Comment est-il censé fonctionner? Est-il quelque chose que je suis en train de faire radicalement faux que je peux le résoudre en choisissant différentes options?
Vous devez vous connecter pour publier un commentaire.
Que doc avait dans l'amicale TeamCity manuel:
Clés de la réalisation de ce travail consiste à changer deux par défaut:
9.1 les ouvrages suivants (je ne serais pas surpris si cela fonctionne pour les versions antérieures trop):trap { Write-Error "Exception $_" ; exit 98 }
en haut du script(Facultatif mais plus correct de l'OMI pour le genre de script qui est approprié pour l'intérieur de TeamCity les scripts de compilation)
Afficher les options avancées et de basculer sur Options: Ajouter -NoProfile argument
(Facultatif, mais pour moi ce doit être la valeur par défaut puisqu'il rend plus clairement comme suggéré par @Jamal Mavadat)
Afficher les options avancées et de basculer sur sortie d'Erreur: Erreur
(À part @JetBrains: si l'étiquette a été "Format de sortie stderr," elle serait moins trompeur)
Cela couvre les cas suivants:
throw
n, directement ou indirectement, dans votre PS code de montrer et de déclencher un code de sortie pour les TC pour arrêter la construction]expliciteexit n
dans le script se propage à la compilation (et échoue il si différent de zéro)Only if build status is successful
Il y a un bug connu dans TeamCity qui provoque le comportement que l'affiche originale remarqué.
Il est facile à contourner, cependant.
À la fin de votre script PowerShell, ajouter une sortie indiquant que la fin du script a été atteint:
Ensuite, mettre en place un nouveau Construire Condition d'Échec sur votre construire à l'échec si le texte que vous êtes en écho n'est PAS présent dans la sortie.
Vous êtes sur la pensée des choses. Essayez ceci:
Script
Fichier De Script
Vous n'avez pas besoin de lui fournir un chemin d'accès par défaut, il est relatif à la caisse de répertoire.
L'exécution du Script en mode
C'est exactement ce que j'utilise pour exécuter un tas de scripts powershell à l'intérieur de Teamcity.
Mise à jour
J'ai raté le bit dans le post original sur le fait d'avoir des échecs dans le script powershell échec de la construction. Toutes mes excuses!
J'ai résolu une partie du puzzle de deux façons différentes.
Régulièrement des scripts powershell
Envelopper le principal bloc de code dans un
try...catch
; si une exception se produit, le retour d'une valeur entière non nulle. Pour l'exécution réussie, retourne 0.La présente convention, de retour de zéro pour le succès remonte très loin dans l'histoire - il est utilisé par les systèmes Unix/Linux, DOS, CP/M et plus.
Pour PSake scripts de construction
Utiliser un wrapper de script powershell pour invoquer psake et de définir directement le résultat de la teamcity construire par l'écriture d'un message de réponse à stdout.
Au début du script, de définir un message d'état qui représente l'échec:
Dans le psake script de mise à jour
$global:buildResult
pour indiquer la réussite dans une tâche d'exécuter le dernier de tous.À la fin du script, sortie le message d'état
Si quelque chose dans le script de build échoue, cette dernière tâche ne sera pas exécuté, et le message par défaut (indiquant l'échec) sera de sortie.
De toute façon, Teamcity va ramasser sur le message et l'ensemble de l'état de création de façon appropriée.
%system.teamcity.build.workingDir%
peut être gratuit, mais pour moi, la clé ici est - ce que j'obtiens en rouge lorsque la substance est cassé ou dois-je cliquer sur la sortie pour voir un message.$errorActionPreference='Stop';
pour intercepter les erreurs d'analyse et il avait déjà uneexit
pour obtenir le code de sortie de propagation. J'aimerais utiliser PSake comme son obv un bien meilleur outil, mais nous avons ont préféré un autre et, finalement, je suis en train de lancer un script PowerShell dans le PowerShell coureur de TeamCity-un outil que j'ai trouver le reste de la parfaite et une constante de joie. Je ne comprends beaucoup de ce genre de choses BTW voir stackoverflow.com/a/5851948/11635. Cependant, je sais qu'il peut être plus simple ou je ne serais pas à poser - il a juste besoin de couvrir tous les casSi de nouvelles TeamCity versions sont à votre portée, alors il vaut la peine de vérifier certains de PowerShell construire runner améliorations.
En particulier, la modification de
Error Output
de défautwarning
àerror
peut vous intéresser.Juste louer le lawd vous n'avez pas besoin de travailler avec Jenkins.. ne Pouvez pas utiliser le PowerShell étape pour des problèmes similaires. Au lieu de cela, nous devons utiliser un "cmd" l'étape qui appelle la suite de la magie wrapper qui ne manquera pas de l'exception et les codes de sortie:
Une alternative à la accepté de répondre qui fonctionne pour moi Sur TeamCity 9 (je n'aime pas changer le "Créer les Conditions d'Échec' option, car elle affecte toutes les étapes de génération):-
Je voulais PowerShell erreurs d'échec de l'étape de génération, mais avec un joli message.
J'ai donc voulu lancer un message d'erreur ET retourner un code d'erreur.... try /catch /finally à la rescousse.
Mon script démo:
Cela a été remplacées par des options offertes par 9.x, mais je vais le laisser ici que c'était certainement l'épreuve des balles à l'époque et je ne pouvais pas trouver une autre solution que j'ai aimé mieux.
Vous pourriez faire quelque chose qui fonctionne. Ce qui suit a été testé avec
0
ERRORLEVELDans le TeamCity Powershell coureur options, définissez-la comme suit:
Fichier De Script
À la source du Script
L'exécution du Script en mode
Supplémentaire paramètres de ligne de commande
Je suis en espérant contre tout espoir, ce n'est pas la meilleure des réponses!
Ce vérifie le dernier code d'erreur et se ferme si n'est pas 0.
Powershell v2 atleast eu un problème avec le Fichier option de gâcher les codes d'erreur. Il y a quelques détails sur la façon dont il bousille et les choses.
La réponse est soit passer à l'option de Commande et/ou de l'envelopper avec un fichier bat qui vérifie la LastErrorCode et retourne 1+ si sa supposée à l'échec.
http://zduck.com/2012/powershell-batch-files-exit-codes/
Utiliser quelque chose comme ceci:
De référence, prendre un coup d'oeil sur État De Création De Rapports de Teamcity