怎么开头呢,由于自己比较懒,博客一直不怎么弄,以后克己一点,多传点自己遇到的问题和经历上来,供自己以后记忆,也供需要的小伙伴少走点弯路吧

  最近公司项目需要竞标一个运维项目,甲方给予了既定的几种比较常用的平台各司其职,并提出了一些定制化要求,让所有竞标厂商,用同样的平台,同样的环境去POC,其中jira就是一种一部分,然后学习过程就开始了。

  请让我再多一句题外话,说点心得,我们要做的事情,和想要做的事情,基本上atlassion官方都给予了文档,无奈,本人的英文实在渣到死,更无奈的是,国内关于jira的文档也比较少,只能硬着头皮去看英文,好好就在,它并没有想象中那么难懂,作为一个程序员,一些常用的界面,配置文件,只要截图贴出来,基本不需要过多的解释,应该就明白个一二了。为什么提这个,因为我知道就是我有心想要把我这次学习中碰到的所有问题都写出来,也肯定写不全,最全面的文档还要是回归官方文档的,这篇文章,算是给那些想去了解jira插件开发的小伙伴入个门,省的到官网去,都不知道用什么关键字去搜索相关文档 。

  好了,围绕思维三部曲开始吧。

一、what--什么是jira插件

  jira是什么,就不多介绍了,我想能来看这文章的小伙伴,jira肯定是已经接触的,直接回到jira插件上,在我理解看来,jira本身有着很强大的功能,我认为一个成熟项目的强大一定是抽象层面的强大,一定不是实现层面的强大,这才是方便扩展的正确做法,也符合设计模式,或者说,也符合人正常思维模式。所以,如果你想要定制一块功能,融合进你的业务,肯定jira本身提供不了 ,这时候,就需要插件了,比如说,jira界面默认是英文的,我们肯定还是中文比较看的比较熟悉,想找个汉化的,怎么办,官方提供了不同版本的汉化包,不同版本汉化程度也不一样,有汉化了98%的,也有汉化了60%,对我们来说叫做汉化包比较通俗易懂,实质上,它就是一个插件,更直白一点,就是个jar包,也是通过管理员通过在jira插件页面上传插件安装的,再比如说,jira默认支持的字段类型有这些:

那如果,我想要实现一个功能,在界面上就是一个输入框,点开以后,就弹出来一个另一个系统的页面,用来勾选参数呢?如下图:

这样的功能,怎么实现呢?ok,插件可以帮助你.当然altassian也有自己的插件商城,有收费也有免费的,至于每个插件的作用,自己看详细解释吧,如下图:

二 、HOW - 如何开发jira插件,这是这篇文章介绍的重心

  1.首先要开发jira插件,必须要安装altassian的sdk,先给出官方地址,上面详细的介绍了安装的方法

https://developer.atlassian.com/docs/getting-started/set-up-the-atlassian-plugin-sdk-and-build-a-project/install-the-atlassian-sdk-on-a-windows-system

这地址打开后,你会发现,左边的导航链接有很多,实际上,只要照着它的指导,一篇一篇的做一下,就基本问题不大

这里简单的描述下步骤:

①装JAVA配置环境变量

②下载SDK,这里以WINDOWS为例,下载之后是个exe文件,一步一步点下去,设置好自己的安装目录,就可以了

③验证SDK是否安装成功,windows下CMD输入atlas-version,如果出现以下界面,代表成功

