SlideShare uma empresa Scribd logo
1 de 52
Baixar para ler offline
How to integrate GitLab CICD into B2B service
Mobagel DevOps Lead - Alex Su
GitLab Taipei User Group
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
GitLab Taipei User Group
Decanter AI 軟體介紹
GitLab Taipei User Group
為企業打造的 AI 數據分析系統
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
GitLab Taipei User Group
上傳資料
設定預測目標
下載分析結果
Mobagel Website
GitLab Taipei User Group
Challenges
GitLab Taipei User Group
與日俱增的壓力
Company Product Development
● 團隊人數成長
● Reviewer 負擔重
● B2B software delivery
● Deployment process
● 很難駕馭的 Production env.
● 無 CI /CD
● 無自動化測試
● 有限的單元測試
GitLab Taipei User Group
What can we do?
GitLab Taipei User Group
測試自動化
Create merge request Test Merged
developer
Reviewer
✨ 專注 code review
頻繁提交程式碼
提高程式碼品質
✨
✨
降低團隊負擔
👻 Must automation!
GitLab Taipei User Group
自動化部署、測試、封裝
Create merge request Test Merged
Build Deploy Test Archive
Merged 後的部署、測試、
封裝也是很重要的!
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
GitLab Taipei User Group
從 0 開始的 DevOps Workflow
GitLab Taipei User Group
那些年曾經使用的工具們,有的留下
有的發現不適合,而悄悄離去... 🥺
GitLabGitLab Runner Bamboo Jira Docker GrayLog
AirtableWhimsicalAnsibleSeleniumJenkinsSlack
Swarm Cypress Bitbucket Harbor Notion TestRail
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
沒有列出所有工具,不然擠不下 😅
GitLab Taipei User Group
- CI / CD 工具鏈的整合是一個漸進的過程,並非一步到位。
- 隨著軟體的開發和組織的發展,工具也必須與時俱進。
- DevOps 工具之間的能不能深度整合很重要。
✨
✨
GitLab Taipei User Group
開發前期 - Atlassian 全家桶
GitLab Taipei User Group
● 用途
- 使用 Bitbucket 作為 development platform,Jira
作為 issue tracking,Bamboo 為 CI server
● 方案
- Self-managed
- USD 10 one-time payment
● 優勢
- 團隊人數: 10 人以下
- Atlassian 工具鏈易於整合
● 劣勢
- 隨著開發人數增長,價格負擔逐漸變重
GitLab Taipei User Group
Bitbucket Pricing
隨著團隊人數的增加,負擔越來越高
尤其是開發人數如果介於
11 ~ 15 之間就會很尷尬。
GitLab Taipei User Group
- 是否有其他替代方案可以取代 Bitbucket 和 Baomboo ?
- Jira 作為 issue tracking 的功能影響較小,可以繼續沿用
- 因為 Jira 繼續沿用,替代的工具要與 Jira 有良好的整合
- Jira issues 必須要能顯示相關的 Git commit
- 可以從 code platform 連結到 Jira issues
🤔
GitLab Taipei User Group
Let’s start with GitLab and Jenkins
GitLab Taipei User Group
● Why use GitLab
- Open source
- Support a complete DevOps platform
- 與其他 DevOps 工具的整合很容易,可打造以
GitLab 為中心的工具鏈。
● 方案
- Self-managed
- Bronze / Starter
- Enterprise Edition
GitLab Taipei User Group
Why choose Bronze / Starter Plan?
GitLab Taipei User Group
Merge request approvals!
GitLab Taipei User Group
Merge request approvals
GitLab Doc
自動化測試還沒有成熟的時候,團隊很
仰賴 Code review 把關品質。
Premium Only
GitLab Taipei User Group
● Why use Jenkins
- Open source
- 有別於 GitLab CI / CD 的 UI,Jenkins 提供一個可
以統一管理Jobs 的 Dashboard
- 容易與 GitLab CI / CD 整合
- 豐富的 Plugins
● 方案
- Self-managed
- Free
GitLab Taipei User Group
Jenkins & GitLab UI 比較
Jenkins
GitLab
😀 畫面乾淨
😀 彈性可調整 view 的 dashboard
😣 UI 不直觀
😣 沒有可調整 view 的 dashboard
GitLab Taipei User Group
CI / CD Pipeline Design
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 不
宜太多,不然會花太多測試的時間。
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 儲存。
GitLab Taipei User Group
- 將 Jenkins 整合進 GitLab CI / CD 的架構,持續使用了快一年,但後來仍然
發現了一些問題,迫使在今年決定捨棄 Jenkins,使用 GitLab 開發的
GitLab Runner。
- CI / CD workflow 流程雖然看起來大同小異,但實際運作起來,仍會有不同
層面的問題要解決 (例如:團隊文化、教育訓練)
GitLab Taipei User Group
Jenkins 帶來的問題
必須額外管理 Plugins,定時檢查 release
note 或 security issue。
對於剛入門 DevOps 的工程師來說, 會對
Jenkins 的 plugins 生態系有點不知所措。
GitLab Taipei User Group
Jenkins 帶來的問題
Developers 必須在 GitLab 和 Jenkins 兩個視窗來回查看。
Jenkins GitLab
GitLab Taipei User Group
Jenkins 帶來的問題
- GitLab CI 和 Jenkins 雖然容易整合,但卻無法深度整合,一些很好用的 GitLab
原生功能都沒有支持 (例如: 在一個 merge request 顯示多個 build result )。
- 團隊繁忙的情況下,還必須額外管理 Jenkins。
- 長久下來增加不少開發者的學習成本,降低團隊學習 DevOps 的意願。
✨
✨
GitLab Taipei User Group
擁抱 GitLab Runner
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
GitLab Taipei User Group
從 Jenkins 轉換到 GitLab CI 其實並沒有太大的負擔,主要原因是:
- 依然採用原先 CI / CD pipeline 的設計,團隊也早已習慣。
- 每個 repo 都有基於相似邏輯撰寫的 interface (make build, make test)
,operation scripts 的完整度高。
- GitLab CI 學習曲線較低。
GitLab Taipei User Group
語法直觀貼近使用者
Maintain Maintain
.gitlab-ci.yml
.gitlab-ci.yml 真
的很直觀呢!
Dev Ops
GitLab Taipei User Group
豐富的文檔
GitLab Doc
遇到的問題在這裡幾
乎都可以找到解答!
Dev
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
真的減少很多負擔呢!
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
GitLab Taipei User Group
Pipeline Design - now and future
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 對系統操作
GitLab Taipei User Group
Manual Deploy
😣 因為 UI 沒有提供下拉式選單,Input
的參數不能太多太複雜。
● 用途
讓開發者或是非開發者,都能夠藉由手動輸入的
參數,將軟體部署到各種環境。
● 環境參數
ACTION: 參考自DevOps cycle
- deploy
- release
ENVIRONMENT: 部署環境
- dev
- qa
- nightly
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
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
GitLab Taipei User Group
總結
GitLab Taipei User Group
Developer Operation
採用 GitLab CI + GitLab Runner 後, 因為語法容易、文檔支持豐富,
能夠大量降低 DevOps CI / CD 的學習門檻,減少教育訓練的成本,
對於團隊推廣 DevOps 文化很有幫助。
close close
GitLab Taipei User Group
不論是使用什麼工具,DevOps 的核心價值是能夠以更全局的角度,
理解團隊面臨的困境,替團隊解決開發上以及文化上面臨到的各種
問題。
CI / CD 規劃
Start
End
快速部署穩定交付 Bridging the gap between teams
資訊落差
GitLab Taipei User Group
Mobagel 目前仍然持續修正 GitLab DevOps workflow,以期能夠更快
速更穩定的實現軟體交付和自動化測試。
GitLab Taipei User Group
Fin.
GitLab Taipei User Group
Notification Issue tracking
Container registry
Test
CI
MoBagel 2020

