SlideShare a Scribd company logo
1 of 71
用 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

More Related Content

What's hot

Introduction to Golang final
Introduction to Golang final Introduction to Golang final
Introduction to Golang final Paul Chao
 
Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲
Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲
Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲ChinaNetCloud
 
快速上手 Windows Containers 容器技術 (Docker Taipei)
快速上手 Windows Containers 容器技術 (Docker Taipei)快速上手 Windows Containers 容器技術 (Docker Taipei)
快速上手 Windows Containers 容器技術 (Docker Taipei)Will Huang
 
用 Drone 打造 輕量級容器持續交付平台
用 Drone 打造輕量級容器持續交付平台用 Drone 打造輕量級容器持續交付平台
用 Drone 打造 輕量級容器持續交付平台Bo-Yi Wu
 
Visual Studio Code 快速上手指南
Visual Studio Code 快速上手指南Visual Studio Code 快速上手指南
Visual Studio Code 快速上手指南Shengyou Fan
 
docker intro
docker introdocker intro
docker introkoji lin
 
20150604 docker 新手入門
20150604 docker 新手入門20150604 docker 新手入門
20150604 docker 新手入門azole Lai
 
cec-hello-docker
cec-hello-dockercec-hello-docker
cec-hello-dockerBruce Huang
 
COSCUP 2016 Workshop: 用 Docker 架設班級 git-it 練習環境
COSCUP 2016 Workshop: 用 Docker 架設班級 git-it 練習環境COSCUP 2016 Workshop: 用 Docker 架設班級 git-it 練習環境
COSCUP 2016 Workshop: 用 Docker 架設班級 git-it 練習環境均民 戴
 
SQL Server 資料庫版本控管
SQL Server 資料庫版本控管SQL Server 資料庫版本控管
SQL Server 資料庫版本控管Will Huang
 
Rancher: 建立你的牧場艦隊
Rancher: 建立你的牧場艦隊Rancher: 建立你的牧場艦隊
Rancher: 建立你的牧場艦隊Miles Chou
 
Continuous Delivery with Ansible x GitLab CI
Continuous Delivery with Ansible x GitLab CIContinuous Delivery with Ansible x GitLab CI
Continuous Delivery with Ansible x GitLab CIChu-Siang Lai
 
Phpconf 2011 introduction_to_codeigniter
Phpconf 2011 introduction_to_codeigniterPhpconf 2011 introduction_to_codeigniter
Phpconf 2011 introduction_to_codeigniterBo-Yi Wu
 
Git flow 與團隊合作
Git flow 與團隊合作Git flow 與團隊合作
Git flow 與團隊合作Bo-Yi Wu
 
容器式基礎架構介紹
容器式基礎架構介紹容器式基礎架構介紹
容器式基礎架構介紹Philip Zheng
 
Continuous Delivery Workshop with Ansible x GitLab CI (2nd)
Continuous Delivery Workshop with Ansible x GitLab CI (2nd)Continuous Delivery Workshop with Ansible x GitLab CI (2nd)
Continuous Delivery Workshop with Ansible x GitLab CI (2nd)Chu-Siang Lai
 
AWS EC2 for beginner
AWS EC2 for beginnerAWS EC2 for beginner
AWS EC2 for beginnerazole Lai
 
微软Bot framework简介
微软Bot framework简介微软Bot framework简介
微软Bot framework简介Zhichao Liang
 

What's hot (20)

Introduction to Golang final
Introduction to Golang final Introduction to Golang final
Introduction to Golang final
 
Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲
Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲
Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲
 
快速上手 Windows Containers 容器技術 (Docker Taipei)
快速上手 Windows Containers 容器技術 (Docker Taipei)快速上手 Windows Containers 容器技術 (Docker Taipei)
快速上手 Windows Containers 容器技術 (Docker Taipei)
 
用 Drone 打造 輕量級容器持續交付平台
用 Drone 打造輕量級容器持續交付平台用 Drone 打造輕量級容器持續交付平台
用 Drone 打造 輕量級容器持續交付平台
 
Visual Studio Code 快速上手指南
Visual Studio Code 快速上手指南Visual Studio Code 快速上手指南
Visual Studio Code 快速上手指南
 
Docker Build
Docker BuildDocker Build
Docker Build
 
docker intro
docker introdocker intro
docker intro
 
Docker應用
Docker應用Docker應用
Docker應用
 