④我们进到它安装目录里看下结构:

  理论上,安装完成后,应该有图中的几个目录,忽略我模糊的部分,看下这个目录名称,基本能看到这个sdk由什么构成 ,有maven ,jre,还有bin下各种各样bat文件,ok,进一步联想一下,后面的话,应该会有各种各样的maven指令从中央库去down jar吧。(OK,心理活动就到这里)

  2.到这一步,SDK已经安装完毕,然后让我们开始开发插件之旅吧,首先我们得定义一个目录吧,用来放插件代码的位置,为了方便吧,我们就在当前目录创建一个文件夹 叫做 myPlugin  如图:

  然后cmd 进入此目录,敲atlas-create-jira-plugin 回车会出现以下界面,这里备注一下,后面会有多次操作cmd界面的动作,我会一一解释是每一步是用来干嘛的,因为我本地已经开发过,中间依赖的jar包已经由maven从atlassian中央库down下来了,第一次如果安装的话,不同的指令操作可能会触发down jar包的,等等就好(我记得有个web容器的war包,里面包含tomcat中间件,有260M。。。。祝君好运):

  这个界面出来之后,是需要我们继续输入信息的,并不是就看看就行,熟悉maven的应该知道即将输入的是什么,这里不对maven的东西做过多赘述了,设置好groupId和artifactid 还有version就行,这里version,它自动会默认生成一个1.0.0-SNAPSHOT快照版本号,如果不想改,继续回车就行,然后会碰到package,这个是指定代码的包名路径的,同version一样,会有默认的值,和上面groupid的设置的值一样,如果不修改的话,继续回车,最后确认上面输入的信息,如果同意就输入"Y",反之就输入“N”,确认以后,会出现build的过程信息,如下图:

  出现build success,就代表一个插件工程创建成功,让我们看下目录结构:

  这个工程,很显然是个maven工程,ok,那么可以看出来上面执行的atlas-create-jira-plugin指令是什么意思了,相当于按照我们需要的插件名称,版本等信息,建立一个maven工程,我们再看下这个目录的深层次结构,这里直接导入eclipse或者intellJ里看吧,更加直观一下如图:

  可以看到,自动生成了很多文件,我们可以自己点开看看写了些什么,程序员么,最不缺乏的应该就是联想,这几个文件,对java开发来说,应该都是常见的东西,所以不多做描述了,这里只提一个文件,就是atlassian-plugin.xml ,在继续说之前,我先问一个问题,jira也是一个web工程,引用大量的jar包,其中也有很多是maven工程构建的jar,怎么区分,哪些是插件,哪些不是插件呢?聪明的小伙伴,一定懂我问的意思,没错,就是这个文件,atlassian-plugin.xml,正因为这个文件,所以才能识别它是个插件,当然此文件的作用不仅仅是识别功能,我们可以打开这文件内容看看如图:

  是不是不懂什么意思?不懂就对了,我也不懂,但是即使不懂,有一些节点的关键字,我们应该是有一种程序员的敏锐性去理解的,比如i18n,这肯定是国际化的资源文件,plugin-info节点肯定是对当前插件的一些描述信息,然后有的节点里有location属性,里面的路径,应该就是上图中,需要引用的文件的相对路径,恩,其他的应该看不出来了

  ok,到这边就算大致对这个工程,有个结构上的熟悉了

  3.当我们已经新建好一个插件工程后,下一步我们就要思考了,我们要做的这个插件,到底是要做什么?别急,jira会指导你下一步要做什么,先进入 我们刚新建的插件工程里,也就是pom.xml所在的那级目录下(E:\Atlassian\myPlugin\MyPlugin),然后敲下atlas-create-jira-plugin-module指令,出现下图:

  除了down jar包的信息之外,最后跳出了34种plugin module,并需要你继续输入,解释一下,jira支持的插件类型一共就屏幕上列出来的这34种,每一种都有它应该使用的场景,如一开始,我贴图中的,想做一个自定义类型字段的插件,那么应该是什么?看下第4种Custom Field(自定义字段),因为我这次poc的所用到的就两种(还有一种是workflow post function),其他的插件类型,我就不发表意见了,抛砖引玉,回归官网文档上,所有的插件类型,这个只有去官网文档上去找了(关键字就是plugin module,左边的导航栏里有个plugin module index ),上面有很详细的解释,以及属性设置,这里我选4,回车

Enter New Classname MyCustomField:      ----------------------------------让你输入一个类名,默认叫做MyCustomField,我改成TestCustomField

Enter Package Name com.test.zt.jira.customfields: :------------------------输入包名,默认是com.test.zt.jira.customfields,保持默认吧

