项目管理实践(visualsvn,TortoiseSVN,AnkhSvn,CruiseControl.NET,Redmine,BugFree)-研发项目管理

>>项目管理实践(visualsvn,TortoiseSVN,AnkhSvn,CruiseControl.NET,Redmine,BugFree)-研发项目管理

项目管理实践(visualsvn,TortoiseSVN,AnkhSvn,CruiseControl.NET,Redmine,BugFree)-研发项目管理

引言:当今社会市场竞争激烈,软件开发企业想要占据前列需要在研发管理上下功夫,“向管理要效益”已经成为软件开发企业的共识,研发项目管理在软件企业中的普及也是大势所趋。国内做软件项目管理工具的开发商翼发云近几年发展十分迅速,越来越多的软件开发企业认识到研发项目管理的重要性,能切实有效降低成本,规范软件开发流程,提高软件产品质量。国内研发项目管理系统、敏捷开发管理工具的领导品牌翼发云敏捷项目管理系统采用可视化业务流程技术,支持瀑布模型等传统软件研发项目管理,同时也支持scrum等敏捷开发流程,是理想的敏捷开发管理工具,涵盖软件项目管理工作的整个生命周期。为提高国内软件开发企业的项目管理水平,分享一篇企业管理相关的知识文章。

  公司最近准备分出一套人马去客户那里做驻场研发,这就涉及到代码库的统一管理。鉴于VSS在互联网上表现不好,而TFS配置又过于复杂,我们选择了SVN。考虑到代码的安全性及性能,我们决定在本地布署自己的SVN服务器,然后每个人安装TortoiseSVN作为客户端,并安装AnkhSVN插件配合Visual Studio使用,安装CruiseControl.NET进行自动化的每日构建,安装Redmine进行项目管理,安装BugFree进行bug管理。

  1.VisualSVN,TortoiseSVN,AnkhSVN scrum

  我安装的版本是:VisualSVN2.1.9,TortoiseSVN-1.6.16.21511,AnkhSvn-2.1.10129。他们的安装过程都是傻瓜式的,无需多表,主要是安装好后需要进行几个位置的配置。

  a).采用Http还是Https 软件项目管理

  这个选择的优缺点就不多表,其实是看具体的需要。

敏捷开发流程

  b).安全证书问题

  安装完成后,如果采用Https方式,默认访问时会出现安全证书问题。这其实是因为默认使用的是“自签名证书”。安全证书的原理,简单来讲就是采用两个大素数A和B,用A加密的只能用B解密,用B加密的只能用A解密,此时称A为密钥,B为公钥或者B为密钥,A为公钥。这是一种典型的不对称加密。如果这对钥匙的提供者是公认的认证机构(如Verisign),那么各种主流浏览器就会认为它是安全的证书,反之就是非安全证书。显然,所谓“自签名证书”,就是指这个钥匙的提供者就是自己,在浏览器看来这当然就是典型的非安全证书了,会在最开始的页面显示一个警告。要想去除这个警告,有两种方法,第一种当然就是把你的相关信息发给那些认证机构,让他们帮你生成安全证书。不过这个方案是需要花点银子滴。第二种方法就是手工把当前的“自签名证书”加入到受信任列表里去。这种方法简单易行,具体的方法与说明请自行google或者参见本文结尾的参考文章。 研发项目管理

  c).使用“锁定-编辑-解锁”模型

  这个其实也是仁者见仁,智者见智的问题。只是对于我们而言,这个模型更加适合我们。但是SVN默认是“拷贝-修改-合并”模型,那如何进行变更呢?这就用到了SVN的自定义属性了。在SVN里是通过内置的属性“svn:needs-lock”实现“锁定-编辑-解锁”模型的。在这里只提一下具体操作,找到config文件,我的路径是:C:/Users/ljzforever/AppData/ROAming/Subversion/config。然后把enable-auto-props = yes前面的#号与空格删掉,然后在[auto-props]下面加一行* = svn:needs-lock=x。更加具体的操作与说明请自行google或者参见本文结尾的参考文章。这样,所有的文件在上传到SVN上后就自动进入“锁定-编辑-解锁”模型了。

  d).关于”steal lock”

  这个选项的初衷是为了增强灵活性,当一个文件被其它人锁定后,仍然可以用“偷”的方式将锁强行拿过来。不过这也是引起代码冲突的潜在原因之一,我们决定将其屏避掉。这里用到的技术就是hook script。hook script其实是一些脚本文件,在windows环境下就是一些bat脚本。每当svn做一些特定操作时,比如“锁定”,“提交”时,就会到指定目录下查找相关的hook script并执行它,达到对相应命令的预处理。我们这里是需要在锁定前检查用户在申请锁定文件时是否勾选了”steal lock”,如果勾选了,则中断操作,提示用户这个选项已被系统禁止。放置这个hook script的目录是跟代码库路径是相关的,我的目录是:E:/Repositories/HWCH/hooks。安装后默认里面已经有若干个模板,以tmpl为扩展名,比如pre-lock.tmpl就是锁定前做的预操作,post-commit.tmpl就是提交后做的预操作。我们在里面新建一个文件:pre-lock.bat,然后在里面输入以下内容:

