在 GitLab CI Pipeline 執行自動化單元測試

文章更新紀錄: 2023.11.11 發佈 2023.11.12 更新內容 前言 在介紹 CI 持續整合的觀念時,我經常會分享一句話「沒有自動化測試,不要說你是在做 CI」。在 CI Pipeline 中,我們會設置各種自動化測試的 CI Job,讓 CI Pipeline 不只是實踐自動化,而是能成為一位守護「最低限度品質」的守門員。 既然自動化測試是 CI Pipeline 的重要關鍵,理所當然 CI 工具與測試工具兩者就會有各種互相合作與整合的狀況出現啦! 在這篇文章,我們就從大家最常聽見的測試 Unit test 為主題,介紹如何在 GitLab CI Pipeline 中執行自動化單元測試。 操作步驟 1. 準備你要測試的程式碼與 Unit test 想要執行 Unit test,首先當然你需要一份程式碼,然後為你的程式碼撰寫對應的 Unit test 啦! 但本文重點不是程式開發與怎麼寫測試,所以這部分就請容我跳過,就讓我直接在 GitHub 上隨意搜尋,挑選兩種不同程式語言的 Unit test example 作為範例。 首先是 Python,可以找到這個範例 ptracesecurity/pytest-example 接著是 PHP,可以找到這個範例 php-actions/example-phpunit 2. 規劃你的 CI Job 與執行環境 因為本文我們只針對 Unit test 這件事,因此就先省略不談整條 CI Pipeline 的規劃,直接切入單一 CI Job 的規劃。...

November 11, 2023 · Cheng Wei Chen

在 Windows 10 的 WSL 中架設 GitLab

前言 前幾天在 GitLab 社群中看見有人針對在 Windows WSL 上架設 GitLab 提出了一些疑問,覺得這是一個可以動手嘗試的題目,因此也抽了一個空檔快速的實驗了一次,下面就紀錄我這次實驗的過程與操作步驟。 操作步驟 1. 安裝 WSL WSL 目前可以直接在 Microsoft Store 中安裝,如下圖那個看起來有點喜感的企鵝,就是我們要安裝的 WSL。 2. 確認 WSL 版本 WSL 安裝完畢後,接著我們要進入 PowerShell,在 PowerShell 中輸入 wsl -l -v 來確認一下 WSL 的版本,以及目前是否已經有安裝了 Linux 環境。 如果要進入 PowerShell,可以在 Windows 的搜尋列中輸入 PowerShell 來啟動 PowerShell。 啟動 PowerShell 後,畫面上會出現一個類似下圖的「命令提示字元」視窗,但不同的地方是在 Command Line 的最前面會有 PS。 如上圖,輸入 wsl -l -v 即可查看 WSL 的版本與目前是否已經安裝了 Linux 環境;如圖片所示,在我的 WSL 中尚未安裝任何 Linux 環境。 3. 在 WSL 中安裝 Ubuntu 首先,我們要確認 WSL 可以安裝哪些 Linux 環境,在 PowerShell 中輸入指令 wsl --list --online。...

August 13, 2023 · Cheng Wei Chen

iThome Cloud Summit 2023 - Lab: 輕輕鬆鬆體驗 DevSecOps with GitLab

前言 延續 DevOps,DevSecOps 一詞在 IT 圈內也已經不是一個新詞,市面上有非常多的廠商都在銷售號稱與 DevSecOps 有關的產品,亦有不少來自資安圈的講師分享過 DevSecOps 的主題。就如 DevOps 一樣,DevSecOps 同樣也具備著「十個講師會有十一種 DevSecOps 的內容」的現象,但無論如何 DevSecOps 絕對是 DevOps 的其中一位後繼者,是當前企業多少會開始了解與碰觸的一項熱門議題。 在今年 2023 的 iThome Cloud Summit,我邀請了 GitLab 原廠的 Staff Solutions Architect - Toshitaka Ito,以及另一位 GitLab Hero - Mouson (墨嗓) ,一起針對 DevSecOps 這個主題,規劃了一場「輕輕鬆鬆體驗 DevSecOps」的 Hands-on Lab。 議程簡介 這次投稿的是 Hands-on Lab,以下是本次提供給主辦單位的議程簡介資訊: 延續 DevOps 風潮,其實 DevSecOps 一詞自 2012 年被人提出後,至今也超過 10 年了。DevSecOps 作為一個根源自 DevOps 而來的新詞,我們會發現它跟 DevOps 一樣有著「似乎沒有標準定義」、「不同企業的實踐方式皆不相同」的現象。 課程目標 • 認識 DevSecOps • 體驗來自 GitLab 的 DevSecOps 流程 • 實際體驗如何修復程式碼中含有的漏洞...