Mais conteúdo relacionado

Mais procurados

Continuous Delivery - 敏捷開發的最後一哩路
Continuous Delivery - 敏捷開發的最後一哩路Continuous Delivery - 敏捷開發的最後一哩路
Continuous Delivery - 敏捷開發的最後一哩路Miles Chou
 
摩登開發團隊的DevOps之道 (@DevOpsTaiwan)
摩登開發團隊的DevOps之道 (@DevOpsTaiwan)摩登開發團隊的DevOps之道 (@DevOpsTaiwan)
摩登開發團隊的DevOps之道 (@DevOpsTaiwan)Chen Cheng-Wei
 
Wiki in Teamroom - Connected Mind
Wiki in Teamroom - Connected MindWiki in Teamroom - Connected Mind
Wiki in Teamroom - Connected MindRick Hwang
 
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛Edward Kuo
 
從研發團隊管理及產品發展的角度看 DevOps
從研發團隊管理及產品發展的角度看 DevOps從研發團隊管理及產品發展的角度看 DevOps
從研發團隊管理及產品發展的角度看 DevOpsTIM WANG
 
過來人經驗 - 在企業中推行 DevOps 前該具備的認知與工具箱
過來人經驗 - 在企業中推行 DevOps 前該具備的認知與工具箱過來人經驗 - 在企業中推行 DevOps 前該具備的認知與工具箱
過來人經驗 - 在企業中推行 DevOps 前該具備的認知與工具箱TIM WANG
 
