Upgrade to Pro — share decks privately, control downloads, hide ads and more …

How to integrate GitLab CICD into B2B service.pdf

Alex
July 05, 2020

How to integrate GitLab CICD into B2B service.pdf

Jul 2020, GitLab Taipei User Group

Alex

July 05, 2020
Tweet

More Decks by Alex

Other Decks in Programming

Transcript

  1. How to integrate GitLab CICD into B2B service Mobagel DevOps

    Lead - Alex Su GitLab Taipei User Group
  2. GitLab Taipei User Group Jul 2020 GitLab Taipei user Group

    About Me April 2019 Alex joined Mobagel • DevOps workflow design and tuning • Software delivery and deployment for Mobagel products • Bridging the gap between teams April 2020 加入 Mobagel 一週年 Scope
  3. GitLab Taipei User Group Features Guided Workflow Exploratory Data Analysis

    Auto Data Preprocessing Auto Model Building Auto Model Evaluation Model Deployment Feature Importance Time Series Prediction Deep Learning GPU Acceleration Scala-Based Architecture Enterprise Deployment Mobagel Website
  4. GitLab Taipei User Group 與日俱增的壓力 Company Product Development • 團隊人數成長

    • Reviewer 負擔重 • B2B software delivery • Deployment process • 很難駕馭的 Production env. • 無 CI /CD • 無自動化測試 • 有限的單元測試
  5. GitLab Taipei User Group 測試自動化 Create merge request Test Merged

    developer Reviewer ✨ 專注 code review 頻繁提交程式碼 提高程式碼品質 ✨ ✨ 降低團隊負擔 Must automation!
  6. GitLab Taipei User Group 自動化部署、測試、封裝 Create merge request Test Merged

    Build Deploy Test Archive Merged 後的部署、測試、 封裝也是很重要的!
  7. GitLab Taipei User Group B2B Software Delivery 企業 B 企業

    C 企業 D Decanter AI 企業 A IT Deploy IT Deploy IT Deploy Deploy 產品開發 產品必須封裝成安裝包的形式交付。 部分工具的使用會受到限制。 必須支援系統環境的自動化設置。 支援一鍵部署。 Release 派 人 至 企 業 D 部 署 Dev Ops 挑戰 企業內部不一定可以連接外部網 路。 產品必須能夠應付企業內部伺服 器各種狀況。 部署的流程簡單清楚。 企業內部 IT 不一定有能力除錯。 產品的穩定性必須極高。 豐富的文檔支持。 IT
  8. GitLab Taipei User Group 那些年曾經使用的工具們,有的留下 有的發現不適合,而悄悄離去... GitLab GitLab Runner Bamboo

    Jira Docker GrayLog Airtable Whimsical Ansible Selenium Jenkins Slack Swarm Cypress Bitbucket Harbor Notion TestRail
  9. GitLab Taipei User Group Now DevOps 工具演進時間軸 April 2019 -

    Atlassian tools - Slack March 2020 Migrate from Jenkins to GitLab CI May 2020 E2E test with Cypress May 2019 - Migrate to GitLab - Use Jenkins as CI server - Issue tracking: Jira July 2019 - 整合 E2E 自動化測試 - Docker - Container registry Alex join Mobagel 沒有列出所有工具,不然擠不下
  10. GitLab Taipei User Group - CI / CD 工具鏈的整合是一個漸進的過程,並非一步到位。 -

    隨著軟體的開發和組織的發展,工具也必須與時俱進。 - DevOps 工具之間的能不能深度整合很重要。 ✨ ✨
  11. GitLab Taipei User Group • 用途 - 使用 Bitbucket 作為

    development platform,Jira 作為 issue tracking,Bamboo 為 CI server • 方案 - Self-managed - USD 10 one-time payment • 優勢 - 團隊人數: 10 人以下 - Atlassian 工具鏈易於整合 • 劣勢 - 隨著開發人數增長,價格負擔逐漸變重
  12. GitLab Taipei User Group - 是否有其他替代方案可以取代 Bitbucket 和 Baomboo ?

    - Jira 作為 issue tracking 的功能影響較小,可以繼續沿用 - 因為 Jira 繼續沿用,替代的工具要與 Jira 有良好的整合 - Jira issues 必須要能顯示相關的 Git commit - 可以從 code platform 連結到 Jira issues
  13. GitLab Taipei User Group • Why use GitLab - Open

    source - Support a complete DevOps platform - 與其他 DevOps 工具的整合很容易,可打造以 GitLab 為中心的工具鏈。 • 方案 - Self-managed - Bronze / Starter - Enterprise Edition
  14. GitLab Taipei User Group • Why use Jenkins - Open

    source - 有別於 GitLab CI / CD 的 UI,Jenkins 提供一個可 以統一管理 Jobs 的 Dashboard - 容易與 GitLab CI / CD 整合 - 豐富的 Plugins • 方案 - Self-managed - Free
  15. GitLab Taipei User Group Jenkins & GitLab UI 比較 Jenkins

    GitLab 畫面乾淨 彈性可調整 view 的 dashboard UI 不直觀 沒有可調整 view 的 dashboard
  16. GitLab Taipei User Group Development Flow developer Unit Test Lint

    Check Deploy Build E2E Test Reviewer ✨ ✨ docker pull docker push merge request link to Jira issue trigger trigger notification trigger Merge request 經過 Reviewers approve,且已經合 併的時候,會在 server 部署一台 Decanter AI 進行 E2E test。 若測試沒通過或是 reviewer 不同 意,Developers 需要修到通過為 止。 在 Harbor container registry 上事先建 立好一個專門用來儲存 CI / CD 產生的 image 的庫。 以 Selenium 寫成的 E2E test,測試的 scenarios 不 宜太多,不然會花太多測試的時間。
  17. GitLab Taipei User Group Releaser Pull Images Download Tools Storage

    Tar Archive Software Delivery Install.sh with payload trigger notification upload 因為 production 的環境有可能沒有辦法連接網 路,所有的 tools (e.g., docker, zip, rsync) 下載下 來後封裝成 tar archive。 docker save 執行 docker save 指令,將 image 封裝成 tar archive。 為了減少檔案的數量,所有的 tar archive 會附加 到 install.sh 成一份執行檔。 最後再將執行檔經由 FTP 儲存。
  18. GitLab Taipei User Group - 將 Jenkins 整合進 GitLab CI

    / CD 的架構,持續使用了快一年,但後來仍然 發現了一些問題,迫使在今年決定捨棄 Jenkins,使用 GitLab 開發的 GitLab Runner。 - CI / CD workflow 流程雖然看起來大同小異,但實際運作起來,仍會有不同 層面的問題要解決 (例如:團隊文化、教育訓練)
  19. GitLab Taipei User Group Jenkins 帶來的問題 必須額外管理 Plugins,定時檢查 release note

    或 security issue。 對於剛入門 DevOps 的工程師來說, 會對 Jenkins 的 plugins 生態系有點不知所措。
  20. GitLab Taipei User Group Jenkins 帶來的問題 - GitLab CI 和

    Jenkins 雖然容易整合,但卻無法深度整合,一些很好用的 GitLab 原生功能都沒有支持 (例如: 在一個 merge request 顯示多個 build result )。 - 團隊繁忙的情況下,還必須額外管理 Jenkins。 - 長久下來增加不少開發者的學習成本,降低團隊學習 DevOps 的意願。 ✨ ✨
  21. GitLab Taipei User Group Jenkins v.s. GitLab Runner Better integration

    with GitLab Easy setup Don’t need to host additional CI server Lower learning curve for developers Better documents supports Easy to browse / download artifacts Can’t show multiple status in a merge request Need to switch between GitLab and Jenkins Need to manage plugins Show all the CI jobs with a dashboard
  22. GitLab Taipei User Group 從 Jenkins 轉換到 GitLab CI 其實並沒有太大的負擔,主要原因是:

    - 依然採用原先 CI / CD pipeline 的設計,團隊也早已習慣。 - 每個 repo 都有基於相似邏輯撰寫的 interface (make build, make test) ,operation scripts 的完整度高。 - GitLab CI 學習曲線較低。
  23. GitLab Taipei User Group 採用 GitLab CI 之後的 Development Flow

    developer Unit Test Lint Check Deploy Build E2E Test Reviewer ✨ ✨ docker pull docker push merge request link to Jira issue trigger 不必額外維護 CI server 真的減少很多負擔呢!
  24. GitLab Taipei User Group Releaser Pull Images Download Tools Storage

    Tar Archive 採用 GitLab CI 之後 Software Delivery Install.sh with payload trigger notification upload docker save
  25. GitLab Taipei User Group GitOps Dev Ops CI CD Single

    Source of Truth Dev QA Staging Docker push GitLab CI 將 GitLab 作為唯一的 single source of truth,並透過 GitLab CI 部署至各種環境,Dev 和 Ops 團隊成員則是藉由 merge request 的方式提交操作申請。 code diff code diff merge request merge request 系統的每一次變更都對應一條 Git commit code diff config config config Dev 和 Ops 皆透過 merge request 對系統操作
  26. GitLab Taipei User Group Manual Deploy 因為 UI 沒有提供下拉式選單,Input 的參數不能太多太複雜。

    • 用途 讓開發者或是非開發者,都能 夠藉由手動輸入的 參數,將軟體部署到各種環境。 • 環境參數 ACTION: 參考自 DevOps cycle - deploy - release ENVIRONMENT: 部署環境 - dev - qa - nightly
  27. GitLab Taipei User Group Auto Release flow Releaser release 4.8.0

    Clone codebase update version commit and tag Build Deploy Pull images E2E test Manual test Download tools Tar archive install.sh Storage use a release tool as an interface, which support: - update version - rollback - sanity check - retag release 前最後一刻的把關 產品版號 產品封裝 最後的測試 release note docker push
  28. GitLab Taipei User Group GitLab Runner Management server A server

    B server C server D 使用 Ansible 管理 GitLab Runner 組態設定 (config.toml)。 GitLab CI Configuration Run Push Pull Ansible
  29. GitLab Taipei User Group Developer Operation 採用 GitLab CI +

    GitLab Runner 後, 因為語法容易、文檔支持豐富, 能夠大量降低 DevOps CI / CD 的學習門檻,減少教育訓練的成本, 對於團隊推廣 DevOps 文化很有幫助。 close close