July 29, 2023 · Cheng Wei Chen

實驗在 GitLab Merge Request 之 CI Pipeline 中使用 CodeGPT 提供 Code review 建議

2023 年,ChatGPT 與 OpenAI 議題大熱門,全球都在探討可以將它們運用在哪些工作領域中,當然軟體開發工程師也不例外,舉凡寫程式、程式碼重構、產生 Commit messages、code review、pair programming、寫測試⋯⋯,幾乎每一個動作都有人在嘗試結合這波「AI」熱潮,希望讓這些任務能做得又快又好。 最近剛好看見台灣知名的講師與開源專案貢獻者 AppleBoy 也投身在此議題,開發了名為 CodeGPT 的工具,不僅能用它來自動生成 Commit 總結,甚至能做出 Code review 提供一些程式碼的改善建議。 按著 AppleBoy 的 CodeGPT 工具說明,我第一時間的想法即是,這樣的一個工具是不是適合放進 CI Pipeline 中呢?如果能讓隨著 Merge request (或 Pull request) 而執行的 CI Pipeline 能自動產生一份由 GPT 提供的 Code review 程式碼改善建議,這樣我們就可以自動額外獲得一份來自「非真人觀點」的 Code review 建議;即便這些「非真人的觀點」不一定正確或準確(因為 GPT 已被證實有時會一本正經的說瞎話),但它的建議依然有機會幫助真人跳脫自己固有的觀點,以不同的角度思考同一個問題。 以下我們就搶先試驗,試著將 CodeGPT 放進 GitLab Merge request CI Pipeline 吧! (本文初版撰寫於 2023.04.02,於 2023.04.04 更新。本文使用的 CodeGPT 版本為 v0.1.5,當你閱讀本文時,很可能 CodeGPT 已經改版與本文下述的操作步驟不同,還請自行關注各工具的最新異動資訊。) 操作步驟 下面我們就用一個最輕鬆的方式,來做出一個 Merge request 之 CI Pipeline,來實驗 CodeGPT。既然是最輕鬆的方式,所以我就直接在 gitlab....

April 2, 2023 · Cheng Wei Chen

iThome Cloud Summit 2022 - Lab: GitOps with GtLab and K8s

這是一篇留在草稿區很久的文章草稿,本來應該在 2022 年 7 月把它寫出來,但一拖稿,就無限延後了,趁著春節休假期間,終於有時間將它整理為一篇「堪用」的文章。 前言 感謝 iThome 的邀請,2022 年能有機會再次擔任 iThome Cloud Summit 的講師,負責一場分享一場 Hands-on Lab。 由於 2021 ~ 2022 年,個人並沒有玩太多新鮮的雲端新工具,因此最後還是決定以 GitOps 為題來準備這場 Hands-on Lab。但畢竟我在 2020 年就已經分享過一次 GitOps,總不能直接拿老東西出來分享,因此這次特別針對內容做了調整,試著將 Kubernetes(K8s)放進 Lab 的內容中。 在 2020 年時分享的 Hands-on Lab 是以 GitOps with GitLab 為題,主要是以 GitLab 的 CI/CD Pipeline,搭配 GitLab 當時仍在 beta 階段的 Terraform 相關功能,讓學員運用 GitLab Runner 透過 CI/CD Pipeline 可以彼此 Tirgger 的方式來實現 GitOps 的概念;當時還跟 AWS 合作索取了一些試用額度,讓 Lab 學員可以用 GitOps 的方式,在 AWS 建立 Ec2 並部署 Application。...

January 22, 2023 · Cheng Wei Chen

在 GitLab CI 中使用 Google osv-scanner

