用 Docker 改善團隊合作模式
Bo-Yi Wu
2016.07.05
1
關於我
• 聯發科技工程師
• Node.js
• PHP
• Golang
• DevOps
2
https://blog.wu-boy.com/
DevOps
開發與維運
環境建置
3
Embedded System
BSP
(Board Support Package)
4
Porting
BuildPorting
Build
5
Docker 還沒出來以前
6
需要建置一台 Build Server
7
各專案所需要的工具不同
gcc version
8
5.x
4.x
3.x
9
各專案所需要的作業系統不同
Ubuntu version
10
12.04
14.04
15.04
11
不同作業系統不同套件管理
12
14.04
15.04
13
傳統架構缺陷
• 維護成本提高 (機器硬體維修汰換)
• 建置機器複雜 (雖然有寫 Shell Script)
• 24 小時 on call (公司隨時都有人加班)
• 系統資源常常不夠
14
換另一種架構 (省錢)
15
沒有共同的 Build Server
16
14.04
15.04
17
各專案維護 .vdi 檔案
18
缺陷
• 吃個人系統記憶體資源
• 切換多重專案浪費時間
• 浪費個人電腦硬碟空間
• 更新 vdi 檔案後,團隊全部要重抓
19
Docker 改變了生態
20
Docker 今年三歲
正式宣布支援 Mac 及 Windows
21
Dockerfile
Dockerfile
22
優勢
• 不需要額外的機器及人力維護成本
• 各專案維護 Dockerfile (可進行版本控制)
• 任何作業系統都可執行 (不需要VirtualBox)
23
來看 linkit smart 7688 開發版
24
25
linkit-smart-7688-golang
https://github.com/appleboy/linkit-smart-7688-golang
docker build –t 7688:v1 .
26
27
程式開發
frontend vs. backend
Single Page Application
28
http://blog.opus.com.pk/2015/09/04/importance-of-backend-developer/
29
VS.
30
開發環境部署
傳統前後端合作模式
31
Develop Server
(API)
Backend Developer
Backend Developer
Backend Developer
Frontend Developer
Frontend Developer
QA Engineer
Deploy
Deploy
Deploy
Testing
API
API
32
如何部署 Develop Server
33
Develop
Commit
Testing
Deploy
單一環境部署
34
多重環境部署
Develop Branch
Staging Branch
Production Branch 35
缺陷
• 團隊非常依賴開發環境
• 不管前端後端都需要互相等待
• QA 需要等待前後端完成才可測試
• 多重分支讓開發者非常困擾
• 多一種環境伺服器成本提高
• 想搶先看其他 feature 分支功能呢?
36
如何用 Docker 改善合作模式
37
用 Docker 取代團隊開發環境
docker-compose.yml
38
個人開發環境
docker-compose.yml
39
RD
QA
PM
團隊成員必學
QA, PM, Sales, RD 40
Git
• 如何更新程式
– $ git pull origin master
• 如何切換分支
– $ git checkout –b xx origin/feature-xx
41
Docker
• 啟動 Service
– $ docker-compose -p $(PROJECT) up –d
• 關閉 Service
– $ docker-compose -p $(PROJECT) stop
• 移除 Service
– $ docker-compose -p $(PROJECT) down
42
優勢
• 大家都是獨立運作,互不影響
• 減少 Develop 環境建置
• 降低建置環境門檻
• 可以到處 Demo
• QA 可以隨時進行測試
43
獨立運作
全部服務都跑在 localhost 127.0.0.1
QA RD PM
44
減少 Develop 環境建置
Staging Branch
Production Branch
從三種環境建置變成兩種 (Staging, Production) 45
降低建置環境門檻
一行指令搞定環境部署
docker-compose up -d 46
在客戶面前不怕 Demo 失敗
47
QA 可以隨時進行測試
Feature
Bugs
Success
Fail
透過 git checkout origin/xxxx 測試功能 48
用 Docker 跑測試
49
Docker + Jenkins
Node.js
50
API Server
OAuth Server
npm install && npm test
Node.js Testing
51
Postgres is not started
Docker 執行後
務必等相關 Container 啟動完成
52
https://blog.wu-boy.com/2016/06/server-monitoring-mysql-postgres-daemon-in-docker/53
54
Node.js Testing 問題
測試時間太長
55
npm install 太慢
用一行指令改善套件安裝速度
2 min -> 30 sec
56
一行指令
• tar xf ../module_cache.tar
• npm prune
• npm install
• tar cf ../module_cache.tar node_modules
57
Build
Docker
start
npm install
Database
migration
npm test
Coverage
Docker stop
Deploy
58
59
60
從圖像可以觀察每個
build 及 testing time
61
軟體開發流程
Git flow vs Github flow
可以從分支數量來區分
62
影響團隊部署還流程
Git flow vs Github flow
63
64
Git flow 部署流程 (用分支)
Staging
production 65
Github flow (Master + Tag)
Master
Tag: v1.0, v2.0 66
Git tips and flow
http://www.slideshare.net/appleboy/git-flow-61442567
67
找出一個方法適合團隊
Git flow vs Github flow
68
CI Server?
69
Docker 基礎介紹與實戰
http://www.slideshare.net/appleboy/docker-61214768
70
Any Question?
71

用 Docker 改善團隊合作模式

Editor's Notes

  • #3 介紹公司負責哪些事情 系統維運 開發三種不同專案 教育訓練 DevOps Code Review 平時貢獻於 Github 目前專注於 golang 專案開發
  • #4 今天聊聊跟團隊成員最相關的開發環境 團隊該如何合作 在調整團隊開發模式,我會先以小專案先實施,看看同事間的反應 才決定是否推廣到其他團隊。
  • #5 五年前第一份工作 做的是 Wifi Router 相關產品,像是家用型 Router,負責底層開發工作,及上層 Application porting
  • #6 每天的工作就是 寫 porting -> 丟上機器 build firmware
  • #9 拿到 IC 設計廠 SDK 後就要開始準備環境及工具,看看 SDK 文件把環境架設好
  • #10 同一台機器就要提供各式各樣不同的 gcc 版本,讓同事可以迅速切換到想要的版本 不只是 gcc 而已,其他工具也是同樣方式進行
  • #11 軟體版本還不夠,各專案要求的作業系統也不太一樣,不要問我為什麼不統一用同一個 OS 就好 如果你用的作業系統版本 build 出來的 firmware 真的會有些差異,將來 IC 設計廠一定會詢問說為啥不要一樣的 OS 玩嵌入式系統就是請遵照 Spec 的環境複製。
  • #12 所以你會發現 一個團隊需要多個 server 維護先專案或舊專案
  • #28 使用 dockerfile 可以讓開發者了解如何建立編譯環境 你可以提供 dockerfile 讓大家 auto build 自己的 images. 或者是透過 docker hub 自動幫忙編譯成 image 開發者只需要 docker pull 就可以使用
  • #33 QA, PM, 前端都適用此台 server demo
  • #44 不會發生後端工程師改壞 code 造成前端工程師無法串接 少了 develop 部署環境,只需要 Staging 及 Production. 就算不熟後端技術,前端也可以順利架起後端環境 (Mac, Windows 建置) Python golang node.js PM Sale 可以透過 Docker 帶著電腦到處 demo,不需要依賴公司內部環境 (減少 demo 失敗) QA 可以透過切換 branch 來達成測試新功能或 bug,不需要等到 deploy 到 server 才可以測試
  • #60 記錄每次 Build Time 確保不會有人因為改了幾行 Code 造成 Testing 時間增加
  • #61 Docker 跑測試所花的時間