使用Hudson打造屬於你自己的軟體建構機器人

98
使用Hudson打造你專屬軟體建構機器人 嵌藝創研軟體科技簡茂仰 http://www.esast.com 11年8月1日星期

description

在軟體開發團隊,軟體自動建構在軟體開發過程中可以說是扮演非常重要的角色,它是軟體交付到測試者/使用者手中的最後一里, 但也是最繁複的一個過程, 學會了Hudson可以讓你輕鬆將軟體建構化繁為簡,它將成為你團隊中成本最低的好幫手. 在這個一小時中, 將與你分享Hudoson軟體功能,使用教戰守則, 讓你的軟體輕鬆走出軟體開發團隊的大門.

Transcript of 使用Hudson打造屬於你自己的軟體建構機器人

Page 1: 使用Hudson打造屬於你自己的軟體建構機器人

使用Hudson打造你專屬軟體建構機器人嵌藝創研軟體科技簡茂仰http://www.esast.com

11年8月1日星期⼀一

Page 2: 使用Hudson打造屬於你自己的軟體建構機器人

我是誰??

• MaoYang/茂仰

• 曾任某職於機械自動化公司• 專長: 專案管理/軟體開發

• 軟體開發團隊心得分享粉絲專頁板主

• 嵌藝創研軟體科技Co-Founder, 主要業務CodeBeamer代理與應用 http://cb.esast.com

11年8月1日星期⼀一

Page 3: 使用Hudson打造屬於你自己的軟體建構機器人

更多關於我

•http://gplus.to/maoyang

11年8月1日星期⼀一

Page 4: 使用Hudson打造屬於你自己的軟體建構機器人

Agenda

• Why Hudson??

• 故事起點:工程師10大藉口第⼀一名

• eXtreme Programming

• 什麼是CI??

• 開始使用Hudson

• 開始使用Hudson/⼀一個簡單的Java建構與自動單元測試範例

• Hudson實務與技巧

11年8月1日星期⼀一

Page 5: 使用Hudson打造屬於你自己的軟體建構機器人

為什麼要使用Hudson來建構軟體??

我會用Eclipse/NetBean編譯軟體

11年8月1日星期⼀一

Page 6: 使用Hudson打造屬於你自己的軟體建構機器人

在我的機器明明就可以動啊!

程式設計師常見藉口第⼀一名

來源

11年8月1日星期⼀一

Page 7: 使用Hudson打造屬於你自己的軟體建構機器人

實際案例

• A工程師可以編譯成功, B工程師卻失敗

• 專案快結案了, 所有的code⼀一起編譯後, Bug解不完-->專案Delay元兇之⼀一

11年8月1日星期⼀一

Page 8: 使用Hudson打造屬於你自己的軟體建構機器人

Yes, We can Change

11年8月1日星期⼀一

Page 9: 使用Hudson打造屬於你自己的軟體建構機器人

解決方案?

11年8月1日星期⼀一

Page 10: 使用Hudson打造屬於你自己的軟體建構機器人

你的團隊需要⼀一個標準的自動持續整合伺服器

解決方案?

11年8月1日星期⼀一

Page 11: 使用Hudson打造屬於你自己的軟體建構機器人

兩個極端的案例XD

11年8月1日星期⼀一

Page 12: 使用Hudson打造屬於你自己的軟體建構機器人

兩個極端的案例XD

11年8月1日星期⼀一

Page 13: 使用Hudson打造屬於你自己的軟體建構機器人

兩個極端的案例XD

11年8月1日星期⼀一

Page 14: 使用Hudson打造屬於你自己的軟體建構機器人

兩個極端的案例XD

林董內心OS:請款還是自己簽名11年8月1日星期⼀一

Page 15: 使用Hudson打造屬於你自己的軟體建構機器人

為什麼選Hudson??

• 使用Java開發

• 海(Hudson)能納百川(Plugins), 故能成其大

• 視覺化報表• 跨OS Build Farm支援

11年8月1日星期⼀一

Page 16: 使用Hudson打造屬於你自己的軟體建構機器人

什麼是持續整合(CI)?

11年8月1日星期⼀一

Page 17: 使用Hudson打造屬於你自己的軟體建構機器人

什麼是持續整合(CI)?

需求/變更

11年8月1日星期⼀一