從無到有建立一個敏捷開發團隊的經驗甘苦談
從無到有建立一個敏捷開發團隊的經驗甘苦談從無到有建立一個敏捷開發團隊的經驗甘苦談
從無到有建立一個敏捷開發團隊的經驗甘苦談TIM WANG
 
[DevOpsDays] 硬體產業的DevOps導入與實踐 - 以工控產業為例
[DevOpsDays] 硬體產業的DevOps導入與實踐 - 以工控產業為例[DevOpsDays] 硬體產業的DevOps導入與實踐 - 以工控產業為例
[DevOpsDays] 硬體產業的DevOps導入與實踐 - 以工控產業為例TIM WANG
 
在B2B硬體產業運用 Agile 與 DevOps 的實務與心法
在B2B硬體產業運用 Agile 與 DevOps 的實務與心法在B2B硬體產業運用 Agile 與 DevOps 的實務與心法
在B2B硬體產業運用 Agile 與 DevOps 的實務與心法TIM WANG
 
Testing in Production, Deploy on Fridays
Testing in Production, Deploy on FridaysTesting in Production, Deploy on Fridays
Testing in Production, Deploy on FridaysYi-Feng Tzeng
 
VSCode Remote Development 介紹
VSCode Remote Development 介紹VSCode Remote Development 介紹
VSCode Remote Development 介紹Philip Zheng
 
[2018 .NET Conf].NET Core與Azure DevOps應用於企業開發
[2018 .NET Conf].NET Core與Azure DevOps應用於企業開發[2018 .NET Conf].NET Core與Azure DevOps應用於企業開發
[2018 .NET Conf].NET Core與Azure DevOps應用於企業開發Edward Kuo
 
Effective DevOps (Agile Tour HsinChu 2017)
Effective DevOps (Agile Tour HsinChu 2017)Effective DevOps (Agile Tour HsinChu 2017)
Effective DevOps (Agile Tour HsinChu 2017)Chen Cheng-Wei
 
DevOps核心理念和實踐
DevOps核心理念和實踐DevOps核心理念和實踐
DevOps核心理念和實踐Martin Liu
 
Rancher 快速打造叢集的解決方案
Rancher 快速打造叢集的解決方案Rancher 快速打造叢集的解決方案
Rancher 快速打造叢集的解決方案Miles Chou
 
