共计 3841 个字符,预计需要花费 10 分钟才能阅读完成。
什么是持续集成
随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题。尤其是近些年来,敏捷(Agile)在软件工程领域越来越红火,如何能再不断变化的需求中快速适应和保证软件的质量也显得尤其的重要。
持续集成正是针对这一类问题的一种软件开发实践。它倡导团队开发成员必须经常集成他们的工作,甚至每天都可能发生多次集成。而每次的集成都是通过自动化的构建来验证,包括自动编译、发布和测试,从而尽快地发现集成错误,让团队能够更快的开发内聚的软件。
持续集成的核心价值在于:
- 持续集成中的任何一个环节都是自动完成的,无需太多的人工干预,有利于减少重复过程以节省时间、费用和工作量;
- 持续集成保障了每个时间点上团队成员提交的代码是能成功集成的。换言之,任何时间点都能第一时间发现软件的集成问题,使任意时间发布可部署的软件成为了可能;
- 持续集成还能利于软件本身的发展趋势,这点在需求不明确或是频繁性变更的情景中尤其重要,持续集成的质量能帮助团队进行有效决策,同时建立团队对开发产品的信心。
持续集成的原则
业界普遍认同的持续集成的原则包括:
1)需要版本控制软件保障团队成员提交的代码不会导致集成失败。常用的版本控制软件有 IBM Rational ClearCase、CVS、Subversion 等;
2)开发人员必须及时向版本控制库中提交代码,也必须经常性地从版本控制库中更新代码到本地;
3)需要有专门的集成服务器来执行集成构建。根据项目的具体实际,集成构建可以被软件的修改来直接触发,也可以定时启动,如每半个小时构建一次;
4)必须保证构建的成功。如果构建失败,修复构建过程中的错误是优先级最高的工作。一旦修复,需要手动启动一次构建。
持续集成系统的组成
由此可见,一个完整的构建系统必须包括:
- 一个自动构建过程,包括自动编译、分发、部署和测试等。
- 一个代码存储库,即需要版本控制软件来保障代码的可维护性,同时作为构建过程的素材库。
- 一个持续集成服务器。
Jenkins 是由 Sun 的前员工开发的,它的根基是 Java,但也可以用在非 Java 的项目里,比如 PHP、Ruby on Rails、.NET。在.NET 项目里,你除了 Jenkins 之外还要熟悉另一样工具:MSBuild。Visual Studio 用 MSBuild 构建.NET 项目。MSBuild 所需的仅仅是一个脚本,在脚本中指定要执行的 target。项目中的.csproj 和.vbproj 文件都是 MSBuild 脚本。下面的几篇文章介绍如何使用 Jenkins 快速搭建持续集成服务器。
首先要学会使用 MSBuild 构建脚本
附网址: http://www.linuxidc.com/Linux/2016-06/132287.htm
目标: 学会用 MSBuild 编译程序, 主要用于 asp.net 或者 asp.net mvc.
最终, 我写的脚本如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | < Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> < ItemGroup > < BuildArtifactsDir Include="UI\bin\" /> < SolutionFile Include="HelloCI.sln" /> </ ItemGroup > < PropertyGroup > < Configuration Condition="'$(Configuration)' == ''">Release</ Configuration > < BuildPlatform Condition="'$(BuildPlatform)' == ''">Any CPU</ BuildPlatform > </ PropertyGroup > < Target Name="Init" DependsOnTargets="Clean"> < MakeDir Directories="@(BuildArtifactsDir)" /> </ Target > < Target Name="Clean"> < RemoveDir Directories="@(BuildArtifactsDir)" /> </ Target > < Target Name="Compile" DependsOnTargets="Init"> < MSBuild Projects="@(SolutionFile)" Targets="Rebuild" Properties="OutDir=%(BuildArtifactsDir.FullPath);Configuration=$(Configuration);Platform=$(BuildPlatform)" /> </ Target > </ Project > <!--msbuild HelloCI.msbuild /t:Compile /p:VisualStudioVersion=12.0 --> |
脚本的最后一行注释, 是构建的命令./p:VisualStudioVersion=12.0是指明版本, 如果不指明会报错, 找不到某文件.
Jenkins+tortoisesvn+MSBuild 做到持续集成
附 Jenkins 的使用: http://www.linuxidc.com/Linux/2016-06/132287p2.htm
先大概阅读上面的网址对应的文章.注意: 我用的版本控制器是 tortoisesvn; 此外,post-commit 的钩子我也会说明.
1. 安装 Jenkins(稳定版本即可), 装好后 进入左侧 系统管理, 点击 管理插件, 安装 MSBuild 插件.
2. 使用 Jenkins 新建一个自由风格的软件项目. 配置如下:
主要是配置 svn 的地址和账号密码; 构建触发器不用选, 后面会用钩子.
然后是构建, 配置如下:
HelloCI.msbuild 是构建脚本的文件名. 其次, 参数是一定要填的.
其他的不用理, 直接保存.
项目列表, 如下图:
此时, 用 svn 上传一个项目(不包含 bin), 项目根目录要有 HelloCI.msbuild 这个文件.
上传完成后, 点击 上图中的 立即构建 . 用 IIS 等软件看网站是否可以访问.
如果成功, 下一步就是如何触发构建. 毕竟, 每提交一次, 就去服务器立即构建一次, 是重复动作. 要用触发构建 ’ 封装 ’.
用 tortoisesvn 的 post-commit 钩子触发构建
首先, 要明白一点. 在 Jenkins 的项目列表里, 除了点击 立即构建 . 还可以通过访问
http://localhost:8080/job/JOBNAME/build?delay=0sec(JOBNAME 需要替换成真实的 job 名称),让 Jenkins 启动构建。(请自己测试, 通过后, 继续看下边的.)
tortoisesvn 的钩子设置如下:
HelloCIHook.exe 是什么呢? 你应该可以想到了, 就是一个小程序, 执行它会访问能触发构建的 url.
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 | class Program { static void Main(string[] args) { const string url = "http://localhost:8080/job/HelloCI/build?delay=0sec" ; HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); req.Method = "GET" ; req.KeepAlive = false ; req.GetResponse(); } } |
到这儿就结束了.
总结下流程, 用 svn 提交代码后, 钩子触发 HelloCIHook.exe 这个程序, 该程序访问了一个 url, 进而触发了 Jenkins 的构建 (执行的 MSBuild 构建脚本).Jenkins 以最新的代码库进行了构建, 生成了 bin(也可以是其他) 目录下的文件. 网站成功更新.
局域网内利用 GitLab+Jenkins 自动生成 GitBook 并发布(Nginx) http://www.linuxidc.com/Linux/2016-05/131136.htm
Linux+Git+Maven+Jenkins+Neuxs 自动化编译环境搭建 http://www.linuxidc.com/Linux/2016-02/128652.htm
CentOS6 安装 Jenkins http://www.linuxidc.com/Linux/2016-05/131365.htm
使用 Jenkins 配置 Git+Maven 的自动化构建 http://www.linuxidc.com/Linux/2016-02/128641.htm
Jenkins+Maven+Git 搭建持续集成和自动化部署的配置手记 http://www.linuxidc.com/Linux/2015-06/118606.htm
Jenkins 的分布式构建及部署——节点 http://www.linuxidc.com/Linux/2015-05/116903.htm
Jenkins 的详细介绍:请点这里
Jenkins 的下载地址:请点这里
本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-06/132288.htm