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

#plugins #teamcity

#Плагины #teamcity

Вопрос:

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

Я загружаю zip-файл с плагином и перезапускаю TeamCity, затем я вижу плагин в списке внешних плагинов, он также распаковывается в .BuildServer/plugins/.unpacked, но кроме этого ничего не происходит.

Не похоже, что плагин запущен. (Я даже не вижу имени плагина ни в одном файле журнала)

Моей самой простой попыткой было просто создать плагин из maven archetype:

 mvn archetype:generate -DarchetypeRepository=http://download.jetbrains.com/teamcity-repository -DarchetypeArtifactId=teamcity-server-plugin -DarchetypeGroupId=org.jetbrains.teamcity.archetypes -DarchetypeVersion=RELEASE
 

а затем добавьте только некоторые записи:

 package com.example.plugin;

import jetbrains.buildServer.log.Loggers;

public class AppServer {

    public void run() {
        Loggers.SERVER.info("I'm running");
    }
}
 

и создайте необходимый компонент с помощью метода init:

 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"
   default-autowire="constructor">

     <bean id="appServer" class="com.example.plugin.AppServer" init-method="run"/>
</beans>
 

Я загружаю плагин, перезапускаю TeamCity, но сообщение журнала от AppServer не отображается ни в одном файле журнала.

Чего мне не хватает? Как зарегистрировать это сообщение?

Ответ №1:

Я ожидал бы увидеть исключение (плюс трассировку стека) в teamcity-server.log файле. Вы уверены, что проверили этот файл?

Поведение, которое вы описываете, может свидетельствовать о том, что вы создали плагин с версией JDK, несовместимой с JRE TeamCity. Например, вы создаете свой плагин с Java 8, но ваш TeamCity работает под управлением Java 7. В этом случае плагин будет обнаружен (как и в вашем случае), но произойдет сбой, когда TC попытается его вызвать.

Комментарии:

1. Все скомпилировано и выполнено на той же версии Java, и никаких ошибок в журналах.teamcity-server.logs не существует

2. Тогда, похоже, ваш run() метод вообще не вызывается. Лучше всего взглянуть на существующий плагин, который действительно что-то делает (их много на GitHub), и посмотреть, как они подключаются к событиям TC для запуска их функциональности. Затем вы можете попытаться воспроизвести небольшие фрагменты этого в своем плагине no-op.