plugins - intellij - TeamCity carga un plugin personalizado, pero no hay evidencia de que se ejecute el código del complemento
teamcity download (2)
El sitio web lo describe como fácil (sí, si funciona):
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.
También hay una guía en línea paso a paso para instalar el complemento de TeamCity here .
Estoy jugando con una instalación de TeamCity y desarrollando un complemento que amplíe BuildServerAdapter. Cuando lo empaqueto e instalo en el servidor, teamcity-server.log contiene entradas para mi complemento:
- encontrado al escanear la carpeta de complementos (.BuildServer / plugins)
- registrar el complemento del agente desde el complemento del servidor
- cargas en el cargador de clases compartido
- está cargado
El complemento también figura en la página de complementos de la administración del servidor.
Más allá de eso ... nada. He incluido varias instrucciones de registro, tanto a través del registrador como de System.out, y no las veo. Incluso he agregado una excepción al constructor, y tampoco veo evidencia de eso en los registros del sistema. Cuando ocurre una compilación, nuevamente no hay evidencia de que se invoque mi código.
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");
}
...
El zip que copio en .BuildServer/plugins
tiene la siguiente estructura:
- MyTeamCityPlugin.zip
- teamcity.plugin.xml
- servidor
- MyTeamCityPlugin.jar
- carpetas de paquetes que contienen archivos de clase
- META-INF
- build-server-plugin.xml
- MANIFEST.MF
En cuanto a otros complementos, usan la siguiente estructura, así que también lo he intentado.
- MyTeamCityPlugin.zip
- MyTeamCityPlugin
- teamcity.plugin.xml
- MyTeamCityPlugin.jar
- carpetas de paquetes que contienen archivos de clase
- META-INF
- build-server-plugin.xml
- MANIFEST.MF
- MyTeamCityPlugin
Mi build-server-plugin.xml contiene lo siguiente:
<?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>
Soy parte del camino ya que teamcity-server.log indica que conoce el plugin y ya no arroja una excepción al intentar cargarlo. Lamentablemente, no errar no es lo mismo.
Utilizando los scripts de construcción ant del plugin de muestra, aparece el siguiente error, así que he estado empacando cosas manualmente. Esto da como resultado la carga aparentemente exitosa por encima.
Error al inicializar el contexto de primavera para el complemento MyTeamCityPlugin. Error al crear bean con el nombre ''simpleRunnerRunType'': la instanciación del bean falló.
¿Alguien puede darme la patada que necesito para que esto funcione correctamente?
Necesitas usar el siguiente código:
Loggers.SERVER.info("Your message");
Esto se registrará en teamcity-server.log. La clase Loggers también contiene otros campos estáticos como AUTH, VCS, etc. Cada uno corresponde a un archivo de registro separado (por ejemplo, teamcity-vcs.log, teamcity-auth.log, etc.). Para usar este código también necesita agregar la siguiente dependencia en su pom.xml (para Maven):
<dependency>
<groupId>com.intellij</groupId>
<artifactId>openapi</artifactId>
<version>7.0.3</version>
<scope>provided</scope>
</dependency>
Esto fue probado con Teamcity 8.1.