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
5. 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
8. GitLab Taipei User Group
與日俱增的壓力
Company Product Development
● 團隊人數成長
● Reviewer 負擔重
● B2B software delivery
● Deployment process
● 很難駕馭的 Production env.
● 無 CI /CD
● 無自動化測試
● 有限的單元測試
10. GitLab Taipei User Group
測試自動化
Create merge request Test Merged
developer
Reviewer
✨ 專注 code review
頻繁提交程式碼
提高程式碼品質
✨
✨
降低團隊負擔
👻 Must automation!
11. GitLab Taipei User Group
自動化部署、測試、封裝
Create merge request Test Merged
Build Deploy Test Archive
Merged 後的部署、測試、
封裝也是很重要的!
12. 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
15. 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 registryAlex join Mobagel
沒有列出所有工具,不然擠不下 😅
16. GitLab Taipei User Group
- CI / CD 工具鏈的整合是一個漸進的過程,並非一步到位。
- 隨著軟體的開發和組織的發展,工具也必須與時俱進。
- DevOps 工具之間的能不能深度整合很重要。
✨
✨
25. GitLab Taipei User Group
Merge request approvals
GitLab Doc
自動化測試還沒有成熟的時候,團隊很
仰賴 Code review 把關品質。
Premium Only
26. GitLab Taipei User Group
● Why use Jenkins
- Open source
- 有別於 GitLab CI / CD 的 UI,Jenkins 提供一個可
以統一管理Jobs 的 Dashboard
- 容易與 GitLab CI / CD 整合
- 豐富的 Plugins
● 方案
- Self-managed
- Free
29. GitLab Taipei User Group
Development Flow
developer
Unit Test Lint Check
DeployBuild
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 不
宜太多,不然會花太多測試的時間。
30. 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 儲存。
31. GitLab Taipei User Group
- 將 Jenkins 整合進 GitLab CI / CD 的架構,持續使用了快一年,但後來仍然
發現了一些問題,迫使在今年決定捨棄 Jenkins,使用 GitLab 開發的
GitLab Runner。
- CI / CD workflow 流程雖然看起來大同小異,但實際運作起來,仍會有不同
層面的問題要解決 (例如:團隊文化、教育訓練)
36. 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
37. GitLab Taipei User Group
從 Jenkins 轉換到 GitLab CI 其實並沒有太大的負擔,主要原因是:
- 依然採用原先 CI / CD pipeline 的設計,團隊也早已習慣。
- 每個 repo 都有基於相似邏輯撰寫的 interface (make build, make test)
,operation scripts 的完整度高。
- GitLab CI 學習曲線較低。
38. GitLab Taipei User Group
語法直觀貼近使用者
Maintain Maintain
.gitlab-ci.yml
.gitlab-ci.yml 真
的很直觀呢!
Dev Ops
40. GitLab Taipei User Group
採用 GitLab CI 之後的 Development Flow
developer
Unit Test Lint Check
DeployBuild
E2E Test
Reviewer
✨
✨
docker pull
docker push
merge request
link to Jira issue
trigger
不必額外維護 CI server
真的減少很多負擔呢!
41. 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
43. 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 對系統操作
45. 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
46. GitLab Taipei User Group
GitLab Runner Management
server A
server B
server C
server D
使用 Ansible 管理 GitLab Runner 組態設定(config.toml)。
GitLab CI
Configuration
Run
PushPull
Ansible
48. GitLab Taipei User Group
Developer Operation
採用 GitLab CI + GitLab Runner 後, 因為語法容易、文檔支持豐富,
能夠大量降低 DevOps CI / CD 的學習門檻,減少教育訓練的成本,
對於團隊推廣 DevOps 文化很有幫助。
close close
49. GitLab Taipei User Group
不論是使用什麼工具,DevOps 的核心價值是能夠以更全局的角度,
理解團隊面臨的困境,替團隊解決開發上以及文化上面臨到的各種
問題。
CI / CD 規劃
Start
End
快速部署穩定交付 Bridging the gap between teams
資訊落差
50. GitLab Taipei User Group
Mobagel 目前仍然持續修正 GitLab DevOps workflow,以期能夠更快
速更穩定的實現軟體交付和自動化測試。