小公司如何實施軟件配置管理

        背景:對於配置管理來說,配置庫是保存公司資產的倉庫,屬於邏輯概念,而實現上,可以根據實際情況以及以往的習慣,選擇適當的工具來輔助配置管理工作的實施。常見的用於支持配置管理的工具有CVS、Subversion、VSS、starTeam、CC等等。基於費用以及維護工作量的考慮,優先考慮CVS和Subversion。

區別:cvs和svn有着較大的差別,1)cvs在server上保存的是workspace的實際拷貝(意思是你能夠在服務器上找到一個目錄和本地工作空間的內容一模一樣的),而svn在server上保存的是轉換過的數據(與本地工作空間的內容完全不一樣),2)cvs的把版本信息和修改內容是通過與文件相關聯的附屬文件進行記錄的,而svn是通過全庫快照進行保存的,3)基於2的原因,cvs中,各個文件都有自己的版本,而svn中同一時間所有文件的版本都是一致的(單庫),4)也基於2的原因,cvs只能對文件進行版本控制,文件夾不在控制範圍之內,而svn則能控制文件和文件夾,並且有歷史版本信息。5)cvs上tags和branch的實現是通過在文件的附屬文件中添加標記來標識某一個版本的內容範圍,而svn則是通過copy的方式實現。

選擇:對於實施配置管理來說,cvs比較接近CMMI中版本和基線跟蹤的概念,但是基於cvs的第三方支持工具相對較少(也許未發現)和以往的開發習慣,還是決定使用svn來實現配置庫。

概念:對配置管理來說,需要有幾個邏輯庫的概念,1)開發庫,用來保存開發過程中的不穩定源碼;2)文檔庫,用於保存開發過程中不穩定的文檔;3)產品庫,用來保存階段性發布的產物(源碼和文檔)。

策略:我們會將這些不同的庫集成在一個或多個實體庫之中。對與svn來說,同一個庫內的任意文件的修改都會導致整個庫的版本好遞增,因此需要通過多庫來隔離變化。

分析:1)不同的項目需要在配置庫中實現統一管理,2)各個項目的文件夾具有相應的訪問控制權限,3)可以通過http進行遠程訪問,4)ssl安全訪問(可選),結合上述需求以及潛在需求分析,確定配置庫需實現如下功能:1)文檔庫、開發庫、產品庫的版本不相互影響,2)默認權限:項目leader具有的權限(開發庫:rw,文檔庫:rw,產品庫:r),開發人員具有的權限(開發庫:rw,文檔庫:r,產品庫:none),技術總監具有的權限(開發庫:rw,文檔庫:rw,產品庫:rw),配置管理員具有的權限(管理權限),3)能夠實現基線的概念和實現基線跟蹤。4)需要添加一個構建庫的概念,用於給STE提供穩定的測試版本。

實現:在一個svnserver中使用多庫共存,分別爲,開發庫(dev),文檔庫(doc),產品庫(pd),構建庫(db),然後將多庫的頂層目錄映射爲apache的一個虛擬目錄,通過apache的svn module進行訪問權限控制(rw權限),通過ldap進行webdav的訪問控制(access權限)。

總體過程:1)項目啓動:項目經理(PL)填寫項目初始化申請書,提交配置管理員(CMO),2)CMO根據項目名稱、優先級、配置庫類型、訪問列表及權限要求,對配置進行初始化,填寫回執返還PL,3)PL與開發團隊驗證訪問權限,然後開始文檔開發和源碼開發工作,4)文檔和源碼經過嚴格評審後,建立各自相應的基線,5)該階段的所有配置項都經過最後的基線化後,建立產品基線。6)發佈版本。

變更過程:對於小型公司來說,對所有庫都進行嚴格的讀寫控制會帶來較大的工作量,因此,對應的做法是隻對文檔庫和產品庫做變更控制,不爲開發庫做變更控制。

