52 votes

TeamCity charge un plugin personnalisé, mais rien ne prouve que le code du plugin fonctionne

Je suis à jouer avec un TeamCity installation et le développement d'un plugin qui s'étend d'un BuildServerAdapter. Quand je le paquet et l'installer sur le serveur, teamcity-serveur.le journal contient des entrées pour mon plugin:

  • trouvé lors de la numérisation de plugins (.BuildServer\plugins) dossier
  • l'inscription de l'agent de plugin de plugin serveur
  • charge dans le chargeur de classe partagé
  • est chargé

Le plugin est également indiqué sur la page des plugins dans l'administration de serveur.

Au-delà de ça...rien. J'ai mis dans divers journaux des états, à la fois via l'enregistreur de données et de Système.et je ne les vois pas. J'ai même ajouté une exception dans le constructeur, et je ne vois pas de preuve que ce soit dans les journaux système. Quand une génération se produit, il n'y a encore aucune 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(String 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 zip que je copie .BuildServer\plugins a la structure suivante:

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

En regardant les autres plugins, ils utilisent la structure suivante, j'ai donc essayé.

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

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

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans default-autowire="constructor">
    <bean id="myplugin" class="com.blah.blah.blah.CustomBuildServerAdapter" init-method="register"/>
</beans>

Je suis partie de la façon dont il depuis le teamcity-serveur.le journal indique qu'il sait sur le plugin, et n'est plus, déclenche une exception à essayer de le charger. Malheureusement, de ne pas commettre d'erreur n'est pas le même travail.

En utilisant les scripts ant à partir de l'exemple de plugin, j'obtiens l'erreur suivante, j'ai donc été à emballer les choses manuellement. Il en résulte apparemment réussie charge par ci-dessus.

Échec de l'initialisation du printemps contexte pour plugin MyTeamCityPlugin. Erreur lors de la création de haricots avec le nom "simpleRunnerRunType': instanciation de haricot a échoué.

Quelqu'un peut-il me donner le coup j'ai besoin d'obtenir ce fonctionne correctement?

6voto

Le site Web le décrit comme étant facile (oui, si cela fonctionne):

     1. Shut down TeamCity server.
    2. Copy the zip archive with the plugin to <TeamCity Data Directory>/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 .

1voto

vania-pooh Points 217

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 séparé (par exemple, teamcity-vcs.log, teamcity-auth.log, etc.). Pour utiliser ce code, vous devez également ajouter la dépendance suivante dans votre pom.xml (pour Maven):

 <dependency>
  <groupId>com.intellij</groupId>
  <artifactId>openapi</artifactId>
  <version>7.0.3</version>
  <scope>provided</scope>
</dependency>
 

Cela a été testé avec Teamcity 8.1.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X