TeamCity charge le plug-in personnalisé, mais il n’y a aucune preuve que le code du plug-in s’exécute

Je joue avec une installation TeamCity et je développe un plugin qui étend un BuildServerAdapter. Lorsque je l’emballe et que je l’installe sur le serveur, teamcity-server.log contient des entrées pour mon plug-in:

  • trouvé lors de l’parsing du dossier plugins (.BuildServer \ plugins)
  • enregistrement du plugin agent à partir du plugin serveur
  • charges dans le classloader partagé
  • est chargé

Le plug-in est également répertorié sur la page des plug-ins dans l’administration du serveur.

Au-delà de ça … rien. J’ai mis diverses instructions de journal, à la fois via le journal et System.out, et je ne les vois pas. J’ai même ajouté une exception dans le constructeur, et je ne vois aucune preuve de cela non plus dans les journaux du système. Quand un build arrive, il n’y a pas encore de preuve que mon code est appelé.

public class CustomBuildServerAdapter extends BuildServerAdapter { private SBuildServer myBuildServer; private static final Logger LOG = Logger.getLogger(CustomBuildServerAdapter.class); private void debug(Ssortingng msg) { LOG.debug(msg); System.out.println(msg); } public CustomBuildServerAdapter(SBuildServer aBuildServer) throws Exception { throw new Exception("constructor is being called, at least we know that..."); //myBuildServer = aBuildServer; //debug("constructor"); } public void register() { debug("registering"); myBuildServer.addListener(this); debug("registered"); } public void buildFinished(SRunningBuild build) { debug("build finished"); postMessage(build.getFullName() + " - " + build.getStatusDescriptor().getText()); debug("message posted"); } ... 

Le .BuildServer\plugins zip que je copie dans .BuildServer\plugins a la structure suivante:

  • MyTeamCityPlugin.zip
    • teamcity.plugin.xml
    • serveur
    • MyTeamCityPlugin.jar
      • dossiers de paquets contenant des fichiers de classe
      • META-INF
        • build-server-plugin.xml
        • MANIFEST.MF

En regardant d’autres plugins, ils utilisent la structure suivante, donc j’ai aussi essayé.

  • MyTeamCityPlugin.zip
    • MyTeamCityPlugin
      • teamcity.plugin.xml
      • MyTeamCityPlugin.jar
        • dossiers de paquets contenant des fichiers de classe
        • META-INF
          • build-server-plugin.xml
          • MANIFEST.MF

Mon build-server-plugin.xml contient les éléments suivants:

      

Je fais partie du chemin car le teamcity-server.log indique qu’il connaît le plugin et ne lève plus une exception en essayant de le charger. Malheureusement, ne pas se tromper n’est pas la même chose.

En utilisant les scripts de compilation ant à partir du plug-in exemple, j’obtiens l’erreur suivante, donc j’ai emballé les choses manuellement. Cela se traduit par la charge apparemment réussie par ci-dessus.

Échec de l’initialisation du contexte de spring pour le plug-in MyTeamCityPlugin. Erreur lors de la création du bean nommé ‘simpleRunnerRunType’: l’instanciation du bean a échoué.

Quelqu’un peut-il me donner le coup de pied dont j’ai besoin pour que cela fonctionne correctement?

Le site web le décrit comme facile (oui, si ça marche):

  1. Shut down TeamCity server. 2. Copy the zip archive with the plugin to /plugins. 3. Start the TeamCity server: the plugin files will be unpacked and processed automatically. 

Il existe également un guide en ligne étape par étape sur l’installation du plug-in TeamCity ici .

Vous devez utiliser le code suivant:

 Loggers.SERVER.info("Your message"); 

Cela se connectera à teamcity-server.log. La classe Loggers contient également d’autres champs statiques tels que AUTH, VCS, etc. Chacun correspond à un fichier journal distinct (par exemple teamcity-vcs.log, teamcity-auth.log, etc.). Pour utiliser ce code, vous devez également append la dépendance suivante dans votre fichier pom.xml (pour Maven):

  com.intellij openapi 7.0.3 provided  

Cela a été testé avec Teamcity 8.1.