偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

軟件開發(fā)項目管理實踐之駐場研發(fā)

開發(fā) 項目管理
本文將為大家介紹一個駐場研發(fā)的項目實例,包括SVN和代碼庫的統一管理等等。希望能幫助大家按圖索驥的做好項目開發(fā)。

  公司最近準備分出一套人馬去客戶那里做駐場研發(fā),這就涉及到代碼庫的統一管理。鑒于VSS在互聯網上表現不好,而TFS配置又過于復雜,我們選擇了SVN??紤]到代碼的安全性及性能,我們決定在本地布署自己的SVN服務器,然后每個人安裝TortoiseSVN作為客戶端,并安裝AnkhSVN插件配合Visual Studio使用,安裝CruiseControl.NET進行自動化的每日構建,安裝Redmine進行項目管理,安裝BugFree進行bug管理。

  1.VisualSVN,TortoiseSVN,AnkhSVN

  我安裝的版本是:VisualSVN2.1.9,TortoiseSVN-1.6.16.21511,AnkhSvn-2.1.10129。他們的安裝過程都是傻瓜式的,無需多表,主要是安裝好后需要進行幾個位置的配置。

  a).采用Http還是Https

  這個選擇的優(yōu)缺點就不多表,其實是看具體的需要。

  b).安全證書問題

  安裝完成后,如果采用Https方式,默認訪問時會出現安全證書問題。這其實是因為默認使用的是“自簽名證書”。安全證書的原理,簡單來講就是采用兩個大素數A和B,用A加密的只能用B解密,用B加密的只能用A解密,此時稱A為密鑰,B為公鑰或者B為密鑰,A為公鑰。這是一種典型的不對稱加密。如果這對鑰匙的提供者是公認的認證機構(如Verisign),那么各種主流瀏覽器就會認為它是安全的證書,反之就是非安全證書。顯然,所謂“自簽名證書”,就是指這個鑰匙的提供者就是自己,在瀏覽器看來這當然就是典型的非安全證書了,會在最開始的頁面顯示一個警告。要想去除這個警告,有兩種方法,***種當然就是把你的相關信息發(fā)給那些認證機構,讓他們幫你生成安全證書。不過這個方案是需要花點銀子滴。第二種方法就是手工把當前的“自簽名證書”加入到受信任列表里去。這種方法簡單易行,具體的方法與說明請自行google或者參見本文結尾的參考文章。

  c).使用“鎖定-編輯-解鎖”模型

  這個其實也是仁者見仁,智者見智的問題。只是對于我們而言,這個模型更加適合我們。但是SVN默認是“拷貝-修改-合并”模型,那如何進行變更呢?這就用到了SVN的自定義屬性了。在SVN里是通過內置的屬性“svn:needs-lock”實現“鎖定-編輯-解鎖”模型的。在這里只提一下具體操作,找到config文件,我的路徑是:C:UsersljzforeverAppDataRoamingSubversionconfig。然后把enable-auto-props = yes前面的#號與空格刪掉,然后在[auto-props]下面加一行* = svn:needs-lock=x。更加具體的操作與說明請自行google或者參見本文結尾的參考文章。這樣,所有的文件在上傳到SVN上后就自動進入“鎖定-編輯-解鎖”模型了。

  d).關于"steal lock"

  這個選項的初衷是為了增強靈活性,當一個文件被其它人鎖定后,仍然可以用“偷”的方式將鎖強行拿過來。不過這也是引起代碼沖突的潛在原因之一,我們決定將其屏避掉。這里用到的技術就是hook script。hook script其實是一些腳本文件,在windows環(huán)境下就是一些bat腳本。每當svn做一些特定操作時,比如“鎖定”,“提交”時,就會到指定目錄下查找相關的hook script并執(zhí)行它,達到對相應命令的預處理。我們這里是需要在鎖定前檢查用戶在申請鎖定文件時是否勾選了"steal lock",如果勾選了,則中斷操作,提示用戶這個選項已被系統禁止。放置這個hook script的目錄是跟代碼庫路徑是相關的,我的目錄是:E:RepositoriesHWCHhooks。安裝后默認里面已經有若干個模板,以tmpl為擴展名,比如pre-lock.tmpl就是鎖定前做的預操作,post-commit.tmpl就是提交后做的預操作。我們在里面新建一個文件:pre-lock.bat,然后在里面輸入以下內容:

  1. @echo off  
  2.  
  3. REM [1] REPOS-PATH   (the path to this repository)  
  4. REM [2] PATH         (the path in the repository about to be locked)  
  5. REM [3] USER         (the user creating the lock)  
  6. REM [4] COMMENT      (the comment of the lock)  
  7. REM [5] STEAL-LOCK   (1 if the user is trying to steal the lock, else 0)  
  8.  
  9. setlocal  
  10. ::svn對代碼資源庫路徑與文件路徑里的右小括號敏感,需要對其轉義  
  11. ::代碼資源庫路徑  
  12. set repos=%1   
  13. set "repos=%repos:)=^)%"  
  14. ::當前文件路徑  
  15. set repPath=%2  
  16. set "repPath=%repPath:)=^)%"  
  17. set userName=%3  
  18. set isSteal=%5  
  19.  
  20. rem NO_STEALING  
  21. ::如果沒有被鎖定,則直接跳走結束處理  
  22. if /I '1'=='%isSteal%' goto NO_STEALING  
  23. REM echo aaa >>d:\log.txt  
  24. REM echo repos = %repos% >>d:\log.txt  
  25. REM echo repPath = %repPath% >>d:\log.txt  
  26. REM echo userName = %userName% >>d:\log.txt  
  27. rem if the path has been locked, find the Owner.  
  28. ::這里是處理重點  
  29. ::通過svnlook lock %repos% %repPath%,命令獲取鎖信息,例如:  
  30. ::  UUID Token: opaquelocktoken:1707b1a0-8dd1-a94e-87d2-6569a115cd5c  
  31. ::  Owner: ljz  
  32. ::  Created: 2011-08-08 21:05:31 +0800 (周一, 08 八月 2011)  
  33. ::  Expires:  
  34. ::  Comment (1 line):  
  35. ::通過findstr /r /n ".",將所有行的前面加上行號,前返回所有行,例如:  
  36. ::  1:UUID Token: opaquelocktoken:1707b1a0-8dd1-a94e-87d2-6569a115cd5c  
  37. ::  2:Owner: ljz  
  38. ::  3:Created: 2011-08-08 21:05:31 +0800 (周一, 08 八月 2011)  
  39. ::  4:Expires:  
  40. ::  5:Comment (1 line):  
  41. ::通過tokens=1,2,3 delims=: ,以:號與空格作為分隔符,將上述每一行分隔,并將前三段分別裝入變量%%i,%%j,%%k  
  42. ::通過if %%i == 2 set LockedName=%%k,把第二行分隔后的第三段裝入變量LockedName,在這里,就是ljz  
  43. for /f "tokens=1,2,3 delims=: " %%i in ('svnlook lock %repos% %repPath% ^|findstr /r /n "."') do (  
  44.         if %%i == 2 set LockedName=%%k  
  45.         )  
  46.  
  47. rem If we get no result from svnlook, there's no lock, allow the lock to happen.  
  48. ::如果沒有獲取到鎖定信息,則直接跳走結束處理  
  49. if not defined LockedName goto OK_EXIT  
  50.  
  51. rem If the person locking matches the lock's owner, allow the lock to happen.  
  52. rem But this one won't effect, the SVN don't care if the person matchs, they just don't allow relock.  
  53. REM echo userName = %userName% >>d:\log.txt  
  54. REM echo LockedName = %LockedName% >>d:\log.txt  
  55. ::如果鎖定人與當前用戶同名,則直接跳走結束處理  
  56. if /I '%LockedName%'=='%userName%' goto OK_EXIT  
  57.  
  58. rem Otherwise, we've got an owner mismatch, so return failure:  
  59. :WRONG_PERSON  
  60. echo the path has been locked by %LockedName%, Pls contact %LockedName% to unlock it.>&2   
  61. goto ERROR_EXIT   
  62. :NO_STEALING  
  63. echo Stealing lock is not allowed at this server.>&2  
  64. :ERROR_EXIT  
  65. endlocal  
  66. exit 1  
  67. :OK_EXIT  
  68. endlocal  
  69. exit 0 

  2.CruiseControl.NET

  我下載的版本是CruiseControl.NET-1.6.7981.1,安裝完成后,主要通過配置安裝目錄下的ccnet.config文件來達到自動化構建。

  a).配置文件

  我的配置文件如下:

  1. <cruisecontrol xmlns:cb="urn:ccnet.config.builder"> 
  2.     <!-- This is your CruiseControl.NET Server Configuration file. Add your projects below! --> 
  3.     <!--  
  4.         <project name="MyFirstProject" />  
  5.     --> 
  6.     <project name="SVNTest" > 
  7.         <!--公有參數--> 
  8.         <!--CC.net存放工作結果的目錄--> 
  9.         <artifactDirectory>E:\project\SVNTest\artifactDir</artifactDirectory> 
  10.         <!--需要進行持續(xù)集成的項目的目錄--> 
  11.         <workingDirectory >E:\project\SVNTest\workingDir</workingDirectory> 
  12.         <!--編譯報告的網址--> 
  13.         <webURL>http://localhost/ccnet/server/local/ViewServerReport.aspx</webURL> 
  14.         <!--編譯的版本號與日志文件名格式 --> 
  15.         <labeller type="dateLabeller"></labeller> 
  16.  
  17.         <!--該觸發(fā)器控制周一到周五的8點到24點的時間段內進行編譯--> 
  18.         <!--在時間段內每900秒檢查一次svn有無更新 ,如果有就取出并編譯--> 
  19.         <!--在時間段內每晚上11點50分進行一次強制編譯--> 
  20.         <!--但是目前有個問題,在周六與周日的23:59:59仍會編譯一次,原因是我的時間段的結束時間寫的是23:59:59。系統問題,無法解決--> 
  21.         <triggers> 
  22.             <multiTrigger operator="And"> 
  23.                 <triggers> 
  24.                     <filterTrigger startTime="00:00:00" endTime="08:00:00"> 
  25.                         <trigger type="filterTrigger" startTime="00:00:00" endTime="23:59:59"> 
  26.                             <trigger type="intervalTrigger" seconds="900" /> 
  27.                             <weekDays> 
  28.                                 <weekDay>Saturday</weekDay> 
  29.                                 <weekDay>Sunday</weekDay> 
  30.                             </weekDays> 
  31.                         </trigger> 
  32.                     </filterTrigger> 
  33.                     <filterTrigger startTime="00:00:00" endTime="08:00:00"> 
  34.                         <trigger type="filterTrigger" startTime="00:00:00" endTime="23:59:59"> 
  35.                             <trigger type="scheduleTrigger" time="23:50:00" buildCondition="ForceBuild" /> 
  36.                             <weekDays> 
  37.                                 <weekDay>Saturday</weekDay> 
  38.                                 <weekDay>Sunday</weekDay> 
  39.                             </weekDays> 
  40.                         </trigger> 
  41.                     </filterTrigger> 
  42.                 </triggers> 
  43.             </multiTrigger>    
  44.         </triggers> 
  45.           
  46.         <!-- 版本控制系統的類型 --> 
  47.         <sourcecontrol type="svn"> 
  48.             <!-- SVN的地址 --> 
  49.             <trunkUrl>http://localhost:88/svn/HWCH/SVNTest/</trunkUrl> 
  50.             <!-- 把源代碼檢出到該目錄 --> 
  51.             <workingDirectory>E:\project\SVNTest</workingDirectory> 
  52.             <!-- svn.exe所在路徑 --> 
  53.             <executable>C:\Program Files\VisualSVN Server\bin\svn.exe</executable> 
  54.             <!-- 登錄svn的用戶名和密碼 --> 
  55.             <username>ljz</username> 
  56.             <password>ljz</password> 
  57.         </sourcecontrol> 
  58.           
  59.         <tasks> 
  60.             <!--采用VS進行編譯--> 
  61.             <devenv> 
  62.                 <solutionfile>E:\project\SVNTest\SVNTest.sln</solutionfile> 
  63.                 <configuration>Debug</configuration> 
  64.             </devenv> 
  65.         </tasks> 
  66.           
  67.         <publishers> 
  68.             <!--編譯日志存放路徑--> 
  69.             <!--<xmllogger logDir="E:\DailyBuild\Log\3\buildlogs" />--> 
  70.             <!-- 下面設置編譯報告通過email通知相關人員 詳細信息參考cc.net的幫助--> 
  71.             <!--<email from="admin@163.com" mailhost="smtp.163.com" mailhostUsername="admin" mailhostPassword="123" includeDetails="true"> 
  72.                 <users> 
  73.                     <user name="dachuan" group="buildmaster" address="dachuan@163.com"/> 
  74.                 </users> 
  75.                 <groups> 
  76.                     <group name="buildmaster" notification="always"/> 
  77.                 </groups> 
  78.             </email>--> 
  79.         </publishers> 
  80.     </project> 
  81. </cruisecontrol> 

  基本上照葫蘆畫瓢,就能把配置搞定。

  b).服務器時間

  我在測試cc.net從svn獲取代碼的時候,出現了一個這樣子的錯:failed:svn Check for modification。找了很久都沒有找到原因,后來無意中改系統時間的時候才發(fā)現,原來我在測試triggers節(jié)點時,把系統時間改到昨天了,所以一定要記得,下一次獲取代碼的時間一定要晚于上一次獲取代碼的時間,不然cc.net就再也無法從svn獲取***的代碼了。

  3.redmine

  這是個著名的開源項目管理軟件,這個就不多講了,具體的請參看我之前的博文:項目管理軟件之易度1.5,禪道2.0,redmine1.2(附redmine1.2的安裝)

  4.bugfree

  這也是個著名的開源bug管理軟件,下載***的Wamp環(huán)境,我的是WampServer2.1e,解壓安裝,然后下載***的bugfree,我的是bugfree2.1.3,解壓后放在Wamp安裝目錄的www目錄下,然后在瀏覽器地址欄里輸入指定網址,按提示生成數據庫,稍等幾秒鐘后就可以開始使用了。更詳細的操作與說明請自行google或者參見本文結尾的參考文章。

  ***,下載個花生殼, 將域名動態(tài)綁定下,全世界就都可以使用公司本部的代碼了~~~

  參考的文章:

  網站的安全證書有問題

  將自簽名證書用于Web服務安全性

  命令行 Subversion 入門

  TortoiseSVN有沒有對資源的獨占簽出功能

  AnkhSVN的自動加鎖

  用Hook Script阻止空日志信息提交到Subversion

  分享Visual SVN Hook Script——檢查提交時必須填寫大于N個字符的日志信息

  Hook Script to disable Break Lock in Tortoise SVN

  SVN hooks(鉤子)-禁止break lock及steal lock。(Windows dos-batch版)

  bat set命令詳解

  BAT 批處理腳本 教程

  DOS命令大全:Findstr命令詳解

  安裝 VisualSVN-Server 和 TortoiseSVN 和 AnkhSVN 體會

