前言 每一年 iThome 都會舉辦「iT邦幫忙鐵人賽」——讓 IT 人挑戰,連續 30 天不間斷每天寫一篇文章。
今年因故臨時決定參賽,選了一個自己過去經常被問到的問題「付費版 GitLab 到底差在哪裡?」來當作內容主題。然而這畢竟是一個會談到「付費功能」的內容主題,所以恐怕會變成某種「功能介紹」、「付費功能推廣」的「工商文」,所以最後就直白的將參賽主題訂為《就是工商,為什麼要使用付費版 GitLab?》。
30 篇文章已經全部發佈在「iT邦幫忙」網站上,我暫時也沒有將文章搬家的計劃,因此對於該系列文有興趣的讀者,可以直接透過下面整理好的超連結前往閱讀。
由於鐵人賽是連續 30 天的考驗,所以經常會參賽到一半開始沒靈感,或是不小心歪到偏離參賽主題的內容去;我這次也很明顯的出現這種狀況,所以下面的超連結已經幫大家將各篇文章的內容分類,讓各位可以比較容易的找到想讀的內容。
文章超連結 參賽開場白 這是最沒內容的開場白,如果你想感受一下我當初起心動念臨時參賽的心情,再去閱讀吧!
Day 1:為什麼要寫這個主題「就是工商,為什麼要使用付費版 GitLab?」 企業通常會為了哪些功能付費 一般使用者與企業,兩者會願意付費的功能是不同的。
Day 2:企業在意的付費功能可能跟你想的不一樣 Day 3:企業通常都在意哪些功能 GitLab 付費功能介紹 這次系列文有挑了幾個「付費功能」來介紹。
Day 4:自架 GitLab 的高可用方案—GitLab Geo Day 5:如何避免因為 AD 故障而無法登入 Self-managed GitLab? Day 6:GitLab 請賜給我更多的 User 權限自主權! Day 7:稽核你不要來,這裡沒有什麼好查的啦~ Day 8:用數據來證明你導入 DevOps 是有效的! Day 18:Security 功能 - Pre-build scanning Day 19:Security 功能 - Post-build scanning Day 21:GitLab 的 AI 功能 Duo Day 22:GitLab 的 Incident management 功能 Day 23:GitLab 的 Portfolio Management 功能 GitLab 歷史與功能發展 這邊要提醒一下,歷史與功能發展我並非用一個很有系統的方式整理,而是我自己在讀完 GitLab 公開的 History,以及每一則 GitLab Release note 後,自我心證的挑了一些資訊記錄下來,因此這數篇文章比較像是我個人的筆記,裡面比較有可讀性的只有各篇文章文末的感想。...
前言 感謝 iThome 再次邀請,由於自己從 2023 年末有較多機會接觸 MLOps 的議題,同時也注意到 GitLab 默默地有在開發 MLOps 相關功能,因此就決定這次在 iThome Cloud Summit 2024 要分享 MLOps 的內容。
其實我本來的如意算盤是想著,等到 7 月 Cloud Summit 舉辦時,GitLab 差不多也已經正式推出新功能 Model Registry,這樣時間剛好,我就能用新功能來規劃一個簡單的 Lab。
但誰知道原廠遲遲未能正式釋出 Model Registry,在 6 月底最新 Release 的 17.1 版,Model Registry 依然處於 beta 狀態,因此最後只能放棄原本的計畫了。
Lab 內容規劃 本次的 Lab 內容一如往常,前半場會是簡短的演講,先向學員分享一些基礎知識,讓學員後續在操作 Lab 時,能更理解我想要傳達的內容。
演講的簡報已經上傳,有興趣的朋友可以前往觀看。
簡單解說一下,整個 Lab 的設計思路:
採用 GitLab 原廠的 Example Code 與流程為基底,但稍微調整內容順序,組合出我希望能讓學員體驗的內容。 Lab 預計要讓學員體驗以下內容: 訓練 Model 需要 Data,所以在訓練之前,你應該會有別的 Data Pipeline 吧?因此會讓學員在 GitLab 上建立一個很簡單的 Data Pipeline,然後將 Data 存放在 Job Artifacts 中。 建立一個 ML Project,並且從 Data Pipeline 取得清理乾淨的 Data,接著訓練 Model,最後查看儲存在 Model experiments 的成果。 建立第二個 ML Project,但在訓練 Model 之前,要先 build container image,為後續訓練 Model 建立一個可用的環境。 有了環境之後,接著訓練 Model,一樣可以在 Model experiments 查看成果。 設定排程 Pipeline 定期評估 Model。 如果時間足夠,可以讓學員試著手動下載訓練好的 Model,然後手動上傳到 Model registry 功能。 透過上面的內容規劃,希望學員能注意到 MLOps 流程中需要關心幾件事: 訓練 Model 是需要有 Data 的,那是否應該要關心一下 Data Pipeline 的規劃,以及準備好的 Data 該如何讓下游的資料科學家可以方便的取用。 訓練 Model 也是需要有一個「環境」,這個環境當然也可以做成 Container,那一樣會有環境的相依性、版本、管理及維護的議題。 開發(訓練) Model 與開發軟體,是很不一樣的流程,你不能直接拿軟體開發流程的經驗,硬是套用到 Model 訓練的世界。對於迭代及交付頻率的要求不同,需要管理的產出物、Report 也不同。單就功能面來舉例,最少你也需要準備一個可以方便記錄 Experiments 的功能,而且這些功能如果不夠簡單方便好用,資料科學家可是不會想用的。 Lab 操作步驟 如果你這次沒來現場參加 Lab,又或者你是有來現場,但沒能做完 Lab 的學員,那我已經將操作步驟改編成可以在 gitlab....
前言 繼續延續前兩篇關於 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....
前言 在上一篇文章,我們試用了 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。...
前言 隨著軟體開發的生命週期,除了程式碼,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 新功能吧!...
前言 如果你經手的經常是相同類型的專案,或者你是某種程式語言或 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....
前言 如果問到哪裡有免費的程式碼品質分析(掃描)工具,這幾年大家第一時間多半都會回答 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....