文檔基線化過程:文檔開發人員完成文檔開發後,由PL組織評審會議,確定無問題後,將文檔上傳文檔庫,爲1.0版本;出現變更並確定要變更後,文檔開發人員修訂文檔,再次進行評審,通過後形成1.1版本。後續的環節進行變更迭代。到階段性產品基線建立的時候,作爲產品基線的一個元素納入產品基線。

源碼基線化過程:源碼開發人員完成模塊或子系統開發後,通過運行自動構建(跑單元測試和集成測試)得出單元測試通過率和集成測試通過率,PL將這些信息提交測試經理(TM),TM到構建庫(ftp或share folder)獲取開發版本,組織預測試(Quick Test:運行基本功能測試套件),判斷交付版本是否具有足夠質量支撐後續工作,若有,進入該版本的系統測試,否則,退出打回版本。通過測試退出標準後,freeze該項目的源碼。

產品基線化過程:當階段性文檔和項目源碼都基線化後,PL提交產品基線化申請書,其中包括產品基線的名稱以及該產品基線具有的所有元素的基線名稱列表,CMO收到足夠信息後,在產品庫建立完成的產品基線。

產品發佈過程:PL提交產品發佈申請書(產品基線的名稱,產品基線中需交付的元素名稱列表),CMO獲取足夠信息後,對待發布元素進行打包,在發佈申請書上填寫處理結果,待PL確認後,完成產品內部交付過程。

自動構建過程:通過引入自動構建工具,監控開發庫的所有變化,每當開發庫有修改,都會觸發自動構建,完成後以郵件形式在將修改的文件列表和修改者的信息發給PL和QA和TM,進行三方源碼監控,保證源碼的有效性和正確性。 

在以上所述中,我們主要闡述了小公司如何實施配置管理的設計方案,包括配置管理的一些基本概念、配置管理工具的對比、配置管理的需求、以及部分配置管理的子過程設計,本篇的主要目標是結合以上文章中的設計方案,初步給出實施方案。

結構:配置庫分爲開發庫、文檔庫、產品庫、構建庫,這四個庫分別是獨立的單庫,版本不相互影響。上述四個庫的第一層目錄均爲項目全稱的縮寫字母(lowcase)。例如,項目一在開發庫下的相對路徑爲:/dev/pro1,在pro1下爲該項目的具體源碼結構樹;項目一在文檔庫下的相對路徑爲: /doc/pro1,在pro1下爲該項目的文檔樹結構(包括且不限於項目立項、項目結項、項目計劃、項目監控、風險管理、配置管理...),相應的文檔放入到相應的文件夾中;項目一在構建庫下的相對路徑爲:/db/pro1,在pro1下爲該項目不同時期的構建版本(格式:項目縮寫_階段_主版本.次版本.修訂版本-YYYYMMDD.後綴名);項目一在產品庫下的相對路徑爲:/pd/pro1,在pro1下爲該項目不同時期的基線發佈,如1.0基線包括的所有發佈內容(交付文檔和源碼)統一保存在/pd/pro1/1.0/路徑中。

實現:採用ubuntu + apache + subversion + openldap, apache實現http或https方式通過webdav協議瀏覽svn目錄結構,openldap實現web的安全訪問驗證。

總體步驟:1.安裝Ubuntu基系統,2.更新基系統所有組件,3.安裝apache2、subversion、libapache2-svn、 slapd、ldap-utils,4.建立ldap目錄結構(group & user),5.創建配置庫結構,6.整合apache2和subversion(權限和虛擬目錄),7.整合apache2和ldap(web訪問驗證),8.域名綁定。詳細的配置過程將會在後續的文章中進行闡述。

注意:由於subversion對URL是有規則截取的,規則:只使用域名或IP地址後的內容作爲配置庫的尋址路徑,因此,只能使用域名直接映射IP地址的方式,而不能使用域名映射爲IP/context的方式。

到此我們已經把基於配置庫的配置管理框架搭建起來,但是工具只是用來輔助管理的,重要的還是過程,在配置管理中,變更管理、配置審計、狀態統計等等支撐過程,還沒有完全的確定下來,沒關係,事情是不能一蹴而就的,在後續的篇章中,我們會逐個闡述,分析和交流這些過程實施的重點和難點。

