项目运作实践(二)

Jenkins部署和使用
前文“项目运作实践”中明确了自动化集成环境的重要性。自动化集成工具是项目高效运作不可或缺的利器。本文简述一下Jenkins自动化集成环境的部署和使用,以android项目为例。
一. Jenkins简介
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。
二. Jenkins部署
Jenkins有两种部署方案。Windows中可以直接运行安装包;也可以在Tomcat容器中直接运行,实现跨平台。下文以tomcat中部署为例。
2.1 环境部署
 JDK安装,Gradle安装,Linux版本Android SDK安装
 环境变量配置
 Tomcat容器安装
 复制Jenkins.war包到tomcat app目录
2.2 系统初始化
 Jenkins首次启动需要初始化密码
项目运作实践(二)

 安装建议插件
项目运作实践(二)
项目运作实践(二)
 完成初始化后运行
项目运作实践(二)
项目运作实践(二)
2.3环境配置
 Gradle 属性配置。注意jvm参数,配置不当版本构建过程中会出现OOM现象
 Git,SVN配置
 邮件服务器配置
2.4 其他设置
 用户管理,系统管理->管理用户,创建/删除/修改 Jenkins用户
 角色权限管理,系统管理->管理分配角色,管理分配不同用户使用不同的任务
三. Jenkins任务
3.1 创建工程工作区
项目运作实践(二)
项目运作实践(二)
3.2 工程配置
 Git配置,账户添加代码获取私钥
源码管理中,通过Credentials后面Add进入私钥添加界面,将本地Git版本库公钥配套的私钥信息进行添加,完成保存。环境请求Git版本库获取代码需要校验。
项目运作实践(二)
项目运作实践(二)
 配置Git代码库
构建版本需要获取代码,Git版本库配置:
项目运作实践(二)
3.3 构建触发器
 远程出发构建
设置触发令牌
项目运作实践(二)
通过浏览器触发构建
http://xxx.xxx.xx.xx:8080/jenkins/job/xxx_produce/build?token=produce&case=构建发布版本
token=produce 令牌;与服务器内部配置一致。
cause=构建发布版本; 描述本次构建说明。
 固定周期性构建

  1. 日程表配置语法
    日程表配置语法和Linux中cron的配置语法一致。每一行有5个字段,字段之间以Tab或者空格区分,各字段含义如下:
    MINUTE HOUR DOM MONTH DOW
    MINUTE Minutes within the hour (0-59)
    HOUR The hour of the day (0-23)
    DOM The day of the month (1-31)
    MONTH The month (1-12)
    DOW The day of the week (0-7) where 0 and 7 are Sunday
    每个字段可以指定多个值,规则如下:
    ** 表示所有的取值
    M-N 表示一个取值区间 (M, N)
    M-N/X 或 /X 表示取值区间(M, N)或者所有取值()范围中每X一次
    H 表示取随机数,如:H H(0-7) * * * 意为每天一次,0点到7:59之间随机取一个时间
  2. 日程表配置举例
    H/15 * * * * //每十五分钟一次,具体时间点随机取
    H(0-29)/10 * * * * //每个小时前半小时内每10分钟执行一次,具体时间点随机取
    45 9-16/2 * * 1-5 //每周一到周五,每天9点到16:59之间两小时一次,每次在45分执行。执行时间点为9:45, 11:45, 13:45, 15:45
    H H 1,15 1-11 * //每年月到11月,每月1日、15日,随机时间执行一次
  3. 任务配置举例
    每周二到周六凌晨1点钟某个时间点进行一次构建
    项目运作实践(二)
     轮询代码库构建
    轮询日程表配置方法参考上一节内容。当执行时间到时,检查git上面是否有新的提交。有新的提交则开始构建任务,否则不执行。下面示例表示每周一到周六上午9点到18:59之间每两小时执行一次,具体时间点随机获取。
    项目运作实践(二)
     构建前/后执行ssh服务器命令
    可以在构建开始前,或者构建结束后执行ssh命令,如:构建完成后将版本转存到指定服务器(SVN),或将构建目录下面的输出版本拷贝到指定服务器制定目录(运行自动化测试服务器)。
    项目运作实践(二)
    3.4 构建配置
     使用环境配置Gradle构建
    项目运作实践(二)
    Gradle的配置可以在系统设置中增加,这里只有选择正确的版本就可以。
     使用命令构建
    项目运作实践(二)
    更丰富的shell命令可以根据自己项目本身的需要进行设计。
    3.5 构建后操作
     Lint代码静态检查报告归档,以及归档总结
    项目运作实践(二)
    项目运作实践(二)
     构建生成版本归档
    项目运作实践(二)
     版本归档后发出邮件通知
    项目运作实践(二)
    3.6 项目使用示例
    以上章节进行配置后,对自己的项目进行配置,展示一些构建成果;本工程有多个渠道版本被每次构建同时生成。
    项目运作实践(二)
    四. 其他内容
    邮件服务器配置;版本转存,归档到svn;单元测试;单元测试覆盖率;自动化测试,真机自动化测试;参数化构建;团队使用环境权限控制等等内容,因篇幅有限不再细述,有需要逐个答复。
    五. 总结
    持续集成可以按照项目需要全天值守构建,可周期执行、可按需执行、可指定执行。项目存在多渠道版本输出,每次多个版本可以完全交给系统进行测试。持续集成环境的使用,可以降低研发、测试的人工投入,可以提早发现项目问题,可以提升项目运作效率。