项目管理实践(VisualSVN,TortoiseSVN,AnkhSVN,CruiseControl.NET,redmine,bugfree) View Code @echo&nbsp off

; REM [1] REPOS-PATH (the path to this repository)
REM [2] PATH the path (in the repository about to be locked)
REM [3] USER &nbsp & nbsp; (; the user creating the lock)
REM [4] COMMENT &nbsp (the comment of lock; the [5]
) REM STEAL-LOCK 1 if(是用户尝试对偷了其他锁具,0)

SETLOCAL:
:SVN在右括号的代码库的路径和文件路径敏感,为了逃避
::代码库路径
组回购= % 1 & 翼发云
组回购= %回购:)= ^ %):“
:当前文件
组&nbsp reppath = % 2
组路径;reppath = % reppath:)= ^ %)
组&nbsp用户名= % 3
”;集&nbsp issteal = 5;

REM no_stealing:
:如果没有锁,然后直接跳在
结束如果/我1”= =“% issteal % & 翼发云转到no_stealing
REM echo aaa > > d:/log.txt
REM echo R Epos =%repos% > > d:/log.txt
REM echo repPath =%repPath% > > d:/log.txt
REM echo userName =%userName% > &gt d:/; log.txt
rem if the path has been locked, find the&nbsp Owner.;
::
:: here is the key treatment by svnlook lock%repos%%repPath%, the lock command to obtain information, such as:
:: UUID Token: opaquelocktoken:1707b1a0-8dd1-a94e-87d2-6569a115cd5c:
: Owner: ljz:
: Created: 2011-08-08 21:05:31 +0翼发云&nbsp ( 08 Monday, August; 2011)
: &nbsp: Expires:;
: Comment (1 line):
:: /r /n findstr “.” will be in front of all rows and row, before all rows are returned, for example:
:: 1:UUID Token: opaquelocktoken:1707b1a0-8dd1-a94e-87d2-6569a115cd5c
:: 2:Owner: ljz:
: 3:Created: 2011-08-08 21:05:31 +0翼发云&nbsp ( 08 Monday, August; 2011)
:: 4:Expires::
: 5:Comment (1 line):
:: tokens=1,2,3 delims=: ,: number and blanks as delimiters, each row by the first three paragraphs, and were put into the variable%%i,%%j,%%k:
: through If%%i == 2 set LockedName=%%k, the third section into the variable LockedName, second line break after here is ljz
for /f tokens=1,2,3 delims=: %%i in’svnlook lock (%repos%%repPath% ^|findstr /r /n “” &nbsp do&nbsp (
);; if%%i == 2 set& nbsp; LockedName=%%k


REM 如果我们没有得到从结果svnlook,有没有锁,允许&nbsp锁;至发生。:
:如果是没有锁的信息,直接跳
然后结束如果不处理定义lockedname &nbsp ok_exit goto;

如果REM 人比赛锁定锁允许所有者,对锁发生。但
REM 一本不会效果,SVN 不在乎如果人配,他们只是不允许锁定。
REM echo userName =%userName% > > d:/log.txt
REM echo LockedName =%LockedName% > > d:/log.txt:
: if the lock with the current user name, directly jump off end processing
If /I’%LockedName%’==’%userName%’ goto&nbsp OK_EXIT;

rem Otherwise, we’ve got an owner mismatch, so return failure:
: WRONG_PERSON
echo the path has been locked by%LockedName%, Pls contact%LockedName% to unlock it.> & 2
gotoerror_exit &nbsp
回声
:no_stealing;偷锁是允许不这在服务器。>&
:error_exit
ENDLOCAL
2退出1
:ok_exit
ENDLOCAL
退出0

  这样,我们就能阻止用户使用”steal lock”选项了。

  

  2.CruiseControl.NET

  我下载的版本是CruiseControl.NET-1.6.7981.1,安装完成后,主要通过配置安装目录下的ccnet.config文件来达到自动化构建。

  a).配置文件

  我的配置文件如下:

