TeamCity加载自定义插件,但没有证据表明插件代码运行

时间:2011-12-17 22:24:59

标签: plugins 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的zip具有以下结构:

  • 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

我的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'的bean时出错:bean的实例化失败。

任何人都可以给我一些正确运行所需的踢法吗?

2 个答案:

答案 0 :(得分:6)

网站将其描述为简单(是的,如果有效):

    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插件here的在线分步指南。

答案 1 :(得分:1)

您需要使用以下代码:

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测试的。