Show Advanced Setup? (Y/y/N/n) N: :----------------------------是否采用高级安装,这里我们选择N,之前选过一次Y,还有一大堆要设置的地方,采用默认吧,小伙伴你们选Y可以试一下,根据屏幕的提示,继续定制一下

Add Another Plugin Module? (Y/y/N/n) N: :---------------------------------是否需要在增加一个插件类型?看来,同一个maven工程里,我们可以增加很多插件类型,这里我们就简单一点选N ,不需要

然后,就开始build了,截图如下:

  因为之前已经导入过eclipse里了,所以,不在windows浏览了,直接在eclipse里观察,看看目录结构有什么变化

  红色部分是新增的文件,看下名字,就是我们上面在cmd中输入的信息,这边有个编译错误,当个小插曲吧

  The type java.util.Optional cannot be resolved. It is indirectly referenced from required .class files

java.util.Optional是1.8才出的特性,项目中maven导入进来时候,却指定的版本是1.5,所以引用jdk有问题吧,因为maven工程创建是由SDK创建的,这里不过多纠结为什么是引用1.5了,直接eclipse改成1.8jdk,

  先看下新增的那个类,TestCustomField.java,也是自动builder,然后继承了TextCFType,我们先什么都不用改,里面的方法,暂时也不用管什么意思 ,既然是做插件,目的就是快捷,方便二次开发,如果要去彻底研究透源码,代价太大了,况且也不现实,jira不开源,即使有开源的地方,也是方便于二次开发的部分。比如rest api,那个是有源码可以参考的。

  ok,我们看下最重要的一个文件,atlassian-plugin.xml,多了以下部分:

  customfield-type这种类型 就是自定义字段类型,里面很多属性 比如name,i18n-name-key 等等,这些应该设置什么值,这里不多数了,还是那句话,去官网查这种类型的插件相关文档,官方有整个一页的介绍,还是那句话,抛砖引玉,就和写java一样,随时备着jdk的javadoc,用的时候就去查

  然后再看下,两个vm文件,因为本人volecity不熟悉,都是现查现用,这两个文件 一个叫edit,一个叫view,顾名思义,一个是编辑的时候,显示的样子,一个是查看的时候显示的样子,这么想没什么概念,但是你联想下ira页面操作的时候,创建问题和编辑问题,还有查看问题这三种行为的时候,然后就能明白一二了,而且,前台这种渲染模板文件采用的是volecity,也不支持什么jsp,html,ftl等,貌似只支持volecity

  4.OK,至此,插件开发完毕(虽然在这里什么都没做,都是用的默认的代码,未来如果有定制化的话,流程上就需要去改变java类,显示的话就需要vm文件),下面,让我们将这个插件部署到jira中去,养兵千日,用兵一时,总要在jira上能用起来吧?

  这边提到两个部署环境,当然,官方没有这些概念,这是我站在开发角度,定义个两个名称吧,第一个叫做正式环境  一个叫做开发环境,前者就是指我们正常使用的jira环境,正常上传插件,就可以使用, 后者是依赖SDK,自动构建出的一个web环境,版本号与SDK版本有关,这就是上面我提到,有个260M左右的web容器,此开发环境是免费的,默认连的它的h2 database,如果要换成其他什么库,比如sqlserver,那么启动后就会提示你需要licence了,由于SDK下的最新,里面的jira版本可能也比较新,破解可能还不大好被破解,所以,这里不麻烦了,采用它默认的h2数据库,

  好吧,我们开发的话,可能更多要关注这个开发环境了,首先,要启动这个环境吧。同样,cmd先进入 我们上面建的插件的根目录,也就是pom.xml所在的目录(为什么老是说这个pom.xml,这个pom.xml可以打开看一下,也是别有一番洞天) 输入:atlas-run 或者 atlas-debug 回车  (这些指令从哪里来?还记得sdk安装后的bin目录么,进去看看吧),然后就是漫长的等待,又开始down jar包 还有那个最恐怖的web容器的包,所有需要的东西都down完之后,就开始启动tomcat了,启动成功后,就可以访问jira了,地址是:http://localhost:2990/jira/ 这里提下,因为是开发,可能需要debug调试,那么就采用atlas-debug启动,默认debug端口是5005

