web-dev-qa-db-fra.com

Exécuter de manière conditionnelle une étape de construction de TeamCity

Je travaille actuellement à la définition d'un modèle de construction à usage général pour tous nos projets - que j'ai placé au niveau du "projet racine" (grâce à cette nouvelle fonctionnalité de TeamCity 8). Certains de nos projets créent un programme d'installation, qui doit être généré par une "étape de construction" distincte qui exécute un script PowerShell. Cependant, certains de nos projets ne créent pas ce programme d'installation et n'ont donc pas besoin de cette étape de construction supplémentaire.

Existe-t-il un moyen d'exécuter conditionnellement une étape de construction, en fonction d'un paramètre de construction? Je pensais que la fonctionnalité "désactiver l'étape de construction" pourrait être exploitée ici, mais je ne vois pas de moyen de définir le statut activé/désactivé d'une étape via un paramètre.

Bien sûr, je pourrais intégrer cette condition à l’étape de construction qui exécute la génération d’installateurs, mais ce serait plus propre si cela pouvait être géré à partir de teamcity même.

44
Stuart Lange

J'ai eu besoin de nombreuses étapes de construction conditionnelles mais hélas, la fonctionnalité n'existe pas pour le moment. http://youtrack.jetbrains.com/issue/TW-17939

Il n'y a aucune raison pour que vous n'utilisiez pas un modèle dans de nombreuses configurations de construction, puis désactivez simplement l'étape de construction dans les configurations/projets de construction qui n'ont pas besoin de créer le programme d'installation. La désactivation de l’étape dans une configuration de construction individuelle n’affecte pas le modèle parent sur lequel elle est basée.

Pas aussi bien que d'avoir une méthode d'exécution/dynamique intégrée à TC, mais je l'utilise à l'occasion. J'ai déjà fait deux suggestions.

15
fwise

Il semble que TC ne supporte pas l'exécution d'étape conditionnée du coureur à leur niveau, à l'exception de la politique d'exécution (uniquement si le statut de construction a réussi, si toutes les étapes précédentes ont abouti, même si certaines étapes précédentes ont toujours échoué), mais ce n'est pas ce que vous voulez.

Il semble donc que vous ayez besoin de fournir un paramètre de construction système personnalisé pour votre étape de construction du générateur d’installateur powershell, comme system.Generate, qui doit être un bool (vous pouvez le masquer, Demander, obtenir sa valeur en fonction d’un paramètre de configuration, etc.), et ensuite dans votre coureur PowerShell, ajoutez ceci:

param([int]$Generate)
if ($Generate) {
  Write-Host "generating installer..."
   # call your func()
} else {
   Write-Host "skip installer"
}

Dans votre configuration de runner, ajoutez -Generate% system.Generate% en tant qu'argument de script (attention, pas d'argument de commande supplémentaire!). % system.Generate% devrait être étendu à 1 ou 0 en fonction de sa valeur d'exécution.

9
iwo

Je fais des recherches sur ce cas d'utilisation car j'ai un problème très similaire à résoudre. La meilleure solution que j'ai trouvée jusqu'à présent est celle indiquée dans la réponse de fwise: inclure toutes les étapes possibles dont vous pourriez avoir besoin dans votre modèle, puis désactivez au cas par cas les étapes non requises pour chaque projet. 

Donc, dans votre cas, vous incluez votre étape de construction 'installateur' au niveau racine, mais vous la désactivez pour tous les projets héritant de ce modèle et ne disposant pas d'un installateur. 

Pour une seule étape facultative, cela semble être une bonne approche, mais il est vrai que cela ne s’adapterait pas très bien aux modèles complexes de grande taille comportant de nombreuses étapes facultatives. 

J'ai trouvé ceci dans la documentation TeamCity ici :

  • Vous pouvez réorganiser les étapes de construction si nécessaire. Notez que si vous avez une configuration De construction héritée d'un modèle, vous ne pouvez pas réorganiser les étapes héritéesbuild. Toutefois, vous pouvez insérer des étapes de construction personnalisées (pas Héritées) à n’importe quel endroit et dans n’importe quel ordre, même avant ou entre les étapes de construction Héritées. Les étapes de construction héritées peuvent être réorganisées dans le modèle original Uniquement.
  • Vous pouvez désactiver une étape de construction de manière temporaire ou permanente, même si elle est héritée d'un modèle de configuration de construction.
0
Matt