原文鏈接:http://www.cnblogs.com/ljzforever/archive/2011/08/09/2132799.html

【編輯推薦】

  1. 新手軟件項目經理該如何入門
  2. 項目經理的力量應該從哪里來?
  3. 當你從程序員變?yōu)轫椖拷浝?/font>
  4. 軟件測試項目為什么會失敗
  5. 項目管理之CVS與SVN日常使用總結
責任編輯:彭凡 來源: 博客園
相關推薦

2011-07-11 09:31:34

軟件項目管理

2023-06-08 16:47:09

軟件開發(fā)工具

2011-07-08 08:37:05

軟件開發(fā)

2023-06-09 19:01:03

軟件開發(fā)

2011-01-19 10:45:34

信息系統項目管理師

2014-07-10 09:44:10

軟件項目開發(fā)項目

2022-08-29 14:56:39

物聯網軟件開發(fā)設備

2013-03-01 09:53:40

軟件開發(fā)

2011-12-15 01:01:48

ibmdw軟件開發(fā)

2023-02-20 15:29:46

異步編碼多線程

2011-07-14 09:03:41

軟件開發(fā)項目

2011-11-29 09:29:35

項目經理

2022-10-12 14:17:39

物聯網軟件開發(fā)

2020-06-12 07:00:00

Web開發(fā)項目

2013-07-24 10:11:50

軟件工程師

2015-09-24 16:09:45

軟件開發(fā)項目原因

2011-05-19 08:57:41

軟件開發(fā)項目

2011-07-26 10:44:32

開發(fā)項目

2012-02-20 09:58:38

ibmdw

2023-01-09 16:08:19

點贊
收藏

51CTO技術棧公眾號