Page 18: 使用Hudson打造屬於你自己的軟體建構機器人

什麼是持續整合(CI)?

需求/變更

11年8月1日星期⼀一

Page 19: 使用Hudson打造屬於你自己的軟體建構機器人

什麼是持續整合(CI)?

寫程式

需求/變更

11年8月1日星期⼀一

Page 20: 使用Hudson打造屬於你自己的軟體建構機器人

什麼是持續整合(CI)?

寫程式

需求/變更

11年8月1日星期⼀一

Page 21: 使用Hudson打造屬於你自己的軟體建構機器人

什麼是持續整合(CI)?

寫程式

編譯與單元測試

需求/變更

11年8月1日星期⼀一

Page 22: 使用Hudson打造屬於你自己的軟體建構機器人

什麼是持續整合(CI)?

寫程式

編譯與單元測試

需求/變更

11年8月1日星期⼀一

Page 23: 使用Hudson打造屬於你自己的軟體建構機器人

什麼是持續整合(CI)?

寫程式

編譯與單元測試 測試

需求/變更

11年8月1日星期⼀一

Page 24: 使用Hudson打造屬於你自己的軟體建構機器人

什麼是持續整合(CI)?

寫程式

編譯與單元測試 測試

需求/變更

11年8月1日星期⼀一

Page 25: 使用Hudson打造屬於你自己的軟體建構機器人

什麼是持續整合(CI)?

寫程式

編譯與單元測試 測試

問題回饋

需求/變更

11年8月1日星期⼀一

Page 26: 使用Hudson打造屬於你自己的軟體建構機器人

什麼是持續整合(CI)?

寫程式

編譯與單元測試 測試

問題回饋

需求/變更

11年8月1日星期⼀一

Page 27: 使用Hudson打造屬於你自己的軟體建構機器人

什麼是持續整合(CI)?

寫程式

編譯與單元測試

重構/解Bug

測試

問題回饋

需求/變更

11年8月1日星期⼀一

Page 28: 使用Hudson打造屬於你自己的軟體建構機器人

什麼是持續整合(CI)?

寫程式

編譯與單元測試

重構/解Bug

測試

問題回饋

需求/變更

11年8月1日星期⼀一

Page 29: 使用Hudson打造屬於你自己的軟體建構機器人

什麼是持續整合(CI)?

寫程式

編譯與單元測試

重構/解Bug

測試

問題回饋

需求/變更

11年8月1日星期⼀一

Page 30: 使用Hudson打造屬於你自己的軟體建構機器人

什麼是持續整合(CI)?

寫程式

編譯與單元測試

重構/解Bug

測試

問題回饋

發佈

需求/變更

11年8月1日星期⼀一

Page 31: 使用Hudson打造屬於你自己的軟體建構機器人

什麼是持續整合(CI)?

寫程式

編譯與單元測試

重構/解Bug

測試

問題回饋

發佈

需求/變更

11年8月1日星期⼀一

Page 32: 使用Hudson打造屬於你自己的軟體建構機器人

什麼是持續整合(CI)?

寫程式

編譯與單元測試

重構/解Bug

測試

問題回饋

發佈

需求/變更

11年8月1日星期⼀一

Page 33: 使用Hudson打造屬於你自己的軟體建構機器人

eXtreme Programming

1. 規劃遊戲2. 小量發行

3. 簡單的設計4. 測試

5. 持續性的整合-Continuous Integration

6. 重整

7.雙人組程式設計

8.程式碼共有

9.每週工作40小時10.客戶隨時在旁

11.隱喻 12.程式碼標準

11年8月1日星期⼀一

Page 34: 使用Hudson打造屬於你自己的軟體建構機器人

導入CI的等級

11年8月1日星期⼀一

Page 35: 使用Hudson打造屬於你自己的軟體建構機器人

導入CI的等級沒有CI伺服器

LEVEL 1

11年8月1日星期⼀一

Page 36: 使用Hudson打造屬於你自己的軟體建構機器人

導入CI的等級沒有CI伺服器

LEVEL 1

每天排程BuildLEVEL 2

11年8月1日星期⼀一

Page 37: 使用Hudson打造屬於你自己的軟體建構機器人

導入CI的等級沒有CI伺服器

LEVEL 1

每天排程BuildLEVEL 2

Build & 單元測試LEVEL 3

11年8月1日星期⼀一

