Weitere ähnliche Inhalte Ähnlich wie Continuous integration Ähnlich wie Continuous integration (20) Continuous integration1. Software Development for Large
and Open Source Projects
Kun‐Ta Chuang
Department of Computer Science and Information Engineering
National Cheng Kung University
1
2. Agenda
• 軟體自動化(Continuous Integration)流程簡介
– 為什麼需要軟體持續整合
– 軟體開發情境模擬
– CI的架構與範疇
– CI通用原則
• 跟軟體開發流程工具結合
– Version Control
– Auto‐Build
– Auto‐Testing
• CI範例介紹
– CruiseControl安裝與使用
– CruiseControl使用
• 完整實例展示
• 結論
2
3. Agenda
• 軟體自動化(Continuous Integration)流程簡介
– 為什麼需要軟體持續整合
– 軟體開發情境模擬
– CI的架構與範疇
– CI通用原則
• 跟軟體開發流程工具結合
– Version Control
– Auto‐Build
– Auto‐Testing
• CI範例介紹
– CruiseControl安裝與使用
– CruiseControl使用
• 完整實例展示
• 結論
3
8. 軟體開發情境模擬
情境1
• Ben : 我發現我的程式在local端可以跑, 但是在
server端卻執行錯誤。
• John : 你有檢查你的code有發生錯誤嗎?
• Ben : 我已經完整check一遍了,且測試結果也都沒
問題。
• John : 恩~我發現問題了,你的JDK是用舊的java版
本,沒有更新。
• Ben : ....
8
9. 軟體開發情境模擬
情境1
• Solution 1
– 可以使用可以判斷版本是否符合的build 軟體,
如Maven。
• Solution 2
– 除了程式碼,也將專案用到相關檔案放進版本
控管容器。
9
10. 軟體開發情境模擬
情境II
• Ben : 你在做什麼?
• John : 我在等待最新程式碼上傳,因為之前程
式碼有問題,還在修改中..
• Ben : 最新程式碼在兩天前已經上傳,你不知
道嗎?
• John : 沒有耶!!當時我不在我的辦公室..
10
11. 軟體開發情境模擬
情境II
• Solution
– CI server可以幫忙解決這類問題,每當專案
build fail,或者於版本控管容器有新的更新時,
server便會自動寄電子郵件訊息給所有專案相
關人員。
– 甚至也可加入SMS notification將文字訊息傳送
到手機上面進行提醒。
11
12. 軟體開發情境模擬
情境III
• Ben : 我發現有一個程式上的bug,但是我
查看近幾天程式更新的地方,似乎都沒發
現到什麼問題..
• John : 那可能要追到更早以前的更新去檢
查看看。
• Ben : ……….那不知道要檢查多久耶...
12
13. 軟體開發情境模擬
情境III
• Solution
– 透過持續整合的機制,每當server偵測到容器
有更新時,系統便會自動進行build,及時將結
果輸出。
– 一旦發現build失敗,有極大的機率是這次更新
的地方發生問題或引發相關的衝突,便能盡早
解決。
13
14. CI的架構與範疇
Quoted from P. M. Duvall, et al., Continuous Integration: Improving Software Quality and
Reducing Risk, 2007 14
16. CI的架構與範疇
• 你需要的整合工具
– 需要一個程式的版本控管容器(git, svn…)
– 自動建置工具(Ant, Maven…)
– 測試自動化工具
• 還有CI平台
– 各種檢查工具產生的分析結果,轉換成圖表、網頁、
存入資料庫
– 將結果通知團隊成員,觀察趨勢,可與上一次分析結
果比較
– 將多個專案用透明化且數據化的方式管理,呈現系統
即時品質,找出專案管理、系統設計、瑕疵追蹤等等
重要的趨勢
16
18. CI通用原則
• 團隊共識
– 不能也不會從版本控制容器get到不能執行的程式
• 只要get下來就應該要可以build,如果不能build ,應該
是自已環境的問題
– 如果測試失敗,每個成員都會知道,並可在最短
時間內修復
– 降低工程師自行撰寫測試程式的門檻,由工程師
自行做第一關的軟體測試方能把關
– 新程式碼必須通過品質的指標門檻與測試結果才
可以check‐in
– 團隊每個人均有良好的check‐in、check‐out、
private build習慣
• 如”程式碼的衝突必須先行解決(resolve)方能check‐in”
• 如”不在下班前一小時才check‐in程式碼”
18
19. CI通用原則
• Build機制
– (1) On-demand : 由使用者驅動之程序,主要由使用
者初始化整合build。
– (2) Schedule : 由時間來驅動,固定一段時間執行一
次build。
– (3) Poll for changes : 每隔一段時間檢查是否有更改,
如有則執行build。
– (4) Event-driven : 由某件事件驅動build,比如說 : 當
重新定義事件發生,則執行build。
Build Type Build 機制
Private (1)
Integration (1)(2)(3)(4)
Release (1)(2) 19
20. CI通用原則
• 時常觀察專案健康度 (Hudson)
直接由Hudson以圖表方
式檢視程式test結果
20
http://www.peterfranza.com/2008/09/26/comparison‐of‐continuous‐integration‐servers/
21. CI通用原則
時常觀察專案健康度 (Jenkins)
檢視程式狀態與測試結果
https://builds.apache.org/
21
22. CI通用原則
時常觀察專案健康度 (Jenkins)
可觀察所有人是否有建置
22
23. Agenda
• 軟體自動化(Continuous Integration)流程簡介
– 為什麼需要軟體持續整合
– 軟體開發情境模擬
– CI的架構與範疇
– CI通用原則
• 跟軟體開發流程工具結合
– Version Control
– Auto‐Build
– Auto‐Testing
• CI範例介紹
– CruiseControl安裝與使用
– CruiseControl使用
• 完整實例展示
• 結論
23
24. 軟體開發工具整合
• 版本控管 (Version Control)
– 必備三元素
• 保留修訂記錄。
• 連結性。
• 不可分割的交易。
– Famous Version Control
System( VCS)
• git
• Mercurial
• subversion(svn)
• cvs
• perforce
24
26. 軟體開發工具整合
版本控管工具
◦ Demonstration from Mozilla
26
http://hg.mozilla.org/mozilla‐central/graph
28. 軟體開發工具整合
• 自動建置(Auto‐Build)
– 什麼是建置 ‐ 包含編譯(compile)、測試(testing)、
檢查(inspection)、佈署(deployment)等等動作。
– 自動建置機制
• 撰寫build script,系統會依此自動的建置專案
• 常見的自動建置工具
– gmake/icecream
– Avanced build tools (XML‐based build script)
• Ant/Maven (Project Object Model)
28
31. 軟體開發工具整合
• 軟體測試
– 單元測試 (Unit Testing)
– 元件測試 (Component Testing)
– 系統測試 (System Testing)
– 功能測試 (Function Testing)
– 壓力測試,回歸測試 (Regression Testing)
– 整合測試 (Integration Testing)
– Smoke Testing
– …
• 用於維持軟體可靠度
31
34. 軟體開發工具整合
可觀察
成功/錯誤/失敗
Test Packages
Test Suites
Test Cases
34
37. Agenda
• 軟體自動化(Continuous Integration)流程簡介
– 為什麼需要軟體持續整合
– 軟體開發情境模擬
– CI的架構與範疇
– CI通用原則
• 跟軟體開發流程工具結合
– Version Control
– Auto‐Build
– Auto‐Testing
• CI範例介紹
– CruiseControl安裝與使用
– CruiseControl使用
• 完整實例展示
• 結論
37
38. CI範例介紹
• CruiseControl
– 為Open source 軟體,架設也較為容易。
– 比較容易和第三方管理工具軟體整合。
– 對於建構失敗時,系統傳送給使用者之資訊,比其
他CI軟體還要來的詳細
• 其它CI平台
– Tinderbox: Perl‐based CI used in Mozilla products
– Buildbot: Python‐based
– Hudson: Java‐based
– Jenkins: Java‐based
– …
38
39. CI範例介紹
• 1. 到此網址下載cruisecontrol‐bin‐xxx 版本檔案。
http://cruisecontrol.sourceforge.net/ 39
40. CI範例介紹
• 2. 確認系統有安裝至少Java 1.4以上的版本。請注意CruiseControl是Java‐based
Application:請指定JAVA_HOME變數。
40
41. CI範例介紹
• 3. 將於Step(1) 所下載的檔案解壓縮到想要的目錄,並執行cruisecontrol.bat。
(可以發現裡面已經有Ant的build軟體)。
41
42. CI範例介紹
• 4. 到瀏覽器輸入http://localhost:8080/dashboard 可看到dashboard
42
45. CI範例介紹
• 6. 將特定程式故意改錯,一旦CI的build時間一到,並偵測到修改紀錄,
便會進行build,以下為顯示錯誤之訊息。(目前將Cell.java其中一行
code的冒號拿掉進行測試)
45
48. Agenda
• 軟體自動化(Continuous Integration)流程簡介
– 為什麼需要軟體持續整合
– 軟體開發情境模擬
– CI的架構與範疇
– CI通用原則
• 跟軟體開發流程工具結合
– Version Control
– Auto‐Build
– Auto‐Testing
• CI範例介紹
– CruiseControl安裝與使用
– CruiseControl使用
• 完整實例展示
• 結論
48
52. 完整實例展示
所有名稱Test結尾的
類別檔都會進行測試
52
58. 結論
• CI是軟體品質的確認平台
– 將其他每個維持品質的工具組織起來,透過不斷
的持續監控整合及品質問題,即時回報狀態給所
有成員
– 即使不懂技術的管理者,可以光看報表就知道系
統的健康狀況
– 團隊開發時可以及早發現,在整合上是否有所問
題
– 團隊每個人可以隨時了解專案目前的狀況,各方
面軟體品質的資訊都是透明的
• CI也可以說是一個中大型軟體團隊不得不依賴
的機制
– 協助明確分工
– 協助時程管理
58