[2021 .NET Conf]善用 Azure Monitor 服務打造 DevOps 監控一環
[2021 .NET Conf]善用 Azure Monitor 服務打造 DevOps 監控一環[2021 .NET Conf]善用 Azure Monitor 服務打造 DevOps 監控一環
[2021 .NET Conf]善用 Azure Monitor 服務打造 DevOps 監控一環Edward Kuo
 
Android gradle 从入门到gg 3
Android gradle 从入门到gg 3Android gradle 从入门到gg 3
Android gradle 从入门到gg 3Jun Liu
 
[QCon 2016] 基于云平台的docker多租户安全
[QCon 2016] 基于云平台的docker多租户安全[QCon 2016] 基于云平台的docker多租户安全
[QCon 2016] 基于云平台的docker多租户安全Zhimin Tang
 
The way to continuous delivery
The way to continuous deliveryThe way to continuous delivery
The way to continuous deliveryQiao Liang
 

Mais procurados (20)

Continuous Delivery - 敏捷開發的最後一哩路
Continuous Delivery - 敏捷開發的最後一哩路Continuous Delivery - 敏捷開發的最後一哩路
Continuous Delivery - 敏捷開發的最後一哩路
 
摩登開發團隊的DevOps之道 (@DevOpsTaiwan)
摩登開發團隊的DevOps之道 (@DevOpsTaiwan)摩登開發團隊的DevOps之道 (@DevOpsTaiwan)
摩登開發團隊的DevOps之道 (@DevOpsTaiwan)
 
Wiki in Teamroom - Connected Mind
Wiki in Teamroom - Connected MindWiki in Teamroom - Connected Mind
Wiki in Teamroom - Connected Mind
 
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
 
從研發團隊管理及產品發展的角度看 DevOps
從研發團隊管理及產品發展的角度看 DevOps從研發團隊管理及產品發展的角度看 DevOps
從研發團隊管理及產品發展的角度看 DevOps
 
過來人經驗 - 在企業中推行 DevOps 前該具備的認知與工具箱
過來人經驗 - 在企業中推行 DevOps 前該具備的認知與工具箱過來人經驗 - 在企業中推行 DevOps 前該具備的認知與工具箱
過來人經驗 - 在企業中推行 DevOps 前該具備的認知與工具箱
 
My DevOps Tour 0.1
My DevOps Tour 0.1My DevOps Tour 0.1
My DevOps Tour 0.1
 
從無到有建立一個敏捷開發團隊的經驗甘苦談
從無到有建立一個敏捷開發團隊的經驗甘苦談從無到有建立一個敏捷開發團隊的經驗甘苦談
從無到有建立一個敏捷開發團隊的經驗甘苦談
 
[DevOpsDays] 硬體產業的DevOps導入與實踐 - 以工控產業為例
[DevOpsDays] 硬體產業的DevOps導入與實踐 - 以工控產業為例[DevOpsDays] 硬體產業的DevOps導入與實踐 - 以工控產業為例
[DevOpsDays] 硬體產業的DevOps導入與實踐 - 以工控產業為例
 
在B2B硬體產業運用 Agile 與 DevOps 的實務與心法
在B2B硬體產業運用 Agile 與 DevOps 的實務與心法在B2B硬體產業運用 Agile 與 DevOps 的實務與心法
在B2B硬體產業運用 Agile 與 DevOps 的實務與心法
 
Testing in Production, Deploy on Fridays
Testing in Production, Deploy on FridaysTesting in Production, Deploy on Fridays
Testing in Production, Deploy on Fridays
 
VSCode Remote Development 介紹
VSCode Remote Development 介紹VSCode Remote Development 介紹
VSCode Remote Development 介紹
 
[2018 .NET Conf].NET Core與Azure DevOps應用於企業開發
[2018 .NET Conf].NET Core與Azure DevOps應用於企業開發[2018 .NET Conf].NET Core與Azure DevOps應用於企業開發
[2018 .NET Conf].NET Core與Azure DevOps應用於企業開發
 