(本文首次發佈於 2023-01-01,於 2023-10-24 更新。) 根據 iThome 的報導,Google 釋出了一個新的免費開源軟體漏洞掃描工具 OSV-Scanner,可以幫助開發者自動掃描找出專案內的相依套件是否存有漏洞。看見這樣的好工具,我們第一時間當然要問一句,這玩意能夠放進我們的 CI Pipeline 嗎?是否能有助於我們及早發現程式碼中潛藏的資安問題呢? 因此本文,就讓我們試著在 GitLab CI Pipeline 中運用 OSV-Scanner 吧! 操作步驟 尋找可用的 Docker Image 老樣子,想要在 GitLab CI Pipeline 中試用一個新工具的第一步,當然是先找找看有沒有現成的 Docker image 可以使用。 在 2023/10/24 於 Docker Hub 上搜尋「osv-scanner」,目前都只能找到非 Google 官方建立的 Docker Image。 (截圖時間:2023/01/01) 不知為何這些 Docker Image 看起來都沒什麼人 Download 使用,稍微深入瀏覽後,可以發現只有 anmalkov/osv-scanner 的說明較完整,有興趣者可以嘗試看看。 以 anmalkov/osv-scanner 為例,我用它來嘗試掃描了手邊的一個專案,得到如下圖的結果,它依據 package-lock.json 的資訊,幫我找出許多的 Vulnerabilities,並且每一個 Vulnerability 都會提供一個 OSV URL,讓我可以了解更多的詳細資訊。 OSV URL 的網頁內容如下,會有完整的漏洞說明。 如果你想要自己 Build 一個 Image,則可以參考 GitHub Repo - osv-scanner ,在 Repo 中有提供 Dockerfile ,可以用來 Build image。...

January 1, 2023 · Cheng Wei Chen

《和艦長一起30天玩轉GitLab》第二版上市

辛苦了一整年(!?)終於在 2022 年底,將《和艦長一起30天玩轉GitLab》改版完成。這次也是走一個拖稿拖稿再拖稿的路線。好在出版社編輯沒有真的殺到我家樓下來堵我,畢竟都已經進行到排版二校時,我還一直試圖要塞入新的內容,實在是感謝他們的一再寬容。 除了感謝出版社,這次還要特別感謝三位朋友幫忙撰寫推薦序,以及家人們一再的包容與支持,二版新增的一小段致謝,就原汁原味的全文刊登如下。 2022 第二版致謝 隨著 GitLab 的迭代更新,我一直希望能有機會將本書改版更新,終於這份期望得以在 2022 年底實現。感謝在這段改版寫書過程中,提供我各種協助的各方好手——感謝願意推薦本書的社群前輩 William 及 Rick,你們豐富的知識與經驗一直是我努力學習的標竿;感謝同為 GitLab Hero 的墨嗓,你是我在專研 GitLab 之路上不可多得的好夥伴;感謝在 GitLab Taipei User Group 及 DevOps Taiwan Community 認識的多位社群朋友,彼此經驗交流、教學相長,讓社群能持續的成長茁壯。 最後,再次感謝我親愛的家人,感謝你們體諒並陪伴我每一次的寫稿生活,本書誕生的每一字一句都是你們的功勞。 其實在 2020 年《和艦長一起30天玩轉GitLab》初版上市時,我就已建立了 https://gitlab-book.tw 網站,在網站上提供最新的書籍內容勘誤,並一度想要將該網站轉化成為 GitLab 相關新知的分享平台,沒意外的話,明年會再次嘗試活化 gitlab-book.tw,看看可以如何讓網站能產生更多的價值。 2022/12/31 更新 由於 GitLab 實在是改版快速,因此我也會視狀況在 https://gitlab-book.tw 上更新一些書籍內容;像是 GitLab 15.7 推出後,在 gitlab.com 上就直接啟用新版的 Web IDE (VS Code),導致我在書中經常提到的 File Templates 功能目前是暫時無法使用的,為了因應這個狀況,我就有在 gitlab-book.tw 網站上提供對應的內容更新。 最後,還是厚臉皮的來一段工商服務,如果你問我自己最喜歡《和艦長一起30天玩轉GitLab》第二版的哪些內容?我會推薦第五章「實作 CI/CD Pipeline」。這個章節是我將自己過去的職場工作、CI/CD Pipeline 工作坊及對外開課所獲得的各種經驗,再次整理後重新撰寫的;希望能讓這本 GitLab 專書,不只有 GitLab 功能面的內容,也可以有更多跳脫單一工具、有助於大家實踐 CI/CD Pipeline 的經驗分享。如果你也正在擔任 CI/CD Pipeline 水管工人,推薦你一定要讀第五章,也歡迎與我交流分享你的經驗喔!...

December 30, 2022 · Cheng Wei Chen