Question Comment paramétrer les besoins en agents dans TeamCity


Dans TeamCity, est-il possible de paramétrer les exigences de l'agent en fonction des paramètres de configuration du projet ou de la construction? Par exemple. peut valeur comprennent %...% substitutions?

Un exemple: nous avons des paramètres de projet env.XXX_VERSION qui spécifie la version nécessaire du produit XXX dans toutes les configurations de construction du projet. Nous pouvons alors utiliser cette valeur dans les scripts de génération pertinents du projet. (Au fil du temps, nous réalisons des copies de ce projet de construction pour différentes variantes de certains produits dont nous dépendons. Nous avons donc maintenant 12 projets différents avec des valeurs différentes pour les paramètres). Maintenant, je voudrais également inclure une exigence d'agent de toutes les configurations de construction pertinentes dans le projet afin que seuls les agents utilisables soient pris en compte. Mais étant donné le nombre de configurations de construction et le nombre de variantes de projets, je préférerais paramétrer l’exigence sur la valeur de la sortie env.XXX_VERSION. Est-ce possible?

(Aujourd'hui, tous nos agents incluent toutes les versions possibles du logiciel, mais ne seront plus possibles, nous aurons donc besoin d'exigences sur les agents des projets de configurations de construction)


2
2017-08-03 09:10


origine


Salut Tonny, as-tu déjà pu trouver un moyen de paramétrer les exigences? Je me trouve exactement dans votre situation décrite et aimerait savoir que c'est effectivement possible. - Leonid Usov
Leonid (désolé pour la réponse tardive), mais non, nous n'avons pas trouvé le moyen de le faire en dehors de l'utilisation de la nouvelle DSL Kotlin de 2018.1. Maintenant, nous générons toutes les configurations à partir du code Python, puis les "installons" via la prise en charge des paramètres de version ... - Tonny Madsen
Nice, merci pour la référence, je n'ai pas entendu parler de cette option avant. Commencé l'enquête. En attendant, pourriez-vous décrire brièvement comment exactement l’utilisation des paramètres versionnés permet ce type de sélection d’agent dynamique? Avez-vous en quelque sorte ajouté les exigences de l'agent en tant que section de configuration codée en dur, régénérée automatiquement pour chaque version? - Leonid Usov


Réponses:


Il semble que vous sachiez déjà ce que vous voulez faire et le problème est le grand nombre d’agents et de configurations auxquels vous devez faire face.

Pourquoi ne pas automatiser cela en utilisant l'API REST de TeamCity? Le serveur de TeamCity a une API HTTP intégrée que vous pouvez utiliser pour éditer / mettre à jour (presque) tous les champs que vous pourriez utiliser avec l'interface Web.

Vous pouvez interagir avec l'API en utilisant votre langage de script préféré en utilisant les appels HTTP GET / PUT pour obtenir et mettre à jour les valeurs. Dans ce cas, je pense que cela vaudrait la peine d'écrire un script pour ne pas avoir à passer par l'interface utilisateur pour mettre à jour toutes les configurations de construction que vous avez mentionnées.

Vous allez écrire un seul script (quel que soit le langage de script que vous utilisez) que vous pouvez exécuter une fois pour définir toutes les exigences de l'agent. Pseudo code suivant

  1. Parcourez les projets dans TeamCity

Obtenir la liste des projets

curl -i -H "Accept: application/json" http://teamcity/httpAuth/app/rest/projects --user username:password
  1. Obtenir le XXX_VERSION paramètre des projets.

Boucle sur tous les projets, récupère tous les paramètres et analyse notre XXX_VERSION

curl http://teamcity/app/rest/projects/id:PROJECT_NAME/parameters
  1. Définissez l'exigence d'agent sur les configurations de construction.

Pour chaque configuration de construction, dans chaque projet, définissez les exigences de l'agent sur la configuration de génération à l'aide de la valeur XX_VERSION analysée.

curl -X PUT http://teamcity/httpAuth/app/rest/buildTypes/<buildTypeLocator>/agent-requirements/<id> --user username:password

C'est l'idée générale, mais pas complète, en passant du temps à faire en sorte que ce script vous fasse gagner du temps en le gérant via TeamCity UI.

https://confluence.jetbrains.com/display/TCD9/REST+API


2
2017-08-11 14:37



Je ne vois pas comment cela fonctionnerait. Approfondissez vos explications, s'il vous plaît. - Tonny Madsen
Tonny, j'ai mis à jour avec quelques détails supplémentaires. Tu devras m'excuser pour que ce ne soit pas complet. J'espère que cela vous aidera ou du moins vous mettra sur la bonne voie. - kdtong


Vous pouvez forcer TeamCity sur un agent spécifique sans désactiver tous les autres agents connectés.

Voici comment:

Aller à Créer des paramètres de configuration

Prochain Exigences de l'agent

Maintenant, vous devez définir un Exigence explicite pour un agent particulier:

Nom du paramètre: system.agent.name

Condition: égale

Valeur: YOUR_SPECIFIC_AGENT_NAME

Aussi, vous pouvez essayer ceci:

Naviguez à travers: TeamCity -> Administration -> Agents -> Sélectionnez un agent -> onglet Configurations compatibles, puis Politique de configuration en cours d'exécution puis Exécuter les configurations attribuées uniquement et cliquez sur + Attribuer des configurations et fini.

S'il vous plaît laissez-moi savoir si cela aide.

Je vous remercie.


0
2017-08-03 09:21



Mais malheureusement, cela nécessitera une micro-gestion, nous voulons éviter. Nous avons 10 agents où 8 à 9 peuvent être utilisables pour les configurations de construction d'un projet spécifique. Nous devrons donc passer par 23 configurations de construction fois 12 projets et définir cette exigence agent.name pour chacun d'eux. Pas si bon. Et pire encore, nous aurons plus d’agents et changerons continuellement la configuration de tous les agents. - Tonny Madsen


Je n'ai pas pu trouver un moyen de paramétrer la valeur avec %...% les substitutions, mais j'ai trouvé une solution de contournement. Ce n'est pas idéal, mais cela fonctionne pour mon petit cas d'utilisation.

Cas d'utilisation: Je crée des configurations de construction à partir d'un modèle et chaque configuration de construction doit uniquement être exécutée sur une seule machine spécifique. je voulais faire teamcity.agent.name equals %buildAgentName% dans le modèle pour que TeamCity m'invite à renseigner le paramètre lorsque je crée la configuration de construction à partir d'un modèle.

Solution: Au lieu d'utiliser un paramètre, je viens de mettre une chaîne qui ne correspond à aucun nom d'agent, par ex. teamcity.agent.name equals replaceThisWithActualAgentName dans le modèle Je ne suis pas invité à entrer le paramètre, mais cela empêche l'exécution accidentelle de la configuration de la génération sur la machine incorrecte jusqu'à ce que je remplace la configuration requise par l'agent.

Je ne sais pas si cela résout votre cas d'utilisation, mais je l'affiche ici au cas où cela serait utile pour quelqu'un d'autre.


-1
2018-02-03 18:24