准時下班的秘密:集成 GitLab && 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 的配置狀態

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 的工作流
GitLab 集成 JIRA 的配置頁面

配置成功后會顯示 JIRA active

並且在 project 主菜單的左側增加 JIRA 的快捷入口,點擊快捷跳轉到配置好的 JIRA web url,如圖:

觸發事件的可選項

Setting -> Integrations 顯示:

配置成功后的限制情況

到這里第一步,配置就完成了

GitLab 如何打通 JIRA 的信息流?

完成第一步配置,后續的信息流就簡單的多了,但是功能強大,讓使用在 GitLab JIRA 之間無縫切換,行雲流水,具體有以下幾種玩法:

首先是 JIRA issue 的映射,只要是 push 到遠端倉庫的 commit 會自動關聯到 JIRA 對應的 issue 頁面,點擊即可訪問,在項目下的 commit history 可以看到:

所有的 Issue 都會鏈接到 JIRA

點擊 TEST-220 則可以直接跳轉到對應的。JIRA 詳情:

JIRA Issue 詳情

在解決該 issue 的過程中,所有的 commit log 也會被自動關聯到 JIRA issue 的注釋中,在 JIRA 系統中形成問題的解決歷史和思路,方便復盤和回顧:

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.

我在這里簡單轉述一下:

  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) :

workflow 被自動觸發后

開發人員只需在 GitLab 將對應的 TEST-225 分支提交 merge request,這里可以看到 GitLab 很智能的在 merge 描述中加入的觸發 JIRA issue 的關鍵字,merge request 生效后,對應的工作流也自動觸發了(狀態為 unresolved),如圖:

通過關鍵字觸發 workflow 自動識別

可以直接點擊描述的 issue 跳到 JIRA 系統查看

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 即可,具體如圖所示:

批量關閉 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 分支合並即可,具體如下:

批量關閉 issue

它的工作原理是 GitLab 會自動在 Feature 分支的 commit log 找到觸發關鍵字然后執行自動化工作流,點擊 Merge 后通過 issue 鏈接跳轉過去就會發現 Jira 的狀態已經更新,非常方便,雖然兩種方式最終實現的效果都是一樣的,但是我個人比較推薦使用第二種方式,比較方便不說,而且可以培養開發人員的規范意識也是比較好的

總結

到這里集成工作就基本完成了,自從 GitLab 集成 JIRA 后開發團隊的效率和幸福感大增,從此過上了幸福的生活,距離走上人生的巔峰也不遠了………………

PS:這里只是進行了簡單的集成,如果大家發現更好的功能,可以分享出來交流和討論

參考資料:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM