相关概念
Jenkins
- Jenkins,一个用Java编写的开源的持续集成工具,提供了软件开发的持续集成服务,可监控并触发持续重复的工作,具有开源,支持多平台和插件扩展,安装简单,界面化管理等特点。更多介绍参考[维基](https://en.wikipedia.org/wiki/Jenkins_(software)介绍.
Gitlab
- GitLab是一个利用Ruby on Rails开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目,更多介绍参考维基介绍.
持续集成
- 持续集成, 简称CI(continuous integration).
- CI作为敏捷开发重要的一步,其目的在于让产品快速迭代的同时,尽可能保持高质量.
- CI一种可以增加项目可见性,降低项目失败风险的开发实践。其每一次代码更新,都要通过自动化测试来检测代码和功能的正确性,只有通过自动测试的代码才能进行后续的交付和部署.
- CI 是团队成员间(产研测)更好地协调工作,更好的适应敏捷迭代开发,自动完成减少人工干预,保证每个时间点上团队成员提交的代码都能成功集成的,可以很好的用于对Android/iOS项目的打包.
平台搭建
Jenkins安装和启动
官网: https://jenkins.io/index.html
下载: http://mirrors.jenkins-ci.org/war/latest/jenkins.war
安装:
- 依赖于Java环境,首先安装和配置Java环境
- 到官网下载Jenkins,双击安装,如果是Mac电脑,会自动生成全局变量jenkins
- 修改参数: jenkins + 相关参数,如jenkins --httpPort=8888 #更换端口号,当默认端口8080被占用,或指定特定端口时。
启动
- 手动启动: java -jar jenkins.war
- 后台启动(默认端口): nohup java -jar jenkins.war &
- 后台启动(指定端口): nohup java -jar jenkins.war -httpPort=88 &
- 后台启动(HTTPS): nohup java -jar jenkins.war -httpsPort=88 &
- 浏览:http://localhost:8080/ , localhost可配置
Jenkins插件安装
操作: Manage Jenkins -> Manage Plugins -> Available -> Search -> Click to install,如下图所示
实用插件
- Gitlab插件:GitLab Plugin 和 Gitlab Hook Plugin
- Git插件: Git plugin
- 签名证书管理插件: Credentials Plugin 和Keychains and Provisioning Profiles Management
- FTP插件: Publish over FTP
- 脚本插件: Post-Build Script Plug-in
- 获取仓库提交的commit log: Git Changelog Plugin
- 自定义全局变量: Environment Injector Plugin
- 自定义邮件插件: Email Extension Plugin
- 获取当前登录用户信息: build-user-vars-plugin
- 显示代码测试覆盖率报表: Cobertura Plugin
来展示生成的单元测试报表,支持一切单测框架,如junit、nosetests等: Junit Plugin
Jenkins系统设置
操作: Manage Jenkins -> Configure System
- Jenkins内部shell UTF-8 编码设置,如下图所示
- Jenkins Location和Email设置,如下图所示
- E-mail Notification,设置如下如所示
Jenkins Jobs配置
Jobs基础配置
配置编译参数
例如,如果需要打包者自行选择打包类型,如需要编译Release/Debug/Test等不同版本的包,那需要配置Jobs的编译参数,配置方法如下图所示:
你还可以配置一些其它参数,例如:
配置完后,build界面中就会出现,如下如所示:
配置匿名用户权限
后面打包的应用发布时,如果懒得自己搭建服务器,就用Jenkins的,但发布出去的链接需要登录才能访问,这时候你可以设置匿名用户的访问权限,这样匿名用户可以下载访问你提供的应用链接了,非常取巧的方法,如下图:
Jobs源码库配置(Gitlab为例)
配置SSH
操作: Manage Jenkins -> Credentials -> Global credentials (unrestricted) -> Add Credentials
1.本机生成SSH:ssh-keygen -t rsa -C "Your email" , 生成过程中需设置密码,最终生成id_rsa和id_rsa.pub(公钥)
2.本机添加秘钥到SSH:ssh-add 文件名(需输入管理密码)
3.Gitlab上添加公钥:复制id_rsa.pub里面的公钥添加到Gitlab
4.Jenkins上配置密钥到SSH:复制id_rsa.pub里面的公钥添加到Jenkins(private key选项)
新建Job
在Jenkins中,所有的任务都是以"Job"为单位的。在进行操作前,你需要新建一个Job,Job新建比较简单,只需要在Jenkins管理的首页左侧,点击“New Job”,一般选择free-style software project,再输入Job的名字即可。
配置Gitlab
在新建的任务(Jobs)中,Gitlab源码配置如下图:需要输入git仓库和build分支,公钥使用上面配置SSH生成的公钥。
Jobs触发条件配置
Jenkins支持多种触发器配置,包括:
定期进行构建(Build periodically),定时器使用示例如下:
H(25-30) 18 1-5: 工作日下午6点25到30分之间进行build
H 23 1-5:工作日每晚23:00至23:59之间的某一时刻进行build
H(0-29)/15 :前半小时内每隔15分钟进行build(开始时间不确定)
H/20 :每隔20分钟进行build(开始时间不确定)根据提交进行构建(Build when a change is pushed to GitHub)
定期检测代码更新,如有更新则进行构建(Poll SCM)
Jobs构建方式/编译 配置
Jenkins支持多种编译配置方式,包括:
- Xcode: iOS编译配置(安装Xcode integration插件)
- Invoke Gradle script: Android编译配置(安装Gradle plugin插件)
- Exceute Shell: 脚本方式
Jobs构建后处理
Artifacts和邮件通知配置,参考下图
可借助Email Extension Plugin 插件进行详细配置,具体可参考此文