20150604 docker 新手入門
20150604 docker 新手入門20150604 docker 新手入門
20150604 docker 新手入門
 
cec-hello-docker
cec-hello-dockercec-hello-docker
cec-hello-docker
 
COSCUP 2016 Workshop: 用 Docker 架設班級 git-it 練習環境
COSCUP 2016 Workshop: 用 Docker 架設班級 git-it 練習環境COSCUP 2016 Workshop: 用 Docker 架設班級 git-it 練習環境
COSCUP 2016 Workshop: 用 Docker 架設班級 git-it 練習環境
 
SQL Server 資料庫版本控管
SQL Server 資料庫版本控管SQL Server 資料庫版本控管
SQL Server 資料庫版本控管
 
Rancher: 建立你的牧場艦隊
Rancher: 建立你的牧場艦隊Rancher: 建立你的牧場艦隊
Rancher: 建立你的牧場艦隊
 
Continuous Delivery with Ansible x GitLab CI
Continuous Delivery with Ansible x GitLab CIContinuous Delivery with Ansible x GitLab CI
Continuous Delivery with Ansible x GitLab CI
 
Phpconf 2011 introduction_to_codeigniter
Phpconf 2011 introduction_to_codeigniterPhpconf 2011 introduction_to_codeigniter
Phpconf 2011 introduction_to_codeigniter
 
Git flow 與團隊合作
Git flow 與團隊合作Git flow 與團隊合作
Git flow 與團隊合作
 
容器式基礎架構介紹
容器式基礎架構介紹容器式基礎架構介紹
容器式基礎架構介紹
 
Continuous Delivery Workshop with Ansible x GitLab CI (2nd)
Continuous Delivery Workshop with Ansible x GitLab CI (2nd)Continuous Delivery Workshop with Ansible x GitLab CI (2nd)
Continuous Delivery Workshop with Ansible x GitLab CI (2nd)
 
AWS EC2 for beginner
AWS EC2 for beginnerAWS EC2 for beginner
AWS EC2 for beginner
 
微软Bot framework简介
微软Bot framework简介微软Bot framework简介
微软Bot framework简介
 

Similar to 用 Docker 改善團隊合作模式