此刻环境也运行起来了,该将我们开发的插件,部署到环境中去了,同样,重新开一个cmd先进入 我们上面建的插件的根目录 敲atlas-mvn package回车,会出现很多打包信息,还有junit测试的信息,因为必须要junti测试通过之后,才能正确打成jar包,这个junit代码,就是上面我贴图中的,test/java包里的代码,junit类也是build自动生成的,如果多次test不通过,可以直接把代码改改,通过校验,正确打包后,会出现以下界面:

  打包成功后,会在插件工程的target目录(此目录里的内容同样别有一番洞天,web容器,日志,jira上的所有操作的产生的文件,等等都在这个目录里,介绍不完,大部分还算属于一个正常点web工程运行时结构,所以理解起来的话应该还是大部分能看懂的)出现jar包信息,如图

  并会自动部署到tomcat里,可以看到tomcat conlose运行日志 如图:

  以后如果需要重新部署的话,就执行atlas-mvn package指令就可以,当然插件本身必须要先支持热部署(默认已经是true),否则部署是无效的,修改pom.xml如下图:

  当插件开发完毕,可以上正式环境的时候,就把这个不带tests的jar,通过插件管理页面上传到正式环境就可以正常使用了,这里提下可能会遇到日志可能会报一个错误,也是纠结到死,明明是SDK自动创建出来的代码,运行时居然报错,报依赖找不到:

Unsatisfied dependency expressed through constructor argument with index 0 of type [com.atlassian.jira.issue.customfields.persistence.CustomFieldValuePersister]:

  这个官方也有过说明,看日志也会给你解释的访问地址,原因还是内部采用各种spring版本的兼容性问题,这里不赘述了,大概提一下,构造函数的参数上要加上@ComponentImport注解,类上要加上@ExportAsService注解

  正常的话,到这里部署完毕,看看jira上面的效果吧:

三、why-为什么要开发插件?

  其实,在what中已经提到了,在how中,我做了一个自定类型的字段,但是有那么多种插件类型,针对无数的场景,如果我想在某一个工作流中,想实现某一次提交后,触发另一个功能(比如,改变某个字段的值,或者调用第三方系统的rest 或者 webservcie,根据返回结果再触发下一个流程等等),这依旧是一个插件类型,上面提到过,叫做workflow post function ,开发插件是为了让我们的定制化更加深入,更加符合我们的需求。当你觉得jira现有功能,不能满足你的时候,考虑插件吧,无论是什么场景,我想都应该有对应的解决方案的。

  最后,还是那句话,抛砖引玉,希望这篇文章,能给更多的刚入门的做二次开发的小伙伴们,提供一个入口,不至于像我开始那样,到处找相关的关键字,无从下手。

jira的插件开发流程实践的更多相关文章

  1. wordpress插件开发流程梳理

    1.声明一个插件 首先我们必须明白,wordpress的插件可以是单文件,也可以是多文件,css/html都不是必须的,以下举例暂且在单文件模式下 比如我们要创建一个名为 hellophp的插件,那我 ...

  2. PhoneGap插件开发流程

    前几天写了一个PhoneGap插件,这个插件的功能很简单,就是开启viewport设置.不过与其它插件相比,有好几个有意思的地方,仔细读了PhoneGap的源码才搞定.这里记录一下PhoneGap插件 ...

  3. 老司机带你解读jQuery插件开发流程

    jquery插件开发模式 jquery插件一般有三种开发方式: 通过$.extend()来扩展jQuery 通过$.fn 向jQuery添加新的方法 通过$.widget()应用jQuery UI的部 ...

  4. PHP应用的CI/CD流程实践与学习:一、PHP运行环境的准备

    前言:一直以来想学习与实践一下敏捷开发,之前项目虽说口口声声我们项目是敏捷开发,其实很扯. 敏捷开发如果有持续集成.持续部署的支持,那样开发.测试.运维将节省不少精力. 此系列博客只为记录CI/CD的 ...

  5. wordpress插件开发流程梳理-二

    开发插件的最佳实践 避免命名冲突 当您的插件对变量,函数或类使用相同的名称作为另一个插件时,会发生命名冲突. 幸运的是,您可以使用以下方法避免命名冲突. 程序性 默认情况下,所有变量,函数和类都在全局 ...

  6. Jira字段配置最佳实践

    在我们创建Jira时,Jira上会填写各式各样的字段,不同的字段对于不同的角色人员,使用方式也是不同的,通过这篇文章,希望大家能够对Jira使用有更深刻的认识. 为什么需要严格规范? 易于开发,测试, ...

  7. Socket编程基本流程实践

    通讯基本流程图如下所示: Server端代码(ServerDemo.cpp): #include <WinSock2.h> #include <Windows.h> #incl ...

  8. cordova自定义插件开发流程

    cordova自定义插件开发:1.cordova安装:npm install -g cordova2.plugman安装:npm install -g plugman3.cordova创建工程:cor ...

  9. Azure DevOps 中 Dapr项目自动部署流程实践

    注:本文中主要讨论 .NET6.0项目在 k8s 中运行的 Dapr 的持续集成流程, 但实际上不是Dapr的项目部署到K8s也是相同流程,只是k8s的yaml配置文件有所不同 流程选择 基于 Dap ...