项目管理实践(VisualSVN,TortoiseSVN,AnkhSVN,CruiseControl.NET,redmine,bugfree) 查看代码<CruiseControl xmlns:CB =“瓮:ccnet。配置生成器”>
<——这是&nbsp &nbsp!;你CruiseControl。网配置服务器添加文件。你项目——>下面!
&lt
!;<项目名称= myfirstproject / & gt
;——>
及翼发云<项目名称= svntest >
& lt;!公共
参数——><–cc.net工作!作为一个结果——&gt
目录;<artifactdirectory >E:/项目/ svntest / artifactdir & lt;/ artifactdirectory >
& lt;!——需要持续集成项目目录——>
<正在工作的目录>E:/项目/ svntest / workingdir & lt;/正在工作的目录>
& lt;!–编译报告– >
<weburl >HTTP:/ /本地/ ccnet /服务器/地方/;ViewServerReport .aspx & lt;/ weburl >
<编译!版本号和日志文件的名称格式——&gt
;<贴标型= datelabeller ></贴标>

<触发控制!星期一至星期五的8点到24点的时间段内,& gt
编译器;& lt;!在一段时间内检查一次每900秒没有更新,SVN 如果有了
&nbsp——>编译器;& lt;!–每天晚上11:50在强制性的时期——& gt编译器;
<但有一!这个问题,在星期六和星期日23:59 59仍将被编译,因为我的时间周期的末尾写的是23:59:59。系统问题,无法解决–>
<triggers>
<multiTriggeroperator=”And”>
<triggers>
<filterTriggerstartTime=”00:00:00″endTime=”08:00:00″>
<triggertype=” filterTrigger”startTime=”00:00:00″endTime=”23:59:59″>
<triggertype=”intervalTrigger”seconds=”900″/>
<weekDays>
<weekDay>Saturday&lt ;/weekDay>
<weekDay>Sunday</weekDay>
</weekDays>
</trigger>
&nbs p;</filterTrigger>
<filterTriggerstartTime=”00:00:00″endTime=”08:00:00″>
<triggertype=”filterTrigger”startTime=”00:00:00″endTime=”23:59:59″>
<triggertype=”scheduleTrigger”time=”23:50:00″buildCondit ion=”ForceBuild”/>
<weekDays>
<weekDay>Saturday</weekDay>
<weekDay>Sunday</weekDay>
&nbs p;</weekDays>
</trigger>
</filterTrigger>
</triggers>
</multiTrigger> wpap60300 3br &lt;/触发器&gt;

及& lt;!版本控制系统的类型————&gt;
&lt;sourcecontrol type=“SVN”&gt;
& lt;!SVN的地址————&gt;
&lt;trunkurl &gt;HTTP:/ /本地:88 / SVN / hwch / svntest / & lt;/ trunkurl &gt;
& lt;!——&nbsp把源代码检出到该目——&gt;
&nbsp诉讼;;&lt;正在工作的目录&gt;E:/项目/ svntest & lt;/正在工作的目录&gt;
&lt,SVN文件;!在路径——&gt
;&lt;执行&gt;C:/程序文件/ visualsvn 服务器/斌/ SVN。exe & lt;/执行&gt;
&lt;——SVN!Login username and password –&gt
; < username> ljz< /username> wpap60300 3Br < password> ljz< /password>
< /sourcecontrol>
&nbsp
; < tasks>
< the VS compiler! – –>
< devenv>
< solutionfile&gt E:/project/SVNTest/SVNTest.sln<
; /solutionfile> &n bsp;<configuration>Debug</configuration>
</devenv>
</tasks>