[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
 
DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略Will Huang
 
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩Wen-Tien Chang
 
讓軟體開發與應用更自由 - 使用 Docker 技術
讓軟體開發與應用更自由 - 使用 Docker 技術讓軟體開發與應用更自由 - 使用 Docker 技術
讓軟體開發與應用更自由 - 使用 Docker 技術Yu Lung Shao
 
.NET 7 家族新成員: Microsoft Orleans v7
.NET 7 家族新成員:Microsoft Orleans v7.NET 7 家族新成員:Microsoft Orleans v7
.NET 7 家族新成員: Microsoft Orleans v7twMVC
 
Docker tutorial
Docker tutorialDocker tutorial
Docker tutorialazole Lai
 
icecream / icecc:分散式編譯系統簡介
icecream / icecc:分散式編譯系統簡介icecream / icecc:分散式編譯系統簡介
icecream / icecc:分散式編譯系統簡介Kito Cheng
 
Artifacts management with CI and CD
Artifacts management with CI and CDArtifacts management with CI and CD
Artifacts management with CI and CDChen-Tien Tsai
 
twMVC#42 Azure DevOps Service Pipeline設計與非正常應用
twMVC#42 Azure DevOps Service Pipeline設計與非正常應用twMVC#42 Azure DevOps Service Pipeline設計與非正常應用
twMVC#42 Azure DevOps Service Pipeline設計與非正常應用twMVC
 
Linux Container Introduction
Linux Container IntroductionLinux Container Introduction
Linux Container Introduction家弘 周
 
Asp.net mvc 6 新功能初探
Asp.net mvc 6 新功能初探Asp.net mvc 6 新功能初探
Asp.net mvc 6 新功能初探Gelis Wu
 
把玩 Jenkins CI
把玩 Jenkins CI把玩 Jenkins CI
把玩 Jenkins CIHao Lee
 
專案啟動與設定
專案啟動與設定專案啟動與設定
專案啟動與設定Shengyou Fan
 
ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索Will Huang
 
Asp.net core v1.0
Asp.net core v1.0Asp.net core v1.0
Asp.net core v1.0國昭 張
 

Similar to 用 Docker 改善團隊合作模式 (20)

[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
 
DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略
 
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
 
讓軟體開發與應用更自由 - 使用 Docker 技術
讓軟體開發與應用更自由 - 使用 Docker 技術讓軟體開發與應用更自由 - 使用 Docker 技術
讓軟體開發與應用更自由 - 使用 Docker 技術
 
.NET 7 家族新成員: Microsoft Orleans v7
.NET 7 家族新成員:Microsoft Orleans v7.NET 7 家族新成員:Microsoft Orleans v7
.NET 7 家族新成員: Microsoft Orleans v7
 
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
 
Docker tutorial
Docker tutorialDocker tutorial
Docker tutorial
 
icecream / icecc:分散式編譯系統簡介
icecream / icecc:分散式編譯系統簡介icecream / icecc:分散式編譯系統簡介
icecream / icecc:分散式編譯系統簡介
 
專題-2017Linux Driver 實現
專題-2017Linux Driver 實現專題-2017Linux Driver 實現
專題-2017Linux Driver 實現
 
Git安裝
Git安裝Git安裝
Git安裝
 
Artifacts management with CI and CD
Artifacts management with CI and CDArtifacts management with CI and CD
Artifacts management with CI and CD
 
twMVC#42 Azure DevOps Service Pipeline設計與非正常應用
twMVC#42 Azure DevOps Service Pipeline設計與非正常應用twMVC#42 Azure DevOps Service Pipeline設計與非正常應用
twMVC#42 Azure DevOps Service Pipeline設計與非正常應用
 
Linux Container Introduction
Linux Container IntroductionLinux Container Introduction
Linux Container Introduction
 
Asp.net mvc 6 新功能初探
Asp.net mvc 6 新功能初探Asp.net mvc 6 新功能初探
Asp.net mvc 6 新功能初探
 
把玩 Jenkins CI
把玩 Jenkins CI把玩 Jenkins CI
把玩 Jenkins CI
 
專案啟動與設定
專案啟動與設定專案啟動與設定
專案啟動與設定
 
ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索
 
Docker 101
Docker 101Docker 101
Docker 101
 
Asp.net core v1.0
Asp.net core v1.0Asp.net core v1.0
Asp.net core v1.0
 
Asp.net core v1.0
Asp.net core v1.0Asp.net core v1.0
Asp.net core v1.0
 

More from Bo-Yi Wu

Drone CI/CD 自動化測試及部署
Drone CI/CD 自動化測試及部署Drone CI/CD 自動化測試及部署
Drone CI/CD 自動化測試及部署Bo-Yi Wu
 
用 Go 語言打造多台機器 Scale 架構
用 Go 語言打造多台機器 Scale 架構用 Go 語言打造多台機器 Scale 架構
用 Go 語言打造多台機器 Scale 架構Bo-Yi Wu
 
Job Queue in Golang
Job Queue in GolangJob Queue in Golang
Job Queue in GolangBo-Yi Wu
 
Golang Project Layout and Practice
Golang Project Layout and PracticeGolang Project Layout and Practice
Golang Project Layout and PracticeBo-Yi Wu
 
Introduction to GitHub Actions
Introduction to GitHub ActionsIntroduction to GitHub Actions
Introduction to GitHub ActionsBo-Yi Wu
 
Drone 1.0 Feature
Drone 1.0 FeatureDrone 1.0 Feature
Drone 1.0 FeatureBo-Yi Wu
 
Drone CI/CD Platform
Drone CI/CD PlatformDrone CI/CD Platform
Drone CI/CD PlatformBo-Yi Wu
 
GraphQL IN Golang
GraphQL IN GolangGraphQL IN Golang
GraphQL IN GolangBo-Yi Wu
 
Go 語言基礎簡介
Go 語言基礎簡介Go 語言基礎簡介
Go 語言基礎簡介Bo-Yi Wu
 
drone continuous Integration
drone continuous Integrationdrone continuous Integration
drone continuous IntegrationBo-Yi Wu
 
Gorush: A push notification server written in Go
Gorush: A push notification server written in GoGorush: A push notification server written in Go
Gorush: A push notification server written in GoBo-Yi Wu
 
用 Go 語言 打造微服務架構
用 Go 語言打造微服務架構用 Go 語言打造微服務架構
用 Go 語言 打造微服務架構Bo-Yi Wu
 
Introduction to Gitea with Drone
Introduction to Gitea with DroneIntroduction to Gitea with Drone
Introduction to Gitea with DroneBo-Yi Wu
 
用 Go 語言實戰 Push Notification 服務
用 Go 語言實戰 Push Notification 服務用 Go 語言實戰 Push Notification 服務
用 Go 語言實戰 Push Notification 服務Bo-Yi Wu
 
用 Go 語言打造 DevOps Bot
用 Go 語言打造 DevOps Bot用 Go 語言打造 DevOps Bot
用 Go 語言打造 DevOps BotBo-Yi Wu
 
A painless self-hosted Git service: Gitea
A painless self-hosted Git service: GiteaA painless self-hosted Git service: Gitea
A painless self-hosted Git service: GiteaBo-Yi Wu
 
Write microservice in golang
Write microservice in golangWrite microservice in golang
Write microservice in golangBo-Yi Wu
 
PHP & JavaScript & CSS Coding style
PHP & JavaScript & CSS Coding stylePHP & JavaScript & CSS Coding style
PHP & JavaScript & CSS Coding styleBo-Yi Wu
 
Why to choose laravel framework
Why to choose laravel frameworkWhy to choose laravel framework
Why to choose laravel frameworkBo-Yi Wu
 
How to choose web framework
How to choose web frameworkHow to choose web framework
How to choose web frameworkBo-Yi Wu
 

More from Bo-Yi Wu (20)

Drone CI/CD 自動化測試及部署
Drone CI/CD 自動化測試及部署Drone CI/CD 自動化測試及部署
Drone CI/CD 自動化測試及部署
 
用 Go 語言打造多台機器 Scale 架構
用 Go 語言打造多台機器 Scale 架構用 Go 語言打造多台機器 Scale 架構
用 Go 語言打造多台機器 Scale 架構
 
Job Queue in Golang
Job Queue in GolangJob Queue in Golang
Job Queue in Golang
 
Golang Project Layout and Practice
Golang Project Layout and PracticeGolang Project Layout and Practice
Golang Project Layout and Practice
 
Introduction to GitHub Actions
Introduction to GitHub ActionsIntroduction to GitHub Actions
Introduction to GitHub Actions
 
Drone 1.0 Feature
Drone 1.0 FeatureDrone 1.0 Feature
Drone 1.0 Feature
 
Drone CI/CD Platform
Drone CI/CD PlatformDrone CI/CD Platform
Drone CI/CD Platform
 
GraphQL IN Golang
GraphQL IN GolangGraphQL IN Golang
GraphQL IN Golang
 
Go 語言基礎簡介
Go 語言基礎簡介Go 語言基礎簡介
Go 語言基礎簡介
 
drone continuous Integration
drone continuous Integrationdrone continuous Integration
drone continuous Integration
 
Gorush: A push notification server written in Go
Gorush: A push notification server written in GoGorush: A push notification server written in Go
Gorush: A push notification server written in Go
 
用 Go 語言 打造微服務架構
用 Go 語言打造微服務架構用 Go 語言打造微服務架構
用 Go 語言 打造微服務架構
 
Introduction to Gitea with Drone
Introduction to Gitea with DroneIntroduction to Gitea with Drone
Introduction to Gitea with Drone
 
用 Go 語言實戰 Push Notification 服務
用 Go 語言實戰 Push Notification 服務用 Go 語言實戰 Push Notification 服務
用 Go 語言實戰 Push Notification 服務
 
用 Go 語言打造 DevOps Bot
用 Go 語言打造 DevOps Bot用 Go 語言打造 DevOps Bot
用 Go 語言打造 DevOps Bot
 
A painless self-hosted Git service: Gitea
A painless self-hosted Git service: GiteaA painless self-hosted Git service: Gitea
A painless self-hosted Git service: Gitea
 
Write microservice in golang
Write microservice in golangWrite microservice in golang
Write microservice in golang
 
PHP & JavaScript & CSS Coding style
PHP & JavaScript & CSS Coding stylePHP & JavaScript & CSS Coding style
PHP & JavaScript & CSS Coding style
 
Why to choose laravel framework
Why to choose laravel frameworkWhy to choose laravel framework
Why to choose laravel framework
 
How to choose web framework
How to choose web frameworkHow to choose web framework
How to choose web framework
 

用 Docker 改善團隊合作模式

Editor's Notes

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