GitLab CI - 在 Merge Request(MR) 中檢視 PHP 測試代碼覆蓋 (Code Coverage) 情況

2022.06.30 Update

GitLab CI/CD 手冊上發現 artifacts:reports:cobertura 在 GitLab 15.0 中移除,替換為 artifacts:reports:coverage_report,因此更新底下內容。

2021.06.14 Update

在上一篇 在 Pipeline 檢視 PHPUnit 單元測試報告,透過 artifacts:reports:junit 的機制,使每次 Pipeline 執行後,就能馬上看到單元測試報告,有了測試報告之後,可能就會開始思考,那 Code Coverage 測試代碼覆蓋的狀況,是不是也可以在 Merge Request 的過程中就看到呢?

答案是可以的,而且在 GitLab CI/CD 的免費版本中就有這個功能。在 GitLab 12.9 版後,只需要透過 artifacts:reports:coverage_report 並作相關設定,就可以搜集 Cobertura XML 格式的報表就可以完成。這部分與 artifacts:reports:junit 的原理是一樣的,只需要讓 Pipeline 的工作可以產出所需要的格式的檔案,透過 artifacts:reports:coverage_report 將檔案搜集起來,就可以在 Merge Request 的畫面中看到視覺化的測試代碼覆蓋情況。

Test Coverage Visualization

那麼,在 PHP 該怎麼做出符合Cobertura XML格式的測試程式碼覆蓋狀況檔案呢?

GitLab CI - 在 Pipeline 檢視 PHPUnit 單元測試報告

GitLab CI Report Demo

許多使用 GitLab 作為版本控制工具的使用者,要開始搭配 GitLab CI/CD 建立專案的持續整合流程時,一開始通常是從專案既有的測試開始著手,讓「測試」在每次原始碼 commit 後就自動執行,進而增加原始碼的品質。

在 GitLab 版本 11.2 之後,GitLab CI 開始提供了讓使用者可以簡便的在 Pipeline 中就看到 Pipeline 過程中產出的報表功能。其主要是透過 artifacts 夾帶 Pipeline 工作中產出的報表。

在 GitLab CI 提供的眾多報表功能中,artifacts:reports:junit 主要是用來搜集並呈現「單元測試」執行結果的報表,使用JUnit report format XML files,看到 JUnit 熟悉的朋友可能知道,這是 Java 語言在撰寫單元測試常用的工具。那麼,在 PHP 語言中,如果也要產出同樣的報表,應該要怎麼產生呢?

GitLab 13.12 釋出 - 其中跟 GitLab CI 有關的部分

GitLab 官方固定在每個月 22 日釋出新的版本,也會針對該次的釋出提供一則圖文並茂的說明;而由於墨嗓我個人對於 GitLab CI/CD 的部分相對有興趣,因此對於每次釋出的內容中,關於 GitLab CI/CD 的部分會看得特別仔細,甚至會做一些實驗。

既然做了,那就多做一點點,記錄下來,跟大家一起分享,希望對大家有些幫助。這是第一次的嘗試,沒意外的話會持續做下去。

這個月釋出的是 GitLab 13.12 版

Laravel - 筆記:在 Migration 的過程中使用進度條 (ProgressBar) 顯示更新進度

零、背景

建立 Laravel Migration 時,有時候必須要根據現有資料庫中的資料逐筆更新,像是資料庫欄位轉移、變換等等的,當資料庫數據數量不多時,這樣的更新可能一下就完成了,但如果資料庫的資料很多時,會發現執行 php artisan migrate 時,會出現「等待該 migration 執行,但卻不知道目前執行狀況」的情境。

這時候如果這個資料庫更新,可以加上「進度條」呈現,就可以讓維運人員可以得到回應,相對了解當下的狀況,進而做出更好的狀態判斷。

那麼,該怎麼在 Laravel Migration 的過程中加上進度條 (Progress Bar) 呢?

進度條

PHP - each 與 foreach 操作 pointer 的版本地雷

零、前言

這陣子在進行手邊 PHP 專案的版本升級,從 PHP 5.x 升級到 PHP 7.x ,由於專案裡大量的使用了 while(list($key, $value) = each($items)) {} 這樣的語法,而在 PHP 7.2 之後,官方直接標注不建議使用,因此升級的過程中,順帶轉換為 foreach 結構,在過程中踩到一些 PHP 5.x 升級到 PHP 7.x 之後的特性雷,因此寫下這篇作為紀錄。

PS. 現行 PHP 7.2 當未關閉警告的情況下,會提醒 PHP: each - Manual 不建議使用

1
2
Deprecated: The each() function is deprecated. 
This message will be suppressed on further calls in /xxxx.php on line xx

演講紀錄 - GitLab CI 從團隊導入到運用

01 - 活動紀錄

  • 活動方:GitLab Taipei User Group
  • 名稱:GitLab 從團隊導入到運用
  • 基本介紹:

這份簡報分為兩個部分:

第一部分怎麼讓一個完全沒有原始碼版本控制的大型專案,逐步的轉變,陸續導入 GitLab 的各種功能,直到現在專案已經有了自己的 CI/CD 流程。這期間期間當然包含了一些政治面、商業面的因素,但整體經歷了哪些事情呢?在這部分會跟大家聊聊這段故事。

第二部分,在使用及導入 GitLab 的過程中,隨著專案演進 .gitlab.yml 定義的流水線 pipeline 上有越來越多工作,怎麼讓工作流程進行的更快一些呢?又,可以怎麼整理 .gitlab.yml 檔,讓他更簡潔一些?在這部分將跟大家分享一些小技巧。

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器