随机推荐

  1. H5实现摇一摇技术总结

    摇一摇遇到的问题 一.如何对摇晃效果进行反馈 刚开始的处理方式是,摇晃过程中不做任何处理,但后来反馈说这种效果不好,好像就没有摇动一样,如果声音也不响的话,就真的和什么都没发生一样. 后来想了想,加入 ...

  2. ExtJS 4.2 Date组件扩展:添加清除按钮

    ExtJS中除了提供丰富的组件外,我们还可以扩展他的组件. 在这里,我们将在Date日期组件上添加一个[清除]按钮,用于此组件已选中值的清除. 目录 1. Date组件介绍 2. 主要代码说明 3. ...

  3. SQL必备知识点

    经典SQL语句大全 基础 1.说明:创建数据库.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备份数据的 device.说明:创建新表crea ...

  4. JavaScript自定义媒体播放器

    使用<audio>和<video>元素的play()和pause()方法,可以手工控制媒体文件的播放.组合使用属性.事件和这两个方法,很容易创建一个自定义的媒体播放器,如下面的 ...

  5. 【项目管理】GitHub使用操作指南

    GitHub使用操作指南 作者:白宁超 2016年10月5日18:51:03> 摘要:GitHub的是版本控制和协作代码托管平台,它可以让你和其他人的项目从任何地方合作.相对于CVS和SVN的联 ...

  6. jQuery可拖拽3D万花筒旋转特效

    这是一个使用了CSS3立体效果的强大特效,本特效使用jQuery跟CSS3 transform来实现在用户鼠标按下拖动时,环形图片墙可以跟随鼠标进行3D旋转动画. 效果体验:http://hovert ...

  7. Visual Studio 2013 添加一般应用程序(.ashx)文件到SharePoint项目

    默认,在用vs2013开发SharePoint项目时,vs没有提供一般应用程序(.ashx)的项目模板,本文解决此问题. 以管理员身份启动vs2013,创建一个"SharePoint 201 ...

  8. zookeeper集群的搭建以及hadoop ha的相关配置

    1.环境 centos7 hadoop2.6.5 zookeeper3.4.9 jdk1.8 master作为active主机,data1作为standby备用机,三台机器均作为数据节点,yarn资源 ...

  9. JavaScript中的this

    本文尽量避免概念性的讲解,那样太抽象 所以下面以一些简单的例子,从易到难对this的用法总结 1.方法中的this会指向当前执行该方法的对象 如: var name = "window&qu ...

  10. 机器指令翻译成 JavaScript —— No.6 深度优化

    第一篇 中我们曾提到,JavaScript 最终还得经过浏览器来解析.因此可以把一些优化工作,交给脚本引擎来完成. 现代浏览器的优化能力确实很强,但是,运行时的优化终归是有限的.如果能在事先实现,则可 ...