CI初步了解

Posted by hqpsoft on November 28, 2015

概念

持续集成指的是,频繁地(一天多次)将代码集成到主干

  • 快速发现错误。每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易。
  • 防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。

简介

  CI(Continuous Integration)持续集成,最重要的服务对象是TDD,它是一个集合概念,包括自动构建build项目,自动分析代码,自动测试,自动邮件报告,自动预编译检查,自动发布等等,
这些都围绕一个中心词“Auto”,当然它不能帮您自动完成代码 :)。所有这些操作,直接解放了项目管理者,每日构建集成(Build every day)将会很大程度上提高项目的稳定性,代码的健壮性及随时反馈。

持续集成是一种能让团队成员友好“集成”(integrate)工作的软件开发实践,通常每个人最少每日“集成”一次,也就是说每天都要进行大量的“集成”(multiple integrates per day)。每一次集成都被自动构建器(automated build including test)尽可能快的检测集成错误。许多团队开发者发现,这种方法极大的降低了团队简集成的问题,而且能让团队更快的开发出有凝聚力,结合力的软件(cohesive software)。
与持续集成相关的,还有两个概念,分别是持续交付和持续部署
一、持续交付
 持续交付(Continuous delivery)指的是,频繁地将软件的新版本,交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段。
 持续交付可以看作持续集成的下一步。它强调的是,不管怎么更新,软件是随时随地可以交付的。
 二、持续部署
 持续部署(continuous deployment)是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。持续部署的目标是,代码在任何时刻都是可部署的,可以进入生产阶段。
From

流程


提交 => 测试(第一轮)=> 构建(build) => 测试(第二轮)=> 部署=>回滚
核心是develop => master

工具

  • TeamCity
  • ThoughtWorks的Go(收费)
  • Jenkins

代码审查

C# 开发者审查代码的41条建议

前提

团队需要认识到代码审查是为了提高整个团队的能力,而不是针对个体设置的检查“关卡”。“A的代码有个bug被B发现,所以A能力不行,B能力更好”,这一类的陷阱很容易被扩散从而影响团队内部的协作,因此需要避免。 另外,代码审查本身可以提高开发者的能力,让其从自身犯过的错误中学习,从他人的思路中学习。如果开发者对这个流程有抵触或者反感,这个目的就达不到。
在代码审查中如果发现问题,对于问题的发现者来说这是好事,应该予以鼓励。
但对于被发现者,我们不主张使用这个方式予以惩罚。软件开发中bug在所难免,过度苛求本身有悖常理。
更糟的是,如果造成参与者怕承担责任,不愿意在审查中指出问题,代码审查就没有任何的价值和意义。

建议

  • 每次审查200行-400行的代码效果最好
  • 需要带着问题去做,比如拿一个实际的功能,让参与者有代入感
  • 代码审查需要轻松的、非正式的环境
  • 自我的code review
  • 回顾总结

##工具

  • gitlab

Web Deploy MSN

How does it work?

相关资料


初步方案

MSBuild + TeamCity + GitLab(TFS) + NUnit(非必要)

方案实施

gitlab8.0集成了gitlab ci. 待补充

持续交付(CD)

环境变量设置

C:\Windows\Microsoft.NET\Framework\v4.0.30319\
C:\windows\system32\inetsrv\

Build

MSBuild "C:\Users\qingpan\Desktop\WebApplication1\WebApplication1\WebApplication1.csproj" /T:Package /property:Configuration=Release /P:VisualStudioVersion=12.0 /P:PackageLocation="E:\发布\pakagezip\WebApplication.zip"

建立localhost和域名的区别是,localhost端口号后面要加:

appcmd add site /name:"WebApplication"  /bindings:http/*:8096: /physicalPath:"E:\publish"

appcmd add site /name:"WebApplication"  /bindings:http://ids.uoko.ioc:80  /physicalPath:"E:\publish"

建立程序池

appcmd add apppool /name:WebApplication

设置程序池

appcmd set app WebApplication/ -applicationPool:WebApplication

本地部署

E:\发布\pakagezip\WebApplication.deploy.cmd "-setParam:name='IIS Web Application Name',value=WebApplication" /y

远程部署

E:\发布\pakagezip>WebApplication.deploy.cmd /Y /U:simple-deploy /P:deploy /A:Basic "/M:https://WIN-DEVTEST-002:8172/msdeploy.axd?site=ids.uoko.ioc" -allowUntrusted "-setParam:name='IIS Web Application Name',value='WebApplication'"

备份

appcmd add backup "WebApplication" 

还原备份

appcmd restore backup "WebApplication" 

多环境问题

针对项目多环境不同配置文件,采取的解决方案是生成不同的web.config文件,通过config transfer进行转换.

相关文档


Creative Commons License
This work is licensed under a CC A-S 4.0 International License.