在上面兩篇文章中,我們主要闡述了小公司如何通過配置庫的設計來初步搭建公司的配置管理過程,在本文中,我們將講述如何使用開源工具,搭建配置庫的相關步驟。

軟件要求: ubuntu + apache + subversion + ldap

詳細步驟:

(一)安裝linux系統平臺

1. 安裝ubuntu 8.04基系統

2. 修改/etc/apt/sources.list, 添加cn99的安裝源, 如下:

debhttp://ubuntu.cn99.com/ubuntu/hardy main restricted universe multiverse

debhttp://ubuntu.cn99.com/ubuntu/hardy-security main restricted universe multiverse

debhttp://ubuntu.cn99.com/ubuntu/hardy-updates main restricted universe multiverse

debhttp://ubuntu.cn99.com/ubuntu/hardy-proposed main restricted universe multiverse

debhttp://ubuntu.cn99.com/ubuntu/hardy-backports main restricted universe multiverse

deb-srchttp://ubuntu.cn99.com/ubuntu/hardy main restricted universe multiverse

deb-srchttp://ubuntu.cn99.com/ubuntu/hardy-security main restricted universe multiverse

deb-srchttp://ubuntu.cn99.com/ubuntu/hardy-updates main restricted universe multiverse

deb-srchttp://ubuntu.cn99.com/ubuntu/hardy-proposed main restricted universe multiverse

deb-srchttp://ubuntu.cn99.com/ubuntu/hardy-backports main restricted universe multiverse

3. 更新安裝包信息, 命令: sudo apt-get update

4. 更新基系統及所有軟件, 命令: sudo apt-get dist-upgrade

(二)安裝必要的應用軟件

5. 安裝SSH, 命令: sudo apt-get install ssh(用來在你的pc上遠程控制服務器)

6. 安裝apache2, 命令: sudo apt-get install apache2 apache2-common apache2-utils apache2-doc

7. 安裝subversion, 命令: sudo apt-get install subversion

8. 安裝apache的subversion模塊, 命令: sudo apt-get install libapache2-svn

9. 安裝openldap, 命令: sudo apt-get install slapd ldap-utils

安裝過程修改管理員密碼爲: rootpw

(三)創建配置庫結構

10. 在/usr/local下建立svn_root目錄, 命令: sudo mkdir /usr/local/svn_root

11. 在svn_root中建立三個庫文件夾, 命令如下:

sudo svnadmin create /usr/local/svn_root/doc

sudo svnadmin create /usr/local/svn_root/dev

sudo svnadmin create /usr/local/svn_root/pd

12.修改svn_root的權限, sudo chown -R www-data:www-data /usr/local/svn_root/

13. 啓動subversion服務器, 命令: svnserve -d -r /usr/local/svn_root

(四)集成apache和subversion

14. 讓Apache2裝載subversion與ldap認證模塊, 命令如下:

cd /etc/apache2/mods-enabled

sudo ln -s /etc/apache2/mods-available/dav_svn.load

sudo ln -s /etc/apache2/mods-available/ldap.load

sudo ln -s /etc/apache2/mods-available/authnz_ldap.load

15. 修改dav_svn.cof文件, 整合svn和apache2, 命令如下:

sudo cp /etc/apache/mods-enabled/dav_svn.conf /etc/apache/mods-enabled/dav_svn.conf.bk

sudo vi /etc/apache/mods-enabled/dav_svn.conf

在文件的末尾添加如下內容:

<Location /svn/>

DAV svn

SVNParentPath /usr/local/svn_root

AuthType Basic

AuthName "Subversion Repository"

AuthBasicProvider ldap

AuthzLDAPAuthoritative on

AuthLDAPURLldap://192.168.1.1/dc=test,dc=cn?cn?sub?(objectClass=*)

AuthLDAPBindDN "cn=root,dc=test,dc=cn"

AuthLDAPBindPassword "rootpw"

AuthzSVNAccessFile /etc/apache2/dav_svn.authz

Require valid-user

</Location>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章