艦長自畫像

Cheng Wei Chen | 艦長

相信有那麼一天,我們將可以像畢凱艦長一樣用嘴巴叫所有主機做事!

將你的 CI/CD Components 公開發佈至 GitLab CI/CD Catalog

前言 繼續延續前兩篇關於 GitLab CI/CD Components 的文章。 Reuse CI Job 的新方法:GitLab CI/CD Components 為什麼你應該改用 GitLab CI/CD Components? 這次要介紹的是如何將你做好的 GitLab CI/CD Components 發佈到 GitLab CI/CD Catalog,將你精心做好的 CI/CD Components 貢獻成為 CI/CD 界的開源專案,讓大家都能使用你開源出來的成果。 操作步驟 完成你的 CI/CD Component 首先第一步,請先完成你的 CI/CD Component,但這個「完成」需要做到什麼程度呢?我認為需要達成以下幾個條件: 按照 GitLab 原廠文件,正確的規劃與撰寫 CI/CD Component 的內容。請注意自己的 Project 結構是否正確、spec: 與 CI Job 內容是否撰寫正確、inputs: 的規劃是否合適。 不只是建立 Tag,還要為每一次的版本釋出建立 Release Page,讓使用者可以知道每一次的 Release 差異,讓使用者更容易知道 CI/CD Component 的版本更新歷程。(特別提醒:原廠文件有提到,目前要將 CI/CD Component 發佈至 CI/CD Catalog 時,建立 Release 是其中一項必備動作!本文後面會有更多說明。 ) 為你的 CI/CD Component 撰寫正確、易讀的 README....

April 1, 2024 · Cheng Wei Chen

Event storming 是個好東西:幫助團隊看見全貌,引發團隊變革新契機

背景資訊 在 2022 年底時,有一個機會和 DDD Taiwan Community 的社群朋友聊天,本來是聊天,但聊到最後變成邀請他來幫團隊帶了幾次 Event Storming。 因為有了當時的經驗,後續順利將這項「引導工具」引入公司、團隊,甚至是客戶端,因此秉持著「取之於社群,回饋於社群」的想法,將自身獲得的經驗,於 2024.02.29 回饋分享至 DDD Taiwan Community。 KKTIX 的活動報名頁面 DDD Taiwan Community 在 FB 上發佈的活動貼文 筆記女神 Anna Su 為當晚活動留下的筆記文 因為這是一個來自於我個人、團隊及運用在客戶端的經驗談,因此我將主題與內容設定為較軟性的主題「Event storming 是個好東西:幫助團隊看見全貌,引發團隊變革新契機」,主題的簡介如下: 當你想要導入 CI/CD、DevOps 或 OOXXOps 時,你會如何幫助所有的夥伴建立相同的共識?讓大家可以看見相同的全貌及痛點? 當團隊開始重視 DevOps 核心精神中的「交付價值、持續改善」時,我們確實需要一些不同於傳統會議與組織溝通的方法,來輔助不同的部門及團隊打破 silos 共同看見整體流程的完整面貌,畢竟我們都知道 DevOps 從來都不是一條龍工程師自己的事情。 在本次的 Meetup,我將會聊一聊幾個來自真實場景的小故事,分享這段由 Event Storming 所觸發的團隊變革旅程。 內容分享 因為這次分享的經驗都來自於目前任職的職場,因此針對內容有做了一些去識別化,就請容我不公開釋出完整的簡報,下面就以幾張簡報快速說明這次分享的內容。 如前面提到的,這次設定的是一個很軟性的主題,主軸就是想要分享這一段時間以來,基於 Event Storming 得到的一些經驗與學習。 其中,最深的感受就是,Event Storming 是一個很棒的「引導工具」(好東西),這個好東西它好在哪裡呢?它好的地方在於,透過它我們有機會能幫助團隊「看見全貌」,藉此為「變革」這件事,創造一個「契機」。 同樣如前面所述「取之於社群,回饋於社群」,我個人能夠認識與學習 Event Storming,歸功於過去在社群中認識的國昭與 Tim,再次特別感謝他們兩位。 本來 DevOps Taiwan Community 二月底也要舉辦 Meetup,但後來因為原定的講師時間喬不攏,再加上剛過完農曆新年,也不容易臨時安排其他備援講師,最後因緣際會的就跟 DDD Taiwan Community 的組織者 Kim 談定,二月底就由 DDD Taiwan 主辦 + DevOps Taiwan 協辦的方式來結束這一回合,這裡也再次感謝 Kim 接受我的臨時提議。...

February 29, 2024 · Cheng Wei Chen

為什麼你應該改用 GitLab CI/CD Components?

