炙伦云终端分享嘉宾:
标准化构建平台,持续交付跑起来
3.4 持续集成的实践示例。
1. 选择 CI 工具
实现持续集成的工具有很多,例如:Jenkins、Hudson、Travis CI、Build Bot、Strider等等。
其中,Jenkins 是 CI 的主流工具,它的前身是 Hudson,我这里选用 Jenkins 为大家演示案例。
首先要给大家介绍一下在 Jenkins 中的专业名词:
1. Jenkins 里面的集成构建的基本单位是任务-Task;
2. 每一次任务的运行,称之为构建-Build,同时会产生一个唯一的BUILD_ID;
3. 你可以把若干个任务添加到一个视图中,进行归类。如下图:
现在,让我们来看看任务里面的具体设置:
2. 设置构建任务
Jenkins 的构建任务分为8个模块,来支撑我们之前提到的持续集成的所有步骤,这里给大家介绍以下核心的模块:
1General
顾名思义,这里是设置任务的通用属性,这里简单介绍一下常用的参数:
1.丢弃旧的构建
如果想Jenkins只保留一定数量的构建历史,那么勾选“丢弃旧的构建”进行选择:
2. 参数化构建过程?在构建任务中,可以使用自定义全局变量,常用的有选择变量、字符串变量等等:
3.串联执行控制
多个任务之间可以互相触发,串联执行构建,称之为上下游,对上下游的任务进行构建控制:
2源码管理
该模块是设定 SCM 地址和需要进行构建的代码分支,对于许多 SCM,Jenkins 都有插件支持,我在这里选用了 Git:
在这里可以观察到一个任务只能对一个代码分支进行持续集成,在版本开发和分支管理策略上面就需要做好调整:
1.主干开发模式比较适合目前的持续集成;
2.推荐使用Git-Flow的代码管理,只需要对Develop分支和Master分支做持续集成,可以很方便地做较长版本发布周期的项目、持续集成和随时发布;
我在这里不展开更多的细节,更多的版本分支管理和发布实践可以参考 IBM 开发文库:《Git 分支管理最佳实践》。
PS:默认 Jenkins 只安装了Git插件,如果需要对其他的SCM进行持续集成,那么需要在“系统管理”-“管理插件”-“可选插件”中进行搜索和勾选安装;
如果 Jenkins 服务器没有联网,还手动下载插件的.hpi安装文件,然后在“系统管理”-“管理插件”-“高级”中上传插件进行手动的安装,安装时注意自己解决依赖。
3构建触发器
触发器非常关键,是实现自动化构建的入口。一般构建触发器会有以下的种类:
1.定时构建
Jenkins的定时构建语法格式和Linux的crontab一样,只不过没有命令列,常见的有以下 2 种模式:
1.Build periodically:不管源码是否发生变化,周期性地进行项目构建;
2.Poll SCM:定时检查源码变更(根据SCM软件的版本号),如果有更新就checkout最新code下来,然后执行构建动作。
2.依赖构建
Jenkins 里面可以选择在任意的其他任务构建完毕后,触发当前任务的构建,当然也可以在“构建后操作”模块中触发其他下游的任务进行构建。
3.触发构建触发构建一般有以下 3 种模式:
1.Build when a change is pushed to GitHub:当前项目是GitHub项目时,可以勾选此构建,当产生Push操作时,可以定制GitHub上的事件,由GitHub来触发自动构建;
2.Build when a change is pushed to GitLab:当前项目是 GitLab 项目时,可以勾选次构建,当产生 Push 操作时,可以定制 GitLab 上的事情,由 GitLab 来触发自动构建;
3.通过Remote HTTP API 来触发当前任务的构建:由通过任意的方式,使用 HTTP请求JenkinsAPI接口,可以触发当前任务PROJECTNAME的构建:http://YOURHOST/jenkins/job/PROJECTNAME/build
这是给用户自由定制触发条件和场合使用的。
4. 手动构建
这个就不需要解释了吧,大家手动点一下就好了。
在这里,我给大家演示以下 GitLab 项目是如何通过Build when a change is pushed to GitLab来自动触发构建:
4Pre Steps
在进行构建之前你还有什么想要准备的,在这里编写 pre-build step。
5Build
顾名思义,在这里执行构建动作,一般的构建动作会包括:编译、运行单元测试,如果需要上传和部署,那么还需要打包。
在这里,我给大家演示一下 Maven 项目的构建(mvn package 指令会经历 compile、test 等关键周期,因此编译、单元测试均均会运行):
6Post Steps
Post Steps 允许你根据构建的结果,来执行其他操作,构建的结果支持:
1. Run only if build succeeds?
2.?Run only if build succeeds or is unstable?
3. Run regardless of build result
7构建设置
在这里,你可以发送邮件通知其他项目组的成员关于本次构建的结果:
8构建后操作
本次构建结束后,你还可以执行其他的操作,如下图:
例如之前提到的触发其他任务进行构建,在这里勾选 Build other projects 即可:
又例如,我们在构建成功后,自动上传和部署到开发或者测试环境,在这里设置一下构建后的操作即可:
在 IT 行业,每隔十年左右,都会出现一次可能重构市场、改写未来的技术变革,一些公司能够抓住这些机会...
More它的弹性在于:可以支持服务器虚拟化与桌面虚拟化的混合;可以支持多种hyper-v, KVM 等...
More也有挺多私有云+桌面云的需求的,能有openstack +VDI那是更好了。...
More