Page 38: 使用Hudson打造屬於你自己的軟體建構機器人

導入CI的等級沒有CI伺服器

LEVEL 1

每天排程BuildLEVEL 2

Build & 單元測試LEVEL 3

源碼靜態解析與度量LEVEL 4

11年8月1日星期⼀一

Page 39: 使用Hudson打造屬於你自己的軟體建構機器人

導入CI的等級沒有CI伺服器

LEVEL 1

每天排程BuildLEVEL 2

Build & 單元測試LEVEL 3

源碼靜態解析與度量LEVEL 4

建構參數化與Matrix建構LEVEL 5

11年8月1日星期⼀一

Page 40: 使用Hudson打造屬於你自己的軟體建構機器人

導入CI的等級沒有CI伺服器

LEVEL 1

每天排程BuildLEVEL 2

Build & 單元測試LEVEL 3

源碼靜態解析與度量LEVEL 4

建構參數化與Matrix建構LEVEL 5

可接受測試與GUI自動測試LEVEL 6

11年8月1日星期⼀一

Page 41: 使用Hudson打造屬於你自己的軟體建構機器人

導入CI的等級沒有CI伺服器

LEVEL 1

每天排程BuildLEVEL 2

Build & 單元測試LEVEL 3

源碼靜態解析與度量LEVEL 4

建構參數化與Matrix建構LEVEL 5

可接受測試與GUI自動測試LEVEL 6

持續佈署LEVEL 7

11年8月1日星期⼀一

Page 42: 使用Hudson打造屬於你自己的軟體建構機器人

開始使用Hudson

• java -jar hudson.jar --httpPort=9090

11年8月1日星期⼀一

Page 43: 使用Hudson打造屬於你自己的軟體建構機器人

Demo網路架構

11年8月1日星期⼀一

Page 44: 使用Hudson打造屬於你自己的軟體建構機器人

Hudson 使用流程• 設定Hudson編譯環境

• 撰寫Build Script

• 新增Build Jobs

• 設定SCM連接->SVN/Git/Mercurial

• 設定Build Target

• 手動測試• 檢視Build報告

11年8月1日星期⼀一

Page 45: 使用Hudson打造屬於你自己的軟體建構機器人

設定Hudson編譯環境

• JDK

• ANT or Maven

11年8月1日星期⼀一

Page 46: 使用Hudson打造屬於你自己的軟體建構機器人

JDK

11年8月1日星期⼀一

Page 47: 使用Hudson打造屬於你自己的軟體建構機器人

ANT

11年8月1日星期⼀一

Page 48: 使用Hudson打造屬於你自己的軟體建構機器人

開發者端的準備

• 為專案寫Build Script , 例如Ant

• 將專案與Build Script push到SCM Server

Junit原理與範例可參考http://caterpillar.onlyfun.net/Gossip/JUnit/index.html

11年8月1日星期⼀一

Page 49: 使用Hudson打造屬於你自己的軟體建構機器人

Demo ANT Target 說明

• ant test 編譯與單元測試

• ant reports 編譯,單元測試,與產生單元測試xml報表檔案

11年8月1日星期⼀一

Page 50: 使用Hudson打造屬於你自己的軟體建構機器人

設定SCM Plugin

• Hudson已經內建CVS/SVN/Git等Plugin

11年8月1日星期⼀一

Page 51: 使用Hudson打造屬於你自己的軟體建構機器人

安裝報表Plugins

• JUnit-已內建

11年8月1日星期⼀一

Page 52: 使用Hudson打造屬於你自己的軟體建構機器人

新增Job

11年8月1日星期⼀一

Page 53: 使用Hudson打造屬於你自己的軟體建構機器人

新增Job選用Free-Style

software project

11年8月1日星期⼀一

Page 54: 使用Hudson打造屬於你自己的軟體建構機器人

設定SCM

11年8月1日星期⼀一

Page 55: 使用Hudson打造屬於你自己的軟體建構機器人

執行Build Job

11年8月1日星期⼀一

Page 56: 使用Hudson打造屬於你自己的軟體建構機器人

設定JUnit報表

11年8月1日星期⼀一

Page 57: 使用Hudson打造屬於你自己的軟體建構機器人

手動測試

11年8月1日星期⼀一

Page 58: 使用Hudson打造屬於你自己的軟體建構機器人