前言 在上一篇文章,我們試用了 GitLab 的新功能 CI/CD Components,接著讓我們聊一聊為何我們在 GitLab 應該要改用 CI/CD Components 來製作我們的 CI/CD Template。 截至 2024.1.20 為止,我認為改用 CI/CD Components 可以帶來三個好處。 好處 1:讓設計與規劃 Reuse CI Job 的方式更一致 首先,讓我們先做一個簡單的比較,大家想像一下,在過去沒有 CI/CD Components 的時代,我們是如何利用 include: 來設計 CI/CD Templates?如果你希望別人在使用你的 CI Templates 時,要依據需求填入一些 input,你會怎麼做?多半會使用 variables: 去定義一些 Variables 吧? 在那樣的狀況下,為了在 Templates 中提供 Variables 使用上的彈性,讓自定義的 Variables 有 default 值,又能讓使用者可以順利覆蓋,我們會利用 Variables 的各種特性,或使用多層 include: 來設計 CI/CD Templates。 因此最終會做出多層 include: 的 .yml,並在其中撰寫 CI Job,然後搭配 CI Job,將需要填入的 input,都寫在 variables: 中,然後恐怕為了區別不同 CI Job 會用到的 Variables,經常還必須個別加上不同的前綴字,分別命名為 XXX_VAR1 或 OOO_VAR1。...

January 20, 2024 · Cheng Wei Chen

Reuse CI Job 的新方法:GitLab CI/CD Components

前言 隨著軟體開發的生命週期,除了程式碼,CI/CD Pipeline 也有可能會隨之變得越來越複雜。在過去 GitLab CI 提供了像是 include:、template: 及 extends: 等多種 Keywords 來幫助我們重構、規劃及管理我們的 CI/CD Pipeline,透過這些 Keywords,我們可以設計出屬於自己團隊及跨 Projects 共用的 CI / CD Templates,避免團隊重複造輪子,讓 Pipeline 及 CI Job 可以被重複利用。 筆者認為 GitLab CI 現有的這些 Keywords 已經足夠豐富,可以有效幫助團隊用一種有規劃及架構的方式來管理 CI/CD Pipeline。但問題是在這樣的規劃及架構背後,也代表著有一份屬於這個團隊的「GitLab CI/CD 知識與經驗」需要被記錄與傳承,這些知識與經驗,將會是團隊需要面對的另一項議題。 上述有關 CI/CD Pipeline 規劃及管理的議題,其實各種 CI Tools 的供應商都有注意到,隨著 CI/CD 工具鍊的整合越來越容易,其實可以發現供應商們不約而同都在思考著類似的議題——如何讓使用者可以更輕省的創建所需的 CI/CD Pipeline、如何減輕使用者在創建 CI/CD Pipeline 時需要擁有的先備知識量、如何更好的讓眾人一同維護 CI/CD Pipeline。 針對這些議題,GitLab 在版本 16.0 做出了一項新回應,從 16.0 開始實驗名為 CI/CD Components 的新功能,並且在 16.6 進入 Beta 開放大家試用。 在這篇文章,我們就來快速建立一個 CI/CD Component,試用一下這個值得我們期待的 GitLab CI 新功能吧!...

December 30, 2023 · Cheng Wei Chen

在 GitLab 建立你的 Project Templates

前言 如果你經手的經常是相同類型的專案,或者你是某種程式語言或 Framework 的愛好者,那麼在專案啟動的時候,多半會建立出固定的資料夾結構與檔案;同理,如果你的團隊有穩定的協作方式,在軟體開發流程中,採用了 GitHub Flow 或 GitLab Flow,那麼你可能在專案啟動時,固定會手動建立 main、develop、release 等多條 Branch。 無論如何,這些專案啟動的固定起手式,看似稀鬆平常,但累積起來也是會佔用團隊不少時間,再加上這都是一些固定且重複動作,做久了有時也是會覺得有些煩,甚至不小心就漏掉了某個必要的動作。 面對這樣的狀況,我們可以事先建立標準的 GitLab Project templates,讓團隊可以直接運用 Template 來省去這些重複的固定動作。 下面就介紹我曾經在 GitLab 建立 Project Templates 的方法。 付費功能:Custom group-level project templates 首先,如果你是 GitLab 的付費使用者,那麼恭喜你,GitLab 自 11.6 版即提供 Custom group-level project templates 功能。該功能讓我們可以將 Group 底下的所有 Projects 都變成 Templates,方便團隊可以盡情的為各種專案與情境,建立各種 Project Templates。 # 舉例來說,我可以建立一個名為 Project templates 的 Group # 接著在裡面建立許多的 Project,每個 Project 適用一種情境 Project templates: ## 可能有適用不同 Python 版本的 Tempalte python 3.9 python 3.10 ## 可能有特定 Python 版本 + 特殊情境的 Template python 3....

