Submit Search
Upload
Continuous Delivery: automated testing, continuous integration and continuous deployment.
•
22 likes
•
2,411 views
Jimmy Lai
Follow
Continuous Delivery: automated testing, continuous integration and continuous deployment.
Read less
Read more
Technology
Report
Share
Report
Share
1 of 43
Download Now
Download to read offline
Recommended
Docker 基礎介紹與實戰
Docker 基礎介紹與實戰
Bo-Yi Wu
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
Wen-Tien Chang
Kafka in Depth
Kafka in Depth
YI-CHING WU
Continuous Delivery Workshop with Ansible x GitLab CI
Continuous Delivery Workshop with Ansible x GitLab CI
Chu-Siang Lai
Continuous Delivery with Ansible x GitLab CI
Continuous Delivery with Ansible x GitLab CI
Chu-Siang Lai
Software Engineer Talk
Software Engineer Talk
Larry Cai
Ansible 101
Ansible 101
YI-CHING WU
用 Docker 改善團隊合作模式
用 Docker 改善團隊合作模式
Bo-Yi Wu
More Related Content
What's hot
DAE 新变化介绍
DAE 新变化介绍
Tianwei Liu
Deployment with Capistrano
Deployment with Capistrano
旭 張
Scrum gathering 2012 Shanghai_精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)
Scrum gathering 2012 Shanghai_精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)
JoXuZi
Docker
Docker
旭 張
lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用
hugo
Scrum gathering 2012 shanghai 精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)
Scrum gathering 2012 shanghai 精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)
LetAgileFly
NF core-workflow
NF core-workflow
ChenzheLuo
JCConf2016 Jenkins Pipeline
JCConf2016 Jenkins Pipeline
Ching Yi Chan
快速上手 Windows Containers 容器技術 (Docker Taipei)
快速上手 Windows Containers 容器技術 (Docker Taipei)
Will Huang
前端工程師一定要知道的 Docker 虛擬化容器技巧
前端工程師一定要知道的 Docker 虛擬化容器技巧
Chu-Siang Lai
Visual Studio Code 快速上手指南
Visual Studio Code 快速上手指南
Shengyou Fan
從軟體開發角度 談 Docker 的應用
從軟體開發角度 談 Docker 的應用
謝 宗穎
docker intro
docker intro
koji lin
基于OpenResty的百万级长连接推送
基于OpenResty的百万级长连接推送
OpenRestyCon
Docker應用
Docker應用
Jui An Huang (黃瑞安)
Ansible introduction
Ansible introduction
Chyi-Shian Jiang
Apache Zookeeper 分布式服务框架
Apache Zookeeper 分布式服务框架
Cabin WJ
Laravel - 系統全攻略(續)
Laravel - 系統全攻略(續)
Vincent Chi
Rancher: 建立你的牧場艦隊
Rancher: 建立你的牧場艦隊
Miles Chou
現代 IT 人一定要知道的 Ansible 自動化組態技巧
現代 IT 人一定要知道的 Ansible 自動化組態技巧
Chu-Siang Lai
What's hot
(20)
DAE 新变化介绍
DAE 新变化介绍
Deployment with Capistrano
Deployment with Capistrano
Scrum gathering 2012 Shanghai_精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)
Scrum gathering 2012 Shanghai_精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)
Docker
Docker
lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用
Scrum gathering 2012 shanghai 精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)
Scrum gathering 2012 shanghai 精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)
NF core-workflow
NF core-workflow
JCConf2016 Jenkins Pipeline
JCConf2016 Jenkins Pipeline
快速上手 Windows Containers 容器技術 (Docker Taipei)
快速上手 Windows Containers 容器技術 (Docker Taipei)
前端工程師一定要知道的 Docker 虛擬化容器技巧
前端工程師一定要知道的 Docker 虛擬化容器技巧
Visual Studio Code 快速上手指南
Visual Studio Code 快速上手指南
從軟體開發角度 談 Docker 的應用
從軟體開發角度 談 Docker 的應用
docker intro
docker intro
基于OpenResty的百万级长连接推送
基于OpenResty的百万级长连接推送
Docker應用
Docker應用
Ansible introduction
Ansible introduction
Apache Zookeeper 分布式服务框架
Apache Zookeeper 分布式服务框架
Laravel - 系統全攻略(續)
Laravel - 系統全攻略(續)
Rancher: 建立你的牧場艦隊
Rancher: 建立你的牧場艦隊
現代 IT 人一定要知道的 Ansible 自動化組態技巧
現代 IT 人一定要知道的 Ansible 自動化組態技巧
Similar to Continuous Delivery: automated testing, continuous integration and continuous deployment.
Continuous integration
Continuous integration
netdbncku
Git&Github Tutorial
Git&Github Tutorial
Ting Wen Su
Git flow 與團隊合作
Git flow 與團隊合作
Bo-Yi Wu
把玩 Jenkins CI
把玩 Jenkins CI
Hao Lee
使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)
Max Lai
Version control0221
Version control0221
jianhongciou
Xpp
Xpp
drewz lin
钱宝坤:多浏览器集成的JavaScript单元测试工具
钱宝坤:多浏览器集成的JavaScript单元测试工具
taobao.com
Git 經驗分享
Git 經驗分享
Mu Chun Wang
广告技术部自动化测试介绍.pdf
广告技术部自动化测试介绍.pdf
bj_qa
Foundation of software development 1
Foundation of software development 1
netdbncku
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
Edward Kuo
Bitbucket pipeline CI
Bitbucket pipeline CI
Zero Huang
該怎麼樣(認真的)部署你的 Python Web 應用程式?
該怎麼樣(認真的)部署你的 Python Web 應用程式?
Andy Dai
持续交付最佳实践——百度技术沙龙201110
持续交付最佳实践——百度技术沙龙201110
Qiao Liang
Git Flow 管理
Git Flow 管理
Pu Lee
Git & git flow
Git & git flow
Amo Wu
Angular 4 網站開發最佳實務 (Modern Web 2017)
Angular 4 網站開發最佳實務 (Modern Web 2017)
Will Huang
Crashlytics 使用教學
Crashlytics 使用教學
ShengWen Chiou
CICD Workshop 20180922
CICD Workshop 20180922
Earou Huang
Similar to Continuous Delivery: automated testing, continuous integration and continuous deployment.
(20)
Continuous integration
Continuous integration
Git&Github Tutorial
Git&Github Tutorial
Git flow 與團隊合作
Git flow 與團隊合作
把玩 Jenkins CI
把玩 Jenkins CI
使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)
Version control0221
Version control0221
Xpp
Xpp
钱宝坤:多浏览器集成的JavaScript单元测试工具
钱宝坤:多浏览器集成的JavaScript单元测试工具
Git 經驗分享
Git 經驗分享
广告技术部自动化测试介绍.pdf
广告技术部自动化测试介绍.pdf
Foundation of software development 1
Foundation of software development 1
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
Bitbucket pipeline CI
Bitbucket pipeline CI
該怎麼樣(認真的)部署你的 Python Web 應用程式?
該怎麼樣(認真的)部署你的 Python Web 應用程式?
持续交付最佳实践——百度技术沙龙201110
持续交付最佳实践——百度技术沙龙201110
Git Flow 管理
Git Flow 管理
Git & git flow
Git & git flow
Angular 4 網站開發最佳實務 (Modern Web 2017)
Angular 4 網站開發最佳實務 (Modern Web 2017)
Crashlytics 使用教學
Crashlytics 使用教學
CICD Workshop 20180922
CICD Workshop 20180922
More from Jimmy Lai
Python Linters at Scale.pdf
Python Linters at Scale.pdf
Jimmy Lai
The journey of asyncio adoption in instagram
The journey of asyncio adoption in instagram
Jimmy Lai
Data Analyst Nanodegree
Data Analyst Nanodegree
Jimmy Lai
Distributed system coordination by zookeeper and introduction to kazoo python...
Distributed system coordination by zookeeper and introduction to kazoo python...
Jimmy Lai
Build a Searchable Knowledge Base
Build a Searchable Knowledge Base
Jimmy Lai
[LDSP] Solr Usage
[LDSP] Solr Usage
Jimmy Lai
[LDSP] Search Engine Back End API Solution for Fast Prototyping
[LDSP] Search Engine Back End API Solution for Fast Prototyping
Jimmy Lai
Text classification in scikit-learn
Text classification in scikit-learn
Jimmy Lai
Big data analysis in python @ PyCon.tw 2013
Big data analysis in python @ PyCon.tw 2013
Jimmy Lai
Text Classification in Python – using Pandas, scikit-learn, IPython Notebook ...
Text Classification in Python – using Pandas, scikit-learn, IPython Notebook ...
Jimmy Lai
Software development practices in python
Software development practices in python
Jimmy Lai
Fast data mining flow prototyping using IPython Notebook
Fast data mining flow prototyping using IPython Notebook
Jimmy Lai
Documentation with sphinx @ PyHug
Documentation with sphinx @ PyHug
Jimmy Lai
Apache thrift-RPC service cross languages
Apache thrift-RPC service cross languages
Jimmy Lai
NetworkX - python graph analysis and visualization @ PyHug
NetworkX - python graph analysis and visualization @ PyHug
Jimmy Lai
When big data meet python @ COSCUP 2012
When big data meet python @ COSCUP 2012
Jimmy Lai
Nltk natural language toolkit overview and application @ PyCon.tw 2012
Nltk natural language toolkit overview and application @ PyCon.tw 2012
Jimmy Lai
Nltk natural language toolkit overview and application @ PyHug
Nltk natural language toolkit overview and application @ PyHug
Jimmy Lai
More from Jimmy Lai
(18)
Python Linters at Scale.pdf
Python Linters at Scale.pdf
The journey of asyncio adoption in instagram
The journey of asyncio adoption in instagram
Data Analyst Nanodegree
Data Analyst Nanodegree
Distributed system coordination by zookeeper and introduction to kazoo python...
Distributed system coordination by zookeeper and introduction to kazoo python...
Build a Searchable Knowledge Base
Build a Searchable Knowledge Base
[LDSP] Solr Usage
[LDSP] Solr Usage
[LDSP] Search Engine Back End API Solution for Fast Prototyping
[LDSP] Search Engine Back End API Solution for Fast Prototyping
Text classification in scikit-learn
Text classification in scikit-learn
Big data analysis in python @ PyCon.tw 2013
Big data analysis in python @ PyCon.tw 2013
Text Classification in Python – using Pandas, scikit-learn, IPython Notebook ...
Text Classification in Python – using Pandas, scikit-learn, IPython Notebook ...
Software development practices in python
Software development practices in python
Fast data mining flow prototyping using IPython Notebook
Fast data mining flow prototyping using IPython Notebook
Documentation with sphinx @ PyHug
Documentation with sphinx @ PyHug
Apache thrift-RPC service cross languages
Apache thrift-RPC service cross languages
NetworkX - python graph analysis and visualization @ PyHug
NetworkX - python graph analysis and visualization @ PyHug
When big data meet python @ COSCUP 2012
When big data meet python @ COSCUP 2012
Nltk natural language toolkit overview and application @ PyCon.tw 2012
Nltk natural language toolkit overview and application @ PyCon.tw 2012
Nltk natural language toolkit overview and application @ PyHug
Nltk natural language toolkit overview and application @ PyHug
Continuous Delivery: automated testing, continuous integration and continuous deployment.
1.
Continuous Delivery: automated
testing, continuous integration and continuous deployment. 持續發佈:利⽤用⾃自動化測試與持續 集成來持續發佈⾼高品質的軟體 Jimmy Lai 2014.10.15 ! Jimmy Lai是⾃自然語⾔言處理與機器學習領域的 Python愛好者。 更多他的分享: http://www.slideshare.net/jimmy_lai/
2.
Outline 1. 持續發佈的概念
2. 持續發佈的⼯工具 3. 以Python專案為範例建構部署流⽔水 線 2
3.
Continuous Delivery 持續發佈
• 軟體發佈了才算做完了 • 只有commit程式碼還不算完成 • 提交程式碼到軟體發佈的過程必須完全⾃自動 化 • 可重複使⽤用的發佈與部署流程,以確保軟體 品質 • 程式碼與設定檔等產出必須要進⾏行版本控 制,以便快速的追蹤與回復 3
4.
Version Control 版本控制
• 需要版本控制的項⺫⽬目 • 原始碼 • 套件相依管理 • 系統參數設定 • 主流⼯工具: Git 4
5.
Continuous Integration 持續整合
• 在合作開發的團隊中,持續地將每個⼈人的變 更整合在⼀一起,越頻繁地整合就可以減少嚴 重的衝突發⽣生 • 要件: • 頻繁的commit原始碼 • ⾃自動化的測試 • 簡短的建置與測試週期,以及早獲得回饋 • 主流⼯工具: Jenkins 5
6.
Testing 測試 •
⾃自動化測試 • 單元測試: 針對function/class • 功能測試: 針對客⼾戶端需求 • 系統整合測試: 針對⼦子系統的整合 • 效能與覆載測試 • 安全性測試 • ⼿手動測試 • 探索性測試、使⽤用者接受度測試 • Python測試⼯工具: nosetests 6
7.
部署流⽔水線 1. 建置與單元測試(當commit程式碼時)
2. ⾃自動化的功能測試 3. 使⽤用者接受度測試(測試⼯工程師) 4. 發佈 過程中有任何錯誤即⾃自動通知開發者, 開發者應優先修復部署流⽔水線後再繼續 開發新功能 7
8.
Git版本控制 • 分散式版本控制
• 每⼀一台機器都有⼯工作⺫⽬目錄和版本資料 庫 • 每⼀一台機器的版本資料庫都可以與任 意機器同步 • 開發時先對本地資料庫進⾏行commit, 不需要網路連線 http://git-scm.com/ 8
9.
Git實務 • ⼯工作⺫⽬目錄
<-> 暫存區 <-> 版本資料庫 • ⼯工作⺫⽬目錄為某個版本分⽀支的狀態加上新的修改 • git add: 將檔案當前的狀態加⼊入暫存區 • git commit -m “commit message”: 將⺫⽬目前暫存區 當中的所有檔案更改儲存到版本資料庫 • git push origin master: 將當前分⽀支的本機更新推送 到遠端(origin)版本資料庫的master分⽀支 • git pull origin master: 將遠端(origin)版本資料庫的 master分⽀支的更新下載到當前⼯工作⺫⽬目錄分⽀支 http://git-scm.com/docs/gittutorial 9
10.
Git Code Review
• 透過Github的code review來確保軟體品質: 1. git checkout -b branch: 在本地建⽴立分⽀支並切換到該分⽀支 2. git commit: 在本地分⽀支提交變更 3. git push origin branch_a: 將變更推送到Github 4. 在Github建⽴立pull request 5. Reviewer進⾏行審查 6. 審查修改完善後將branch merge回master • master branch⽤用來發佈軟體,新的修改都先在其他分⽀支 進⾏行,經過審查後才merge • Code Review有助於團隊成員互相學習並提⾼高程式碼品質 http://nvie.com/posts/a-successful-git-branching-model/ 10
11.
Git Code Review
Demo https://github.com/jimmylai/continuous_delivery_demo
12.
Git Code Review
範例 • 需求: 撰寫設定系統套件的Makefile, 並進⾏行Code Review • 步驟: 1. 於git建⽴立新分⽀支 2. 在新分⽀支提交修改 3. 更新到github後,建⽴立pull request 4. Review確認後merge 12
13.
13 Committed Changes
Create a pull request
14.
14 Activity Stream
15.
Post Review Message
15
16.
Update According to
the Comments 16 Merge
17.
17 Merged
18.
單元測試 • 單元測試:
對程式碼單元(funtion, class)進 ⾏行撰寫測試案例 • 被測試的程式碼必須要減少與其他程式碼 的相依性才容易測試,通常可以透過適當 的封裝函數來達成。必要時必須要利⽤用 Mock技術來隔離相依性,例如呼叫資料 庫連線、外部IO. • Python測試⼯工具nosetest 18
19.
Unit Test with
nosetests https://github.com/jimmylai/continuous_delivery_demo/tree/ master/web/calculator
20.
Unit Test with
nosetests範例 • 需求: 撰寫⼀一個函式,有兩個整數作為 參數,回傳兩個參數相加之和 • 步驟: 1. 撰寫函式 2. 利⽤用doctest做為說明及測試 3. 撰寫測試函數 20
21.
Unit test with
Nosetest doctest: 作為函式說明範例,也是單元測試 21
22.
將測試檔案以xxx_test.py命名, 測試函式以! test_xxx()命名,
nosetests就會找出來執⾏行 22
23.
功能測試 • 針對客⼾戶端要求的功能進⾏行驗證,測試
的對象可能是由數個元件組成的系統 • 針對不同界⾯面的系統需要使⽤用不同的⽅方 式來測試,例如網⾴頁就必須以瀏覽器來 測試才完整 • 範例: 基於先前的add( ), 提供⼀一個⽤用來 進⾏行加法RESTful API, 針對輸⼊入進⾏行檢 查,計算後回傳結果 23
24.
Functional Test of
RESTful API https://github.com/jimmylai/continuous_delivery_demo/tree/ master/functional_tests
25.
Functional Test of
RESTful API 範例 • 需求: 實作⼀一個Restful API, 透過HTTP GET 輸⼊入兩個參數, 呼叫前⼀一範例的add( )進⾏行加 總, 以json格式回傳結果 • 步驟: 1. 使⽤用Django rest framework撰寫API 2. 驗證輸⼊入的兩個參數存在且為整數 3. 將運算結果回傳 4. 測試客⼾戶端送出HTTP GET request來 進⾏行測試 25
26.
Django RESTful API
- View 26
27.
functional test 27
28.
28 start web
server functional test test successfully
29.
Jenkins • 廣受歡迎的持續整合軟體
• 根據設定的條件(如提交程式碼時、定 時排程)觸發建置,如建置發⽣生錯誤便 ⽴立即通知開發者,建置順利可繼續下⼀一 階段建制或⾃自動發佈 • 建置的結果報表以網⾴頁的⽅方式呈現 • 建置的過程與產出皆有存檔,⽅方便回溯 http://jenkins-ci.org/ 29
30.
Unitest when Commits
with Jenkins
31.
Unitest when Commits
with Jenkins範例 • 需求:透過Jenkins Job, 當有新的程式 碼被提交時, 便⾃自動運⾏行unit test, 輸出 測試結果報表 • 步驟: 1. 設定Jenkins Job與Github的授權 2. 設定當有新的change時, 由Github 觸發Jenkins 3. 設定測試結果報表資訊 31
32.
Github access with
ssh key auth 32
33.
Jenkins settings build
when new changes come in Github settings 33
34.
Unit test coverage
Unit test report 34
35.
35
36.
⾃自動部署 • ⾃自動將建置好的軟體安裝與設定到不
同的環境,進⾏行後續的測試、交付產 品 • 不同的環境可能有不同的系統相依套 件、不同的設定 • 設定檔與部署程式都應進⾏行版本控制 36
37.
Deploy after Unit
Tests Success
38.
Deploy after Unit
Tests Success範例 • 需求: 使⽤用Apache作為Web server, 設 定Jenkins Job當unit test完成後, 發佈 到Apache Server • 步驟: 1. 準備Apache設定檔 2. 準備deploy scripts 3. 設定Jenkins job 38
39.
Apache Config 39
40.
Jenkins Setting 40
Deploy script
41.
部署流⽔水線 1. unittest:
由⼯工程師提交程式碼觸發 2. deploy 3. functional test 4. release, … 過程中有任何錯誤即⾃自動通知開發者, 開發者應優先修復部署流⽔水線後再繼續 開發新功能 41
42.
42
43.
43
Download Now