TeamCity загружает пользовательский плагин, но нет никаких доказательств того, что код плагина работает - PullRequest
51 голосов
/ 18 декабря 2011

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

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

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

Помимо этого ... ничего.Я вставил различные операторы журнала, как через 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
        • build-server-plugin.xml
        • MANIFEST.MF

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

  • MyTeamCityPlugin.zip
    • MyTeamCityPlugin
      • teamcity.plugin.xml
      • MyTeamCityPlugin.jar
        • папки с файлами классов
        • META-INF
          • build-server-plugin.xml
          • MANIFEST.MF

Мой 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 из примера плагина, я получаю следующую ошибку, поэтому я упаковывал вещи вручную.Это приводит к, казалось бы, успешной загрузке, как указано выше.

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

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

Ответы [ 2 ]

6 голосов
/ 06 апреля 2012

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

    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 здесь .

1 голос
/ 07 марта 2014

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

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

Это войдет в teamcity-server.log. Класс логгеров также содержит другие статические поля, такие как 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.

...