&lt;出版商&gt;
& lt;!——编译日志存放路径——&gt;
& lt;!——&lt;xmllogger logdir =“E:/ dailybuild /日志/ 3 /建设

  基本上照葫芦画瓢,就能把配置搞定。

  b).服务器时间

  我在测试cc.net从svn获取代码的时候,出现了一个这样子的错:failed:svn Check for modification。找了很久都没有找到原因,后来无意中改系统时间的时候才发现,原来我在测试triggers节点时,把系统时间改到昨天了,所以一定要记得,下一次获取代码的时间一定要晚于上一次获取代码的时间,不然cc.net就再也无法从svn获取最新的代码了。

  c).组件  

  其实,在敏捷思想的自动化管理中,cc.net是一个持续构建的平台,它不仅有上述的功能,还可以整合其它的技术框架.这里有两张从其它地方转过来的图,可以略窥一二

项目管理实践(VisualSVN,TortoiseSVN,AnkhSVN,CruiseControl.NET,redmine,bugfree)

项目管理实践(VisualSVN,TortoiseSVN,AnkhSVN,CruiseControl.NET,redmine,bugfree)

    1).NANT,MSBuild

    虽说在上面的示例中,我们通过调用Visual Studio来完成项目的编译,但是实际上有其缺陷:一是如果当前环境没有安装Visual Studio,则无法完成编译,二是可供选择的编译参数较少.而NANT与MSBuild则是专门解决其编译问题的.MSBuild是微软提供的生成工具,被包含在.Net FrameWork环境之中,可以拖离Visual Studio对项目进行编译,可以进行参数化编译.NANT则是一个独立的第三方自动化编译框架,由JAVA领域的ANT转化而来,通过直接调用csc命令对项目进行编译,它不仅可以进行参数化编译,还可以做很多其它额外的事,比如将目标文件夹清空,copy额外的第三方dll,将编译好的项目打包压缩成zip文件等.如果说cc.net注意Build的管理,则NANT重注重于Build的运行.个人感觉可以通过Visual Studio或者MSBuild对项目进行编译,然后通过NANT做一些项目发布的其它工作.

    2).FxCop

    这是微软出的一个代码规范检查工具,也可以通过CC.Net对其进行自动化调用

    3).NUnit,NCover

    两个自动化测试框架,也可以通过CC.Net对其进行自动化调用

  3.redmine

  这是个著名的开源项目管理软件,这个就不多讲了,具体的请参看我之前的博文:项目管理软件之易度1.5,禅道2.0,redmine1.2(附redmine1.2的安装)

  

  4.bugfree

  这也是个著名的开源bug管理软件,下载最新的Wamp环境,我的是WampServer2.1e,解压安装,然后下载最新的bugfree,我的是bugfree2.1.3,解压后放在Wamp安装目录的www目录下,然后在浏览器地址栏里输入指定网址,按提示生成数据库,稍等几秒钟后就可以开始使用了。更详细的操作与说明请自行google或者参见本文结尾的参考文章。

  最后,下载个花生壳, 将域名动态绑定下,全世界就都可以使用公司本部的代码了~~~

  参考的文章:

  1. 网站的安全证书有问题。
  2. 为Web服务安全使用自签名证书
  3. 命令行颠覆条目
  4. 如今有资源没有专属签名
  5. 自动锁定AnkhSvn
  6. 防止空日志信息以钩子脚本提交给颠覆
  7. 分享日志信息大于n个字符共享Visual SVN钩子script——检查时
  8. 在Tortoise SVN钩子脚本禁用破锁
  9. SVN钩子(Hook)-禁止破锁偷锁。(Windows DOS批处理版)
  10. 命令集详细解释
  11. 批处理脚本教程
  12. DOS命令大全:Findstr指挥
  13. Install VisualSVN-Server and TortoiseSVN and AnkhSVN experience
  14. 如何使用CruiseControl。网持续集成
  15. 总结CruiseControl净持续集成平台。
  16. CruiseControl。NET配置项目模板
  17. 真正的战斗,CruiseControl净+优。
  18. SVN + CruiseControl.net + NAnt自动编译文件最小的演示
  19. “蚂蚁”(恶性)爬到.NET
  20. 使用SVN +源码+蚂蚁实现持续集成
  21. 1

文章从互联网整理而来,旨在传播scrum、软件项目管理、研发项目管理、敏捷开发管理工具的知识与应用,帮助软件开发企业真正了解研发项目管理的价值和意义,如果本文侵犯了您的权益或者您需要具体了解更多国内做研发项目管理系统的公司翼发云敏捷项目管理系统的相关信息,欢迎和我们联络:

【网址】www.effapp.com

2018-02-21T11:35:24+08:002018-02-21 11:35:24|Categories: scrum项目管理|