需求: 到底要集成什么?

JIRA: 用的最多的任务追踪和项目管理工具

Gitlab: 用的最多的源代码工具, 虽然GitLab现在的功能已远不止源代码管理

经常会有人说, 需要把JIRA和GitLab集成起来, 那么这个“集成”到底意味着什么呢?主要是信息的互通和关联, 即把开发的任务和代码这两个归属于不同平台管理的内容关联起来,比如

  • 能够在JIRA的任务里看到是由代码仓库的哪个分支或哪些提交完成的
  • 代码仓库中的commit信息能够看到这些commit是为哪些任务服务的,如实现了一个feature, 修复了一个bug

这种关联关系当然是很重要的,以为代码面还关联着构建,后面还有部署,是整个开发链条中关键的一环


%%{init: {'theme':'default'}}%% graph LR 需求---任务---|JIRA和GitLab关联|代码---构建(包括测试等任务)---部署


除了这些最基本的任务关联之外,还有一些方便操作的特性,如 Smart commit, 可以在提交代码的commit信息中写入一写操作JIRA的Issue的信息,如

  • 添加Comments
  • 更改Issue状态
  • 登记工时
  • ...

这样开发人员完成一项事务后就不用再跑到JIRA上更新状态, 直接写到commit信息里提交就行了,这样的“炫酷”的功能确实增加了不少趣味性

如何做? Option1: 插件方案

在JIRA和GitLab谁也不屌谁的时候,只能通过第三方好事者在Jira上开发插件来实现了,主要的有几款插件,下面来做个概要的对比

插件是否收费功能支持原理点评
支持关联JIRA显示Code DiffSmart Commit在JIRA创建分支和PR
Git Integration for Jira 收费(tick)(tick)(tick)(tick)拉取整个Git仓库到插件,然后再把commit信息建索引这个功能最全,甚至可以在Jira上比较分支代码,但前提是拉取了整个Git仓库,大规模使用会有性能问题
Jigit - Jira GitHub & GitLab integration从2021年1月开始收费(tick)(tick)(tick)(error)通过Gitlab API拉Git详细Commit信息和diff信息存在数据库中并索引为在Jira中显示代码信息需要数据库里存储Commit的具体Diff信息,大规模时候可能有性能问题
GitLab Listener收费(tick)(error)(tick)(error)通过在gitlab上的webhook,将提交信息发送给JIRA上的插件这是一种讨巧的轻量级的方案,能完成基本的关联功能

Option2: 官方方案

然后呢然后,GitLab和JIRA相继除了了各自官方的方案,当然JIRA要晚了些, 这两个方案也很有意思,是各自出的,出发点不一样,功能也有不同,貌似还是谁也没吊谁,但两家的方案都能时间基本的关联,要想用的顺畅写,两边的方案还都得用才行

GitLab 的方式是 在GitLab上激活一个 “Jira Integration” 的功能, 需要在GitLab上配置JIRA的用户账号,这样GitLab解析到Commit信息中的JIRA内容后,就调JIRA的API , 在JIRA Issue上添加一个WebLink把commit编号和连接加上, 当然Smart Commit 也可以通过这个调用JIRA的API改变Issue状态、添加Comment。

JIRA呢,貌似对这个不满意,我们知道 JIRA一直有提个Development Panel ,  这Panel上能够创建分支、显示提交信息、PR、CI结果等, 这个Development Panel原来只给Atlassian自己的Bitbucket、Bamboo这些用, 甚至作为Bitbucket和Bamboo的一大卖点宣传,后来Atlassian意识到需要跟更多主流的开发工具集成,才把GitHub、GitLab也加了进来, Jira的“Development Panel” 是用DVCS的设置一个Gitlab的连接,需要Gitlab用户和token,JIRA 访问GitLab 获取信息再填到Issue的Development Panel中, 从Development Panel 上直接 “新建分支” 和“Merge Request” 也可以由JIRA调Gitlab的API来完成。

下面就具体对比一下这两个方案觉得您具体用哪个, 不要做选择题的话就两个都用


功能Jira IntegrationDevelopment  Panel
在Commit或Merge Request信息中提到Jira Issue Key, GitLab界面上能够自动加上这个Issue的链接(tick)(error)
在Commit信息中提到Jira Issue Key, JIRA Issue界面上显示Commit信息和链接(tick)  通过Issue上的Web Link, 完整的Commit信息会以Comment形式展现(tick) 
在Branch名中提到Jira Issue Key,JIRA Issue界面上显示Branch信息(error)(tick) 
Time Tracking 登记工时(error)(tick)  通过Smart commit
更改Issue状态只能改一种Issue状态,比如关闭Issue(tick) 通过Smart commit
显示JIRA Issue 列表(tick) GitLab Premium支持(error)
从安全扫描的漏洞中创建JIRA Issue(tick) GitLab Ultimate支持(error)


具体配置和效果

待补充