Effective DevOps (Agile Tour HsinChu 2017)
Effective DevOps (Agile Tour HsinChu 2017)Effective DevOps (Agile Tour HsinChu 2017)
Effective DevOps (Agile Tour HsinChu 2017)
 
DevOps核心理念和實踐
DevOps核心理念和實踐DevOps核心理念和實踐
DevOps核心理念和實踐
 
Rancher 快速打造叢集的解決方案
Rancher 快速打造叢集的解決方案Rancher 快速打造叢集的解決方案
Rancher 快速打造叢集的解決方案
 
[2021 .NET Conf]善用 Azure Monitor 服務打造 DevOps 監控一環
[2021 .NET Conf]善用 Azure Monitor 服務打造 DevOps 監控一環[2021 .NET Conf]善用 Azure Monitor 服務打造 DevOps 監控一環
[2021 .NET Conf]善用 Azure Monitor 服務打造 DevOps 監控一環
 
Android gradle 从入门到gg 3
Android gradle 从入门到gg 3Android gradle 从入门到gg 3
Android gradle 从入门到gg 3
 
[QCon 2016] 基于云平台的docker多租户安全
[QCon 2016] 基于云平台的docker多租户安全[QCon 2016] 基于云平台的docker多租户安全
[QCon 2016] 基于云平台的docker多租户安全
 
The way to continuous delivery
The way to continuous deliveryThe way to continuous delivery
The way to continuous delivery
 

Semelhante a How to integrate GitLab CICD into B2B service

容器與 Gitlab CI 應用
容器與 Gitlab CI 應用容器與 Gitlab CI 應用
容器與 Gitlab CI 應用Philip Zheng
 
用 Drone 打造 輕量級容器持續交付平台
用 Drone 打造輕量級容器持續交付平台用 Drone 打造輕量級容器持續交付平台
用 Drone 打造 輕量級容器持續交付平台Bo-Yi Wu
 
CICD Workshop 20180922
CICD Workshop 20180922CICD Workshop 20180922
CICD Workshop 20180922Earou Huang
 
如何與全世界分享你的 Library
如何與全世界分享你的 Library如何與全世界分享你的 Library
如何與全世界分享你的 LibraryMu Chun Wang
 
Software Engineer Talk
Software Engineer TalkSoftware Engineer Talk
Software Engineer TalkLarry Cai
 
2019 Cloud Native Forum, Taipei
2019 Cloud Native Forum, Taipei2019 Cloud Native Forum, Taipei
2019 Cloud Native Forum, TaipeiYiDeWu1
 
初探 Data API Builder:在幾分鐘內將資料庫轉換成 REST 和 GraphQL 不再是夢想
初探 Data API Builder:在幾分鐘內將資料庫轉換成 REST 和 GraphQL 不再是夢想初探 Data API Builder:在幾分鐘內將資料庫轉換成 REST 和 GraphQL 不再是夢想
初探 Data API Builder:在幾分鐘內將資料庫轉換成 REST 和 GraphQL 不再是夢想Alan Tsai
 
轻量级Flash服务器开发框架(刘恒)
轻量级Flash服务器开发框架(刘恒)轻量级Flash服务器开发框架(刘恒)
轻量级Flash服务器开发框架(刘恒)FLASH开发者交流会
 
Intro to Git 投影片
Intro to Git 投影片Intro to Git 投影片
Intro to Git 投影片Tony Yeh
 
Continuous Delivery Workshop with Ansible x GitLab CI (3rd)
Continuous Delivery Workshop with Ansible x GitLab CI (3rd)Continuous Delivery Workshop with Ansible x GitLab CI (3rd)
Continuous Delivery Workshop with Ansible x GitLab CI (3rd)Chu-Siang Lai
 
Is it really easy for companies to import Ansible automation
Is it really easy for companies to import Ansible automationIs it really easy for companies to import Ansible automation
Is it really easy for companies to import Ansible automationChu-Siang Lai
 