December 20, 2023 · Cheng Wei Chen

在 GitLab CI Pipeline 運用 SonarQube 做程式碼品質分析

前言 如果問到哪裡有免費的程式碼品質分析(掃描)工具,這幾年大家第一時間多半都會回答 SonarQube Community Edition。 (截圖日期:2023.12.04) 如上圖,SonarQube 原廠有提供多種 Edition,商業策略也與其他軟體供應商類似,提供 Community Edition 吸引廣大的使用者,並在 Developer Edition 與 Enterprise Edition 提供更強大的整合與進階功能。 本文就讓我們嘗試架設 SonarQube 9.9.3 LTS,並且在 GitLab CI Pipeline 中加入程式碼分析的 CI Job。 操作步驟 架設 SonarQube Server 老樣子,在這個時代,想要試用一個新服務最簡單的方式,就是想辦法利用 Container 快速將服務架設起來。SonarQube 原廠當然也明白這一點,因此早就準備好現成可用的 Docker image。 這裡我們要使用的 image 是 sonarqube:9.9.3-community。 請準備至少有 4GB RAM 可運行 Docker Container 的環境,然後使用下面的 docker-compose.yml 即可快速架設 SonarQube。 services: sonarqube: # 9.9.3 是 LTS 版本 image: sonarqube:9.9.3-community # SonarQube 需要相依一個 db,這裡我們選用 postgres db depends_on: - postgres_db environment: # 設定 postgres 的連線資訊 SONAR_JDBC_URL: jdbc:postgresql://postgres_db:5432/mysonar # 帳密建議可以改一下啦! SONAR_JDBC_USERNAME: mysonar SONAR_JDBC_PASSWORD: mysonar # 如果你的 Container 跑起來有遇到一些 ElasticSearch 的錯誤,可以試著加上這個參數。 SONAR_ES_BOOTSTRAP_CHECKS_DISABLE: 'true' # 主要的 data 直接存放在 docker volumes volumes: - sonarqube_data:/opt/sonarqube/data - sonarqube_extensions:/opt/sonarqube/extensions - sonarqube_logs:/opt/sonarqube/logs # 預設使用 9000 port ports: - "9000:9000" postgres_db: # 2023....

December 9, 2023 · Cheng Wei Chen

將 GitLab CI Pipeline 的執行結果,整合至 Merge Request 中

在多人協作的軟體開發流程中,運用 Git 及 Branch 已經是一件再平常不過的事情了,想必大家多少都有經歷過多人開發的工作情境,在這樣的情境中,多位開發工程師會各自在不同的 Branch 開發功能,最後透過 Merge Request(MR)將程式碼進行合併。 在這樣的情境中,MR 肩負了重要的任務,它會是一個重要的資訊彙整、進度同步、討論、稽核⋯⋯的關鍵點。 既然 MR 如此重要,同時它又是團隊協作及軟體開發流程中經常發生的一件事,可以的話,我們應該要依據團隊實務上的需要,讓使用者可以更方便的在 MR 頁面彙整並瀏覽各種必要的資訊。 GitLab 原廠當然有注意到 MR 的重要性,因此在 GitLab 免費版中,MR 頁面已經有整合了多項必要的基本資訊。(當然付費版比起免費版擁有更多的整合。) 首先在 GitLab 的 MR 頁面,可以看到 Overview、Commits、Pipelines 與 Changes 四個分頁。後三者比較單純,分別用來讓使用者快速一覽當前的 MR 包含了哪些 Commits、觸發了哪些 Pipelines、以及實際上有哪些檔案被異動了。 在 Overview 的分頁中,則是資訊大彙整,包含了這項 MR 的基本資訊、最新一條 CI Pipeline 的執行狀態、MR 是否有通過 Code Reviewer 的 Approval、以及團隊夥伴是否有對此 MR 留下各種 Comments。 如上圖所示,在 MR 的 Overview 頁面上,有整合了最新一條 CI Pipeline 的執行狀態,但你只能知道 Pipeline 最終是成功還是失敗,如果你想要知道 CI Pipeline 內產生的更多資訊(例如:CI Job 產出的 Reports 內容),一般來說你只有兩個選擇: 付錢升級,啟用付費功能(如果有你需要的功能) 點擊連結,前往 CI Pipeline 查看對應的 CI Job Log 及直接瀏覽 Job Artifacts 的檔案 如果上面兩種方法你都不滿意,那也許你可以考慮一下本文將要介紹的第三種方法!即是運用 GitLab API,讓 CI Pipeline 自動將 CI Job 執行結果發佈到 MR 的 Comments 中,藉此實現在同一個 MR 頁面即可看到更多 CI Job 產生的重要資訊。...

November 30, 2023 · Cheng Wei Chen