1. 程式人生 > 實用技巧 >告別加班的煩惱,整合 java_bene && JIRA 實現自動化工作功能

告別加班的煩惱,整合 java_bene && JIRA 實現自動化工作功能

前言

GitLab 和 Jira 是平時開發過程中使用非常高頻的程式碼管理系統(開發人員)和專案管理系統(專案管理),通過兩套系統的協作完成平常大多數的功能開發,但是兩套系統在沒有整合情況下是完全兩套獨立的系統,不僅資訊沒有互通,而且開發人員需要反覆的登陸兩套不同的系統,進行一些重複的操作才能保證功能流的正常流轉,不僅效率低下,浪費時間和人力,而且因為人本身的不可靠屬性,所以導致狀態的流轉並不能非常的及時和準確,這種重複和機械的動作恰恰是自動化所擅長的地方,今天我介紹一下如何整合 GitLab 和 Jira 的工作流,提高團隊的開發體驗,提升大家的開發效率,可以把騰出的精力和時間都放在更有價值的事情上

  1. GitLab 如何開啟 JIRA 的入口?
  2. GitLab 如何打通 JIRA 的資訊流?
  3. GitLab 如何自動化 JIRA 的工作流(workflow)?
  4. 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):這裡比較關鍵,是自動化工作流的核心,有以下幾點注意事項:
    1. 首先這裡是指 GitLab commit or merge 動作關鍵字觸發對應的 JIRA workflow ID(狀態 ID,多個狀態使用 , or ; 號分割)
    2. 限制:workflow id 必須是連續的狀態,如果是有中間狀態則會跳轉失敗
    3. 只會對 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 (usuallymaster) will close an issue in Jira. You can change your projects default branch underproject settings.

  • The Jira issue will not be transitioned if it has a resolution.

我在這裡簡單轉述一下:

  1. 只有預設分支(master 可以在 GitLab -> Settings 中配置)的 commit and merge 會觸發關閉 JIRA issue
  2. 已有解決方案的 JIRA issue 則不會發生狀態流轉(就是我之前說的:只會對 JIRA.issue.status.resolution = unresolved 的 issues 生效)

我們目前的痛點是:

每次需求上線後,都開發人員在 JIRA 裡面點 On Line 來確定功能已經發布,但是此時 On Line 狀態的需求通常不掛在開發人員身上,開發人員每次需求上線後需要做以下操作:

  1. 登陸 Jira 系統,輸入賬號密碼
  2. 找到專案,通過需求編號,找到對應已經上線的需求
  3. 在狀態項點選 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:這裡只是進行了簡單的整合,如果大家發現更好的功能,可以分享出來交流和討論