從 GitHub Copilot 到 Enterprise Copilot:打造符合企業需求的智能開發助手之路 | .NET Conf 2023 Taiwan
從 GitHub Copilot 到 Enterprise Copilot:打造符合企業需求的智能開發助手之路 | .NET Conf 2023 Taiwan從 GitHub Copilot 到 Enterprise Copilot:打造符合企業需求的智能開發助手之路 | .NET Conf 2023 Taiwan
從 GitHub Copilot 到 Enterprise Copilot:打造符合企業需求的智能開發助手之路 | .NET Conf 2023 TaiwanAlan Tsai
 
CollabNet TeamForge 8.0 简介 (Chinese)
CollabNet TeamForge 8.0 简介 (Chinese)CollabNet TeamForge 8.0 简介 (Chinese)
CollabNet TeamForge 8.0 简介 (Chinese)CollabNet
 
Angular Conf 2018 - 原來 Angular 可以這樣玩設定
Angular Conf 2018 - 原來 Angular 可以這樣玩設定Angular Conf 2018 - 原來 Angular 可以這樣玩設定
Angular Conf 2018 - 原來 Angular 可以這樣玩設定Poy Chang
 
Git 入门实战
Git 入门实战Git 入门实战
Git 入门实战icy leaf
 
Bitbucket pipeline CI
Bitbucket pipeline CIBitbucket pipeline CI
Bitbucket pipeline CIZero Huang
 
A dev ops team's practice in trend micro in agile summit 2018
A dev ops team's practice in trend micro in agile summit 2018A dev ops team's practice in trend micro in agile summit 2018
A dev ops team's practice in trend micro in agile summit 2018Juggernaut Liu
 
[2019 DevOpsDays Taipei]Azure DevOps 建立 DevOps 團隊
[2019 DevOpsDays Taipei]Azure DevOps 建立 DevOps 團隊[2019 DevOpsDays Taipei]Azure DevOps 建立 DevOps 團隊
[2019 DevOpsDays Taipei]Azure DevOps 建立 DevOps 團隊Edward Kuo
 

Semelhante a How to integrate GitLab CICD into B2B service (20)

容器與 Gitlab CI 應用
容器與 Gitlab CI 應用容器與 Gitlab CI 應用
容器與 Gitlab CI 應用
 
用 Drone 打造 輕量級容器持續交付平台
用 Drone 打造輕量級容器持續交付平台用 Drone 打造輕量級容器持續交付平台
用 Drone 打造 輕量級容器持續交付平台
 
CICD Workshop 20180922
CICD Workshop 20180922CICD Workshop 20180922
CICD Workshop 20180922
 
如何與全世界分享你的 Library
如何與全世界分享你的 Library如何與全世界分享你的 Library
如何與全世界分享你的 Library
 
Software Engineer Talk
Software Engineer TalkSoftware Engineer Talk
Software Engineer Talk
 
Cocoa on Rails 4th
Cocoa on Rails 4thCocoa on Rails 4th
Cocoa on Rails 4th
 
2019 Cloud Native Forum, Taipei
2019 Cloud Native Forum, Taipei2019 Cloud Native Forum, Taipei
2019 Cloud Native Forum, Taipei
 
Build Your Own Android Toolchain from scratch
Build Your Own Android Toolchain from scratchBuild Your Own Android Toolchain from scratch
Build Your Own Android Toolchain from scratch
 
初探 Data API Builder:在幾分鐘內將資料庫轉換成 REST 和 GraphQL 不再是夢想
初探 Data API Builder:在幾分鐘內將資料庫轉換成 REST 和 GraphQL 不再是夢想初探 Data API Builder:在幾分鐘內將資料庫轉換成 REST 和 GraphQL 不再是夢想
初探 Data API Builder:在幾分鐘內將資料庫轉換成 REST 和 GraphQL 不再是夢想
 
轻量级Flash服务器开发框架(刘恒)
轻量级Flash服务器开发框架(刘恒)轻量级Flash服务器开发框架(刘恒)
轻量级Flash服务器开发框架(刘恒)
 