排程例如, 如果要設定每天凌晨⼀一點零分開始執行Build Job, 可以設定如下0 1 * * *

11年8月1日星期⼀一

Page 59: 使用Hudson打造屬於你自己的軟體建構機器人

什麼時候Build會啟動??

• 排程• 外部程式驅動-> scm hook

• ⼀一個Build Job完成後驅動另⼀一個Build Job

• 手動

11年8月1日星期⼀一

Page 60: 使用Hudson打造屬於你自己的軟體建構機器人

Build報表檢視

11年8月1日星期⼀一

Page 61: 使用Hudson打造屬於你自己的軟體建構機器人

實機操作Demo

11年8月1日星期⼀一

Page 62: 使用Hudson打造屬於你自己的軟體建構機器人

恭喜你的CI等級已經達到Level 3

11年8月1日星期⼀一

Page 63: 使用Hudson打造屬於你自己的軟體建構機器人

測試覆蓋率??

11年8月1日星期⼀一

Page 64: 使用Hudson打造屬於你自己的軟體建構機器人

Ant +JUnit+Cobertura

• 使用Ant在Hudson端必須設定Cobertura的Ant Task 與 Junit Ant Task 請參考http://cobertura.sourceforge.net/ &http://caterpillar.onlyfun.net/Gossip/JUnit/index.html

11年8月1日星期⼀一

Page 65: 使用Hudson打造屬於你自己的軟體建構機器人

Cobertura Plugin

• 安裝Cobertura Plugin

11年8月1日星期⼀一

Page 66: 使用Hudson打造屬於你自己的軟體建構機器人

Cobertura Plugin

• 安裝Cobertura Plugin安裝Plugin後

Hudson必須重新啟動

11年8月1日星期⼀一

Page 67: 使用Hudson打造屬於你自己的軟體建構機器人

設定Cobertura報表

11年8月1日星期⼀一

Page 68: 使用Hudson打造屬於你自己的軟體建構機器人

完整的範例與安裝http://cb.esast.com/cb/wiki/34766

11年8月1日星期⼀一

Page 69: 使用Hudson打造屬於你自己的軟體建構機器人

Hudson實務與技巧

11年8月1日星期⼀一

Page 70: 使用Hudson打造屬於你自己的軟體建構機器人

選擇版本控制伺服器

• CVS : 不建議使用

• Subversion

• Git

• Mercurial

11年8月1日星期⼀一

Page 71: 使用Hudson打造屬於你自己的軟體建構機器人

選擇版本控制伺服器

• CVS : 不建議使用

• Subversion

• Git

• Mercurial支援Change Set更新較快

11年8月1日星期⼀一

Page 72: 使用Hudson打造屬於你自己的軟體建構機器人

Polling or Trigger

• Polling: 使用排程, 當要快速回饋時, Build間隔時間必須縮短-對Server or 網路負擔大

• Trigger: 當code commit, 使用Hook來驅動遠端Hudson的Build Job

11年8月1日星期⼀一

Page 73: 使用Hudson打造屬於你自己的軟體建構機器人

Polling or Trigger

• Polling: 使用排程, 當要快速回饋時, Build間隔時間必須縮短-對Server or 網路負擔大

• Trigger: 當code commit, 使用Hook來驅動遠端Hudson的Build Job

http://SERVER/hudson/job/PROJECTNAME/build

11年8月1日星期⼀一

Page 74: 使用Hudson打造屬於你自己的軟體建構機器人

Build Script選擇

• Ant: 簡單易入門

• Maven: 對於套件的相依性管理佳

• Groovy : 要使用較複雜的Build邏輯, 撰寫較簡單

11年8月1日星期⼀一

Page 75: 使用Hudson打造屬於你自己的軟體建構機器人

版本資訊同步

• 每次的Build要將Version的資訊寫入產出的Build

• 在軟體的介面可以看出Build的版本資訊

11年8月1日星期⼀一

Page 76: 使用Hudson打造屬於你自己的軟體建構機器人

版本不⼀一致的案例

11年8月1日星期⼀一

Page 77: 使用Hudson打造屬於你自己的軟體建構機器人

Build版本顯示

