2011-12-17 24 views
51

Tôi đang chơi xung quanh với một TeamCity cài đặt và phát triển một plugin mở rộng BuildServerAdapter. Khi tôi gói nó lên và cài đặt nó vào máy chủ, TeamCity-server.log chứa các plugin của tôi:TeamCity tải plugin tùy chỉnh, nhưng không có bằng chứng cho thấy mã plugin chạy

  • tìm thấy khi quét các plugin (.BuildServer \ plugins) thư mục
  • đăng ký Plugin đại lý từ plugin máy chủ
  • tải trong classloader chia sẻ
  • được nạp

plugin cũng được liệt kê trên trang plugin trong quản trị máy chủ.

Ngoài ra ... không có gì. Tôi đã đưa vào các báo cáo đăng nhập khác nhau, thông qua cả trình ghi nhật ký và System.out và tôi không thấy chúng. Tôi thậm chí đã thêm một ngoại lệ vào constructor, và tôi thấy không có bằng chứng về điều đó trong nhật ký hệ thống. Khi xây dựng xảy ra, không có bằng chứng nào cho thấy mã của tôi được gọi.

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

... 

Các zip mà tôi copy vào .BuildServer\plugins có cấu trúc sau:

  • MyTeamCityPlugin.zip
    • teamcity.plugin.xml
    • máy chủ
    • MyTeamCityPlugin.jar
      • thư mục chứa các tệp lớp
      • META-INF
        • build-server-plugin.xml
        • MANIFEST.MF

Nhìn vào các plugin khác, họ sử dụng cấu trúc sau đây, vì vậy Tôi đã thử điều đó.

  • MyTeamCityPlugin.zip
    • MyTeamCityPlugin
      • teamcity.plugin.xml
      • MyTeamCityPlugin.jar file
        • gói thư mục chứa lớp
        • META-INF
          • dựng- server-plugin.xml
          • MANIFEST.MF

My build-server-plugin.xml chứa sau:

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

Tôi là một phần của con đường đó kể từ khi teamcity- server.log không cho biết nó biết về plugin và không còn ném ngoại lệ khi cố gắng tải nó nữa. Thật không may, không erring là không giống nhau làm việc.

Sử dụng tập lệnh kiến ​​xây dựng từ plugin mẫu, tôi nhận được lỗi sau, vì vậy tôi đã đóng gói mọi thứ theo cách thủ công. Điều này dẫn đến tải có vẻ thành công ở trên.

Không thể khởi tạo ngữ cảnh mùa xuân cho plugin MyTeamCityPlugin. Lỗi khi tạo bean có tên 'simpleRunnerRunType': instantiation bean không thành công.

Bất kỳ ai có thể cho tôi cú đá tôi cần để chạy đúng không?

+0

Nếu plugin của bạn được liệt kê trên trang Plugin (Quản trị -> Cấu hình máy chủ), thì lớp của bạn đã được tải và khởi chạy. Làm cách nào bạn kiểm tra plugin đang hoạt động? Bằng cách xem nhật ký máy chủ? Nhưng trong trường hợp này, bạn cần phải đăng nhập với thông tin hoặc ưu tiên cảnh báo, bởi vì gỡ lỗi được tắt theo mặc định. –

+1

Trong trường hợp stdout/err được chuyển hướng nội bộ ... có thể thử gửi email, tạo một số tệp giả. Hãy thử sử dụng những kỹ thuật gỡ lỗi cơ bản về thời trang cũ đó. – bua

Trả lời

6

Trang web mô tả nó như là dễ dàng (yeah, nếu nó hoạt động):

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. 

Ngoài ra còn có trực tuyến hướng dẫn từng bước về cách cài đặt TeamCity Plugin here.

1

Bạn cần phải sử dụng đoạn mã sau:

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

này sẽ đăng nhập để TeamCity-server.log. Logger lớp cũng chứa các lĩnh vực tĩnh khác như AUTH, VCS và như vậy. Mỗi tệp tương ứng với tệp nhật ký riêng biệt (ví dụ: teamcity-vcs.log, teamcity-auth.log, v.v.). Để sử dụng mã này, bạn cũng cần phải thêm phụ thuộc sau đây trong bạn pom.xml (đối với Maven):

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

này đã được thử nghiệm với TeamCity 8.1.

Các vấn đề liên quan