Intro to Git 投影片
Intro to Git 投影片Intro to Git 投影片
Intro to Git 投影片
 
Continuous Delivery Workshop with Ansible x GitLab CI (3rd)
Continuous Delivery Workshop with Ansible x GitLab CI (3rd)Continuous Delivery Workshop with Ansible x GitLab CI (3rd)
Continuous Delivery Workshop with Ansible x GitLab CI (3rd)
 
Is it really easy for companies to import Ansible automation
Is it really easy for companies to import Ansible automationIs it really easy for companies to import Ansible automation
Is it really easy for companies to import Ansible automation
 
從 GitHub Copilot 到 Enterprise Copilot:打造符合企業需求的智能開發助手之路 | .NET Conf 2023 Taiwan
從 GitHub Copilot 到 Enterprise Copilot:打造符合企業需求的智能開發助手之路 | .NET Conf 2023 Taiwan從 GitHub Copilot 到 Enterprise Copilot:打造符合企業需求的智能開發助手之路 | .NET Conf 2023 Taiwan
從 GitHub Copilot 到 Enterprise Copilot:打造符合企業需求的智能開發助手之路 | .NET Conf 2023 Taiwan
 
CollabNet TeamForge 8.0 简介 (Chinese)
CollabNet TeamForge 8.0 简介 (Chinese)CollabNet TeamForge 8.0 简介 (Chinese)
CollabNet TeamForge 8.0 简介 (Chinese)
 
Angular Conf 2018 - 原來 Angular 可以這樣玩設定
Angular Conf 2018 - 原來 Angular 可以這樣玩設定Angular Conf 2018 - 原來 Angular 可以這樣玩設定
Angular Conf 2018 - 原來 Angular 可以這樣玩設定
 
Git 入门实战
Git 入门实战Git 入门实战
Git 入门实战
 
Bitbucket pipeline CI
Bitbucket pipeline CIBitbucket pipeline CI
Bitbucket pipeline CI
 
A dev ops team's practice in trend micro in agile summit 2018
A dev ops team's practice in trend micro in agile summit 2018A dev ops team's practice in trend micro in agile summit 2018
A dev ops team's practice in trend micro in agile summit 2018
 
[2019 DevOpsDays Taipei]Azure DevOps 建立 DevOps 團隊
[2019 DevOpsDays Taipei]Azure DevOps 建立 DevOps 團隊[2019 DevOpsDays Taipei]Azure DevOps 建立 DevOps 團隊
[2019 DevOpsDays Taipei]Azure DevOps 建立 DevOps 團隊
 