<target name="version"> <typedef resource="com/googlecode/svntask/svntask.xml"> <classpath> <fileset dir="/usr/share/ant/lib"> <include name="svnkit.jar"/> <include name="svntask.jar"/> </fileset> </classpath> </typedef> <svn><info path="." revisionProperty="revisionVersion" /></svn> <property name="version" value="${revisionVersion}" /> <echo>Version:${version}</echo> <propertyfile file="${plugin.install.dir}/data/resources/buildrevision.inc"> <entry key="BuildRevision" value="${version}" /> </propertyfile> </target>

11年8月1日星期⼀一

Page 78: 使用Hudson打造屬於你自己的軟體建構機器人

Build失敗通知

• E-Mail

• Twitter

• MSN

圖片來源 :https://wiki.jenkins-ci.org/display/JENKINS/Hudson+Build+Status+Lava+Lamps

11年8月1日星期⼀一

Page 79: 使用Hudson打造屬於你自己的軟體建構機器人

源碼品質與Code Review

• FindBugs

• PMD

• CPD

• CheckStyle

11年8月1日星期⼀一

Page 80: 使用Hudson打造屬於你自己的軟體建構機器人

PMD

11年8月1日星期⼀一

Page 81: 使用Hudson打造屬於你自己的軟體建構機器人

FindBugs

11年8月1日星期⼀一

Page 82: 使用Hudson打造屬於你自己的軟體建構機器人

Build產出發佈

• Build好的檔案可以自動發佈到FTP Server

• Build的檔案最好與Release report放在⼀一起

• 自動Deploy到測試環境, 例如JBoss有專屬的佈署Plugin

11年8月1日星期⼀一

Page 83: 使用Hudson打造屬於你自己的軟體建構機器人

Build Job切割

• Hudson有支援Build Job關連

• 較費時的Build(源碼分析)建議切割參考 http://wiki.hudson-ci.org/display/HUDSON/Splitting+a+big+job+into+smaller+jobs

11年8月1日星期⼀一

Page 84: 使用Hudson打造屬於你自己的軟體建構機器人

Master/Slave架構

• 專案要支援⼀一種以上OS, 可使用Master/Slave架構

11年8月1日星期⼀一

Page 85: 使用Hudson打造屬於你自己的軟體建構機器人

參數化建構

• 指定要Build那⼀一個Tag(SVN tag or Git tag)

11年8月1日星期⼀一

Page 86: 使用Hudson打造屬於你自己的軟體建構機器人

Matrix Build

• 同⼀一份程式碼要在不同的JDK版本測試

• 同⼀一份程式碼要在不同的OS測試

• 同⼀一份程式碼要在不同的DB測試

1.6 1.5

Win Pass Fail

Linux Pass Pass

11年8月1日星期⼀一

Page 87: 使用Hudson打造屬於你自己的軟體建構機器人

Hudson整合經驗分享

11年8月1日星期⼀一

Page 88: 使用Hudson打造屬於你自己的軟體建構機器人

網路架構

11年8月1日星期⼀一

Page 89: 使用Hudson打造屬於你自己的軟體建構機器人

使用Groovy+Ant

11年8月1日星期⼀一

Page 90: 使用Hudson打造屬於你自己的軟體建構機器人

建構版本資訊

11年8月1日星期⼀一

Page 91: 使用Hudson打造屬於你自己的軟體建構機器人

電子看板

11年8月1日星期⼀一

Page 92: 使用Hudson打造屬於你自己的軟體建構機器人

電子看板

11年8月1日星期⼀一

Page 93: 使用Hudson打造屬於你自己的軟體建構機器人

CI 要如何導才能成功??

11年8月1日星期⼀一

Page 94: 使用Hudson打造屬於你自己的軟體建構機器人

配合開發流程

• Scrum的Daily Stand Up meeting

• 每天要修復失敗的Build

11年8月1日星期⼀一

Page 95: 使用Hudson打造屬於你自己的軟體建構機器人

記得CC主管

11年8月1日星期⼀一

Page 96: 使用Hudson打造屬於你自己的軟體建構機器人

記得CC主管

老闆支持很重要!

11年8月1日星期⼀一

Page 97: 使用Hudson打造屬於你自己的軟體建構機器人

持續整合的精神是不斷的進步與改進, 今天只是開始

11年8月1日星期⼀一

Page 98: 使用Hudson打造屬於你自己的軟體建構機器人

Thank You for your Joining

11年8月1日星期⼀一