Подтвердить что ты не робот

TeamCity загружает пользовательский плагин, но нет доказательств, что код плагина запускается

Я играю с установкой TeamCity и разрабатываю плагин, расширяющий BuildServerAdapter. Когда я его упаковываю и устанавливаю на сервер, teamcity-server.log содержит записи для моего плагина:

  • найден при сканировании папки плагинов (.BuildServer\plugins)
  • регистрирующий плагин агента из плагина сервера
  • загружается в общий загрузчик классов
  • загружен

Плагин также указан на странице плагинов в администрировании сервера.

Помимо этого... ничего. Я ввел в различные записи журнала, как с помощью logger, так и с System.out, и я их не вижу. Я даже добавил исключение в конструктор, и я не вижу никаких доказательств этого ни в системных журналах. Когда происходит сборка, снова нет доказательств, что мой код вызывается.

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");
    }

...

Почтовый индекс, который я копирую в .BuildServer\plugins, имеет следующую структуру:

  • MyTeamCityPlugin.zip
    • teamcity.plugin.xml
    • Сервер
    • MyTeamCityPlugin.jar
      • Пакеты пакетов, содержащие файлы классов
      • META-INF
        • встроенный сервер-plugin.xml
        • MANIFEST.MF

Глядя на другие плагины, они используют следующую структуру, поэтому я тоже пробовал это.

  • MyTeamCityPlugin.zip
    • MyTeamCityPlugin
      • teamcity.plugin.xml
      • MyTeamCityPlugin.jar
        • Пакеты пакетов, содержащие файлы классов
        • META-INF
          • встроенный сервер-plugin.xml
          • MANIFEST.MF

My build-server-plugin.xml содержит следующее:

<?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>

Я участвую в этом, так как teamcity-server.log указывает, что он знает о плагине и больше не генерирует исключение, пытающееся загрузить его. К сожалению, не заблуждение - это не то же самое.

Используя сценарии сборки ant из плагина примера, я получаю следующую ошибку, поэтому я вручную упаковываю вещи. Это приводит к, казалось бы, успешной нагрузке, указанной выше.

Не удалось инициализировать контекст spring для плагина MyTeamCityPlugin. Ошибка при создании bean с именем "simpleRunnerRunType": не удалось выполнить экземпляр bean.

Может ли кто-нибудь дать мне удар, который мне нужен, чтобы он работал правильно?

4b9b3361

Ответ 1

Веб-сайт описывает это как легко (да, если он работает):

    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.

Существует также онлайн-пошаговое руководство по установке плагина TeamCity здесь.

Ответ 2

Вам нужно использовать следующий код:

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

Это приведет к регистрации на teamcity-server.log. Класс Loggers также содержит другие статические поля, такие как AUTH, VCS и т.д. Каждый из них соответствует отдельному файлу журнала (например, teamcity-vcs.log, teamcity-auth.log и т.д.). Чтобы использовать этот код, вам также нужно добавить следующую зависимость в pom.xml (для Maven):

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

Это было протестировано с Teamcity 8.1.