How to integrate GitLab CICD into B2B service

  • 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 Decanter AI 軟體介紹
  • 4. GitLab Taipei User Group 為企業打造的 AI 數據分析系統
  • 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
  • 6. GitLab Taipei User Group 上傳資料 設定預測目標 下載分析結果 Mobagel Website
  • 7. GitLab Taipei User Group Challenges
  • 8. GitLab Taipei User Group 與日俱增的壓力 Company Product Development ● 團隊人數成長 ● Reviewer 負擔重 ● B2B software delivery ● Deployment process ● 很難駕馭的 Production env. ● 無 CI /CD ● 無自動化測試 ● 有限的單元測試
  • 9. GitLab Taipei User Group What can we do?
  • 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
  • 13. GitLab Taipei User Group 從 0 開始的 DevOps Workflow
  • 14. GitLab Taipei User Group 那些年曾經使用的工具們,有的留下 有的發現不適合,而悄悄離去... 🥺 GitLabGitLab Runner Bamboo Jira Docker GrayLog AirtableWhimsicalAnsibleSeleniumJenkinsSlack Swarm Cypress Bitbucket Harbor Notion TestRail
  • 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 工具之間的能不能深度整合很重要。 ✨ ✨
  • 17. GitLab Taipei User Group 開發前期 - Atlassian 全家桶
  • 18. GitLab Taipei User Group ● 用途 - 使用 Bitbucket 作為 development platform,Jira 作為 issue tracking,Bamboo 為 CI server ● 方案 - Self-managed - USD 10 one-time payment ● 優勢 - 團隊人數: 10 人以下 - Atlassian 工具鏈易於整合 ● 劣勢 - 隨著開發人數增長,價格負擔逐漸變重
  • 19. GitLab Taipei User Group Bitbucket Pricing 隨著團隊人數的增加,負擔越來越高 尤其是開發人數如果介於 11 ~ 15 之間就會很尷尬。
  • 20. GitLab Taipei User Group - 是否有其他替代方案可以取代 Bitbucket 和 Baomboo ? - Jira 作為 issue tracking 的功能影響較小,可以繼續沿用 - 因為 Jira 繼續沿用,替代的工具要與 Jira 有良好的整合 - Jira issues 必須要能顯示相關的 Git commit - 可以從 code platform 連結到 Jira issues 🤔
  • 21. GitLab Taipei User Group Let’s start with GitLab and Jenkins
  • 22. GitLab Taipei User Group ● Why use GitLab - Open source - Support a complete DevOps platform - 與其他 DevOps 工具的整合很容易,可打造以 GitLab 為中心的工具鏈。 ● 方案 - Self-managed - Bronze / Starter - Enterprise Edition
  • 23. GitLab Taipei User Group Why choose Bronze / Starter Plan?
  • 24. GitLab Taipei User Group Merge request approvals!
  • 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
  • 27. GitLab Taipei User Group Jenkins & GitLab UI 比較 Jenkins GitLab 😀 畫面乾淨 😀 彈性可調整 view 的 dashboard 😣 UI 不直觀 😣 沒有可調整 view 的 dashboard
  • 28. GitLab Taipei User Group CI / CD Pipeline Design
  • 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 流程雖然看起來大同小異,但實際運作起來,仍會有不同 層面的問題要解決 (例如:團隊文化、教育訓練)
  • 32. GitLab Taipei User Group Jenkins 帶來的問題 必須額外管理 Plugins,定時檢查 release note 或 security issue。 對於剛入門 DevOps 的工程師來說, 會對 Jenkins 的 plugins 生態系有點不知所措。
  • 33. GitLab Taipei User Group Jenkins 帶來的問題 Developers 必須在 GitLab 和 Jenkins 兩個視窗來回查看。 Jenkins GitLab
  • 34. GitLab Taipei User Group Jenkins 帶來的問題 - GitLab CI 和 Jenkins 雖然容易整合,但卻無法深度整合,一些很好用的 GitLab 原生功能都沒有支持 (例如: 在一個 merge request 顯示多個 build result )。 - 團隊繁忙的情況下,還必須額外管理 Jenkins。 - 長久下來增加不少開發者的學習成本,降低團隊學習 DevOps 的意願。 ✨ ✨
  • 35. GitLab Taipei User Group 擁抱 GitLab Runner
  • 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
  • 39. GitLab Taipei User Group 豐富的文檔 GitLab Doc 遇到的問題在這裡幾 乎都可以找到解答! Dev
  • 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
  • 42. GitLab Taipei User Group Pipeline Design - now and future
  • 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 對系統操作
  • 44. GitLab Taipei User Group Manual Deploy 😣 因為 UI 沒有提供下拉式選單,Input 的參數不能太多太複雜。 ● 用途 讓開發者或是非開發者,都能夠藉由手動輸入的 參數,將軟體部署到各種環境。 ● 環境參數 ACTION: 參考自DevOps cycle - deploy - release ENVIRONMENT: 部署環境 - dev - qa - nightly
  • 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
  • 47. GitLab Taipei User Group 總結
  • 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,以期能夠更快 速更穩定的實現軟體交付和自動化測試。
  • 51. GitLab Taipei User Group Fin.
  • 52. GitLab Taipei User Group Notification Issue tracking Container registry Test CI MoBagel 2020