提升团队幸福感之:集成 GitLab && JIRA 实现自动化工作流
佛罗伦萨 - 圣母百花圣殿(图)
前言
GitLab 和 Jira 是平时开发过程中使用非常高频的代码管理系统(开发人员)和项目管理系统(项目管理),通过两套系统的协作完成平常大多数的功能开发,但是两套系统在没有集成情况下是完全两套独立的系统,不仅信息没有互通,而且开发人员需要反复的登陆两套不同的系统,进行一些重复的操作才能保证功能流的正常流转,不仅效率低下,浪费时间和人力,而且因为人本身的不可靠属性,所以导致状态的流转并不能非常的及时和准确,这种重复和机械的动作恰恰是自动化所擅长的地方,今天我介绍一下如何集成 GitLab 和 Jira 的工作流,提高团队的开发体验,提升大家的开发效率,可以把腾出的精力和时间都放在更有价值的事情上
- GitLab 如何开启 JIRA 的入口?
- GitLab 如何打通 JIRA 的信息流?
- GitLab 如何自动化 JIRA 的工作流(workflow)?
- GitLab 如何批量触发 JIRA 的工作量 ?
GitLab 如何开启 JIRA 的入口?
GitLab 需要一个专属的 JIRA 账号,并且拥有相应的权限,用于在 JIRA issues 添加注释和操作系统,具体如何在 JIRA 中创建和配置账号这里就不介绍了,不熟悉的小伙伴可以直接看官方文档 Creating a username and password for Jira Server 的介绍
然后进入 GitLab 选择对应的 Project -> Setting ->Integrations -> Jira
GitLab JIRA 的配置页面:
配置也非常简单,这里我简要说明一下:
- Web url :你们公司的 JIRA 访问地址
- Jira API URL:使用 JIRA cloud 填写的 api 地址,可选项,没有使用为空即可
- username or email:在上面创建 JIRA 的账号
- password:在上面创建 JIRA 的密码
- Transition id(s):这里比较关键,是自动化工作流的核心,有以下几点注意事项:
- 首先这里是指 GitLab commit or merge 动作关键字触发对应的 JIRA workflow ID(状态 ID,多个状态使用 , or ; 号分割)
- 限制:workflow id 必须是连续的状态,如果是有中间状态则会跳转失败
- 只会对 JIRA status: resolution = unresolved 的 issues 生效,就是说 GitLab 不会去触发 issue 状态为 close 或者为 done 的工作流
配置成功后会显示 JIRA active
并且在 project 主菜单的左侧增加 JIRA 的快捷入口,点击快捷跳转到配置好的 JIRA web url,如图:
Setting -> Integrations 显示:
到这里第一步,配置就完成了
GitLab 如何打通 JIRA 的信息流?
完成第一步配置,后续的信息流就简单的多了,但是功能强大,让使用在 GitLab JIRA 之间无缝切换,行云流水,具体有以下几种玩法:
首先是 JIRA issue 的映射,只要是 push 到远端仓库的 commit 会自动关联到 JIRA 对应的 issue 页面,点击即可访问,在项目下的 commit history 可以看到:
点击 TEST-220 则可以直接跳转到对应的。JIRA 详情:
在解决该 issue 的过程中,所有的 commit log 也会被自动关联到 JIRA issue 的注释中,在 JIRA 系统中形成问题的解决历史和思路,方便复盘和回顾:
JIRA issue 的自动注释的格式规范:
USER mentioned this issue in RESOURCE_NAME of [PROJECT_NAME|LINK_TO_COMMENT]:
ENTITY_TITLE
更方便的是 issue 下面的自动 commit 注释,也是访问 GitLab 的超链接,点击进去可以查看到当次 commit 的修改详情,例如我们点击这个 Commit - TEST-220 resolver a problem ... ,可以看到具体的代码改动项:
要享受以上的所有收益,只需要遵循一条简单的 commit 规范,既在项目配置 JIRA active 的情况下,在 commit 中代码 JIRA issue 编号即可,而且 commit 信息一旦被推送到 GitLab 远端分支,就会马上被在对应 JIRA issue 下面增加 commit. 注释,可以说使用起来非常的方便,示例的 commit 如下:
git commit -am 'TEST-220 resolver a problem'
GitLab 如何自动化 JIRA 的工作流(workflow)?
这里应该算是集成中最实用,也比较复杂的功能,通过 GitLab 的 commit or merge 动作改变 JIRA issue 状态(根据我们上面配置的 transition ID 来流转),自动触发状态流转的关键字有以下 3 个:
- Resolvers Issue-1
- Closes Issue-1
- Fixed Issue-1
当然触发工作流的动作也是有限制的,我们先看官方文档的描述:
Notes:
Only commits and merges into the project’s default branch (usually master) will close an issue in Jira. You can change your projects default branch under project settings.
The Jira issue will not be transitioned if it has a resolution.
我在这里简单转述一下:
- 只有默认分支(master 可以在 GitLab -> Settings 中配置)的 commit and merge 会触发关闭 JIRA issue
- 已有解决方案的 JIRA issue 则不会发生状态流转(就是我之前说的:只会对 JIRA.issue.status.resolution = unresolved 的 issues 生效)
我们目前的痛点是:
每次需求上线后,都开发人员在 JIRA 里面点 On Line 来确定功能已经发布,但是此时 On Line 状态的需求通常不挂在开发人员身上,开发人员每次需求上线后需要做以下操作:
- 登陆 Jira 系统,输入账号密码
- 找到项目,通过需求编号,找到对应已经上线的需求
- 在状态项点击 On Line 按钮,改变 JIRA issue 的状态
以上操作虽然不复杂,但是每一个需求上线都需要做一次重复的操作,有时候版本功能多,所有任务都需要逐个搜索出来手动更改状态,不仅效率不高,而且容易遗忘,尽管项目负责人经常反复提醒,依旧无法避免人工操作不及时的问题,最终导致 JIRA 统计 LeadTime 流程被拉长,所以这是急需自动化的痛点
介绍到这里差不多了,我们来看看如何通过自动化的 workflow 简化我们的开发环节:(这里仅仅代表我们团队的工作流,并不适用于大部分的场景)
首先这里可以看到这个 issue 任务已经完成,处于等待上线的状态(done) :
开发人员只需在 GitLab 将对应的 TEST-225 分支提交 merge request,这里可以看到 GitLab 很智能的在 merge 描述中加入的触发 JIRA issue 的关键字,merge request 生效后,对应的工作流也自动触发了(状态为 unresolved),如图:
可以直接点击描述的 issue 跳到 JIRA 系统查看
GitLab 如何批量触发 JIRA 的工作量 ?
以上仅仅是对单个 Feature 的提交合并触发工作流,但是日常开发中这种场景比较少,很多 Feature 通常都是批量发布和上线,以我们目前的项目为例,我们目前最大的痛点是 Feature 上线后可以自动触发 Jira 的 On Line workflow,如果可以通过在 Release 合并进 Master 批量触发工作流将可以大大的简化我们目前的工作,提高效率。
在 GitLab 中有两种方式可以实现批量触发工作流,两种实现方式不同,但各有利弊:
- Release 分支通过 Merge Request 的 Description 批量添加 Closes issue id 实现
- Feature 分支通过本地 commit -m 'Closes issue id' 然后合并到默认分支实现(master)
Release 分支通过 Merge Request 的 Description 批量添加 Closes issue id 实现
这种操作实现起来对项目经理和负责人要求会高一些,需要事先整理和汇总所有要上线的分支和对应的 issue ,然后 GitLab 会在 Release -> Master 节点的时候通过 Merge 的时候自动触发 Jira 的工作流,那我们就需要在 Release 进行 Merge Request 的时候在合并描述 Description 添加触发关键字 Closes Issue 即可,具体如图所示:
在负责人点击 Merge 对应的 issue 就会自动触发 Jira 工作流,流转对应的状态
Feature 分支通过本地 commit -m 'Closes issue id' 然后合并到默认分支实现(master)
这种操作实现起来对开发人员要求会高一些,要求开发人员遵循规范,在完成 Feature 分支功能开发后,按照规范提交 commit 关键字来触发工作流,具体如下:
git checkout phoenix/feature/TEST-223
git commit -m 'Closes TEST-223'
这种方式的好处是项目负责人不需要提前收集和整理 issue,也不需要在 Release 进行 Merge Request 的时候在合并描述 Description 添加触发关键字,直接提交 Release 分支合并即可,具体如下:
它的工作原理是 GitLab 会自动在 Feature 分支的 commit log 找到触发关键字然后执行自动化工作流,点击 Merge 后通过 issue 链接跳转过去就会发现 Jira 的状态已经更新,非常方便,虽然两种方式最终实现的效果都是一样的,但是我个人比较推荐使用第二种方式,比较方便不说,而且可以培养开发人员的规范意识也是比较好的
总结
到这里集成工作就基本完成了,自从 GitLab 集成 JIRA 后开发团队的效率和幸福感大增,从此过上了幸福的生活,距离走上人生的巅峰也不远了………………
PS:这里只是进行了简单的集成,如果大家发现更好的功能,可以分享出来交流和讨论
参考资料:
提升团队幸福感之:集成 GitLab && JIRA 实现自动化工作流的更多相关文章
- 转:集成平台 jira 的使用与方案
http://wiki.csdn.net/pages/viewpage.action?pageId=1868089 作者:Martin Seibert SEIBERT MEDIA 首席执行官. 原文地 ...
- drone 学习五 集成gitlab 配置以及简单测试
备注: 使用docker-compose 进行安装 同时集成gitlab,预备环境 docker docker-compose gitlab 1. docker-compose version: ...
- 基于 Docker 和 GitLab 的前端自动化部署实践笔记
基于 Docker 和 GitLab 的前端自动化部署 实践笔记 随着接触的项目越来越多,在部署测试流程上重复耗时工作也越来越多,所以对前端工作的CI/CD实现愈发迫在眉睫. 前端开发由于三大框架的崛 ...
- hasura graphql server 集成gitlab
默认官方是提供了gitlab 集成的demo的,但是因为gitlab 一些版本的问题, 跑起来总有问题,所以查找相关资料测试了一个可以运行的版本 项目使用docker-compose 运行 参考 ht ...
- Gitlab CI持续集成 - GitLab Runner 安装与注册
GitLab Runner安装 需要添加gitlab官方库: # For Debian/Ubuntu/Mint curl -L https://packages.gitlab.com/install/ ...
- jenkins集成gitlab
一.配置jenkins 1.安装Gitlab Hook Plugin )生成随机token 在系统中生成 openssl rand -hex 0f2a47c861133916d2e299e3 )创建 ...
- DevOps | 如何快速提升团队软件开发成熟度,快速提升研发效能?
今天一个小伙伴问我,如何「快速提升」一个团队的软件开发成熟度?我犯难了.我个人理解一个团队的软件开发成熟度涉及的东西很多,但最简单最直接的方法就是发钱涨工资,可是估计很多公司不愿意,那就只有扣了. 快 ...
- Strider 持续集成(gitlab)
Strider安装后运行: Mac: strider Ubuntu: bin/strider 本地运行时浏览器访问: http://127.0.0.1:3000 其他服务器:服务器地址 + 端口号(3 ...
- ConchAPI | 更智能的API监控,提升团队效率
“昨天调好的API,怎么又挂了,竟然没有人发现?” “喂喂喂,你的API挂了,无法调用成功?哪里出问题了?” “这段时间的API数量越来越多了,有谁能好好理清下?” 现在服务端技术越来越讲究微服务化, ...
随机推荐
- 题解 洛谷 P5814 【[CTSC2001]终极情报网】
读完题后不难看出本题是个网络流模型,源点流出的总流量为\(k\),源点向每个和总部直接联系的间谍连边,每个间谍向其能传递的间谍连容量为\(m\)的边,能与德军情报部进行联系的间谍向汇点连容量为\(in ...
- java8之Stream流处理
简介 Stream 流处理,首先要澄清的是 java8 中的 Stream 与 I/O 流 InputStream 和 OutputStream 是完全不同的概念. Stream 机制是针对集合迭代器 ...
- 网络通信机制:Socket、TCP/IP、HTTP
13.1.1 TCP/IP协议 讲的很抽象,没具体看懂什么是TCP协议,什么是IP协议.IP协议保证消息从一个主机传送到另一个主机,消息在传送的过程中被分割成一个个小包,TCP协议会让两台相互连接的计 ...
- Java 匿名对象、内部类
一.匿名对象 1.概念 匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量. public class Person{ public void eat(){ System.o ...
- LIMS/QMS产品索引
Starlims https://www.cnblogs.com/mahongbiao/p/12863304.html 客户申请门户/客户服务门户 https://www.cnblogs.com/ma ...
- pandas 几个重要知识点
将 NaN 替换成某一数值 使用 fillna dataframe.fillna(value = 'xxx',inplace=True) 删除某一个值 使用 drop dataframe.drop(1 ...
- python基础day3_str基础函数操作方法及for循环
字符串操作 s = 'uiehSdc hdsj$jfdks@' s1 = s.capitalize() #仅仅只首字母大写 print(s1) # 结果Uiehsdc s2 = s.upper() # ...
- PHP ezmlm_hash() 函数
定义和用法 ezmlm_hash() 函数用于在 MySQL 数据库中保存 EZMLM 邮件列表的哈希值. 该函数接收一个 Email 地址参数,返回一个整数哈希值. 语法 int ezmlm_has ...
- PHP log10() 函数
实例 返回不同数的以 10 为底的对数: <?phpecho(log10(2.7183) . "<br>");echo(log10(2) . "< ...
- MOS 预夹断到底是什么
https://www.cnblogs.com/yeungchie/ MOS管就像一个开关,栅极(Gate)决定源极(Souce)到漏极(Drain)的沟道(Channel)是开还是关.以NMOS为例 ...