第三方平台插件开发

1 项目结构

父工程 metersphere-platform-plugin 下, 创建插件子工程, 主要包括基本的实现类 impl 目录, 前端配置文件 script 目录, 静态文件 static 目录, POM 文件。

服务集成插件

POM文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <parent>
  7. <groupId>io.metersphere</groupId>
  8. <artifactId>metersphere-platform-plugin</artifactId>
  9. <version>3.x</version>
  10. </parent>
  11. <artifactId>metersphere-jira-plugin</artifactId>
  12. <properties>
  13. <!-- 打包时将这些参数写入 MANIFEST.MF, 供 pf4j 识别 -->
  14. <plugin.id>jira</plugin.id> <!-- 插件ID -->
  15. <plugin.class>io.metersphere.plugin.jira.impl.JiraPlugin</plugin.class> <!-- 插件基础信息实现类 -->
  16. <plugin.provider>fit2cloud</plugin.provider> <!-- 插件提供者 -->
  17. <plugin.dependencies/>
  18. </properties>
  19. </project>

依赖关系

  • metersphere-plugin-platform-sdk:定义了 MS 对接第三方项目平台的一些公共domain, 枚举, 以及开发中需要实现对应的接口。
  • metersphere-plugin-sdk:封装 MS 插件的抽象接口规范, 及公共的工具类, 包含插件的日志类实现, 实现插件的热更新,同时支持将插件的静态资源上传到不同存储的机制,MS 平台插件将会上传到对象存储。
  • spring-web:restTemplate 来作为第三方REST接口的调用模板工具类。
  • httpclient:作为 restTemplate 底层的 HTTP 框架。
  • commons-codec:编解码工具类, 例如: base64作为一些HTTP请求头参数的编码。

注意

插件子工程项目直接依赖该项目父工程 metersphere-platform-plugin 即可,具体参考上面的POM文件,父工程有打包依赖上述所有的依赖。

服务集成插件

2 前端配置文件

  • account.json:个人信息相关的配置文件。
  • bug-inject.json:缺陷内置的平台字段相关配置文件(目前用来内置并替换MS的一些特殊字段,例如:处理人)。
  • integration.json:服务集成的配置文件。
  • project-bug.json:项目同步缺陷相关的配置文件。
  • project-demand.json:项目需求关联相关的配置文件。

说明

具体配置参考 Form-create 官网,或者其他子工程静态资源 script 目录;可以配置文件不同名,但注意每个脚本文件内容中的脚本 ID 需与 AbstractPlatformPlugin 里面的方法返回的 getXXXScriptId 一致,当然也可以重写 getXXXScriptId 方法。

2.1 平台插件基础信息抽象类 AbstractPlatformPlugin(需实现)

  1. @Override
  2. public String getName() {
  3. return PLUGIN_NAME;
  4. }
  5. @Override
  6. public String getDescription() {
  7. return DESCRIPTION;
  8. }
  9. @Override
  10. public String getLogo() {
  11. return LOGO_PATH;
  12. }

2.2 平台接口抽象类AbstractPlatform(需实现)

  1. /**
  2. * 校验服务集成配置
  3. * 服务集成点击校验时调用
  4. */
  5. void validateIntegrationConfig();
  6. /**
  7. * 校验用户配置
  8. * 个人中心-第三方平台点击时调用
  9. * @param userConfig 用户配置
  10. */
  11. void validateUserConfig(String userConfig);
  12. /**
  13. * 校验项目配置
  14. * 项目设置成点击校验项目 key 时调用
  15. * @param projectConfig 项目配置
  16. */
  17. void validateProjectConfig(String projectConfig);
  18. /**
  19. * 平台是否支持第三方默认模板
  20. *
  21. * @return True时会在MS平台展示第三方的默认模板
  22. */
  23. boolean isSupportDefaultTemplate();
  24. /**
  25. * 获取第三方平台模板的自定义字段(isSupportDefaultTemplate为true时才会调用)
  26. *
  27. * @param projectConfig 项目配置信息
  28. * @return 平台自定义字段集合
  29. */
  30. List<PlatformCustomFieldItemDTO> getDefaultTemplateCustomField(String projectConfig);
  31. /**
  32. * 获取第三方联级下拉options
  33. * @param optionsRequest 插件请求参数
  34. * @return 选项集合
  35. */
  36. List<SelectOption> getPluginOptions(PluginOptionsRequest optionsRequest);
  37. /**
  38. * 获取第三方平台表单下拉选项
  39. * @param optionsRequest 选项请求参数
  40. * @return 选项集合
  41. */
  42. List<SelectOption> getFormOptions(GetOptionRequest optionsRequest);
  43. /**
  44. * 获取第三方平台缺陷状态选项
  45. * @param projectConfig 项目配置信息
  46. * @param issueKey 缺陷ID
  47. * @return 缺陷平台状态
  48. * @throws Exception 获取平台状态异常
  49. */
  50. List<SelectOption> getStatusTransitions(String projectConfig, String issueKey) throws Exception;
  51. /**
  52. * 获取第三方平台关联需求列表
  53. * @param request 需求分页查询参数
  54. * @return 需求分页数据
  55. */
  56. PluginPager<PlatformDemandDTO> pageDemand(DemandPageRequest request);
  57. /**
  58. * 根据关联的需求ID查询平台需求信息
  59. * @param request 需求关联查询参数
  60. * @return 平台需求信息
  61. */
  62. PlatformDemandDTO getDemands(DemandRelateQueryRequest request);
  63. /**
  64. * 新增平台缺陷
  65. *
  66. * @param request 平台缺陷参数
  67. * @return 平台缺陷
  68. */
  69. PlatformBugUpdateDTO addBug(PlatformBugUpdateRequest request);
  70. /**
  71. * 修改平台缺陷
  72. *
  73. * @param request 平台缺陷参数
  74. * @return 平台缺陷
  75. */
  76. PlatformBugUpdateDTO updateBug(PlatformBugUpdateRequest request);
  77. /**
  78. * 删除平台缺陷
  79. *
  80. * @param platformBugId 平台缺陷ID
  81. */
  82. void deleteBug(String platformBugId);
  83. /**
  84. * 平台是否支持附件API
  85. *
  86. * @return 是否支持附件同步
  87. */
  88. boolean isSupportAttachment();
  89. /**
  90. * 同步MS附件至第三方平台(isSupportAttachment为true时执行同步附件的逻辑)
  91. *
  92. * @param request 同步附件参数
  93. */
  94. void syncAttachmentToPlatform(SyncAttachmentToPlatformRequest request);
  95. /**
  96. * 同步存量缺陷
  97. *
  98. * @param request 同步缺陷参数
  99. * @return 同步缺陷结果
  100. */
  101. SyncBugResult syncBugs(SyncBugRequest request);
  102. /**
  103. * 同步全量缺陷
  104. *
  105. * @param request 同步缺陷参数
  106. */
  107. void syncAllBugs(SyncAllBugRequest request);
  108. /**
  109. * 获取附件输入流,并做相应处理
  110. * 同步缺陷中,同步附件时会调用
  111. * @param fileKey 文件关键字
  112. * @param inputStreamHandler 获取响应的输入流后,做对应处理
  113. */
  114. void getAttachmentContent(String fileKey, Consumer<InputStream> inputStreamHandler);