持续集成(CI)介绍
持续集成自动从代码服务器拉取代码,完成自动编译、测试、分发和部署等工作;出现错误时及时通知开发人员,使问题可以立即得到解决,降低项目风险。
Jenkins是一款很流行的持续集成工具,配置简单,结合一些插件和命令行工具可以完成很多工作。
Mac系统同样有一款持续集成工具OS X Server,配置简单,但功能无法扩展,其只能自动完成编译构建、静态代码分享、运行单元测试和打包归档四个工作。
Jenkins安装与配置
安装
- 从官网下载Mac OS X的安装包
- 执行安装程序后会创建
jenkins用户,主目录位于/Users/Shared/Jenkins;Jenkins以系统守护进程方式运行,可查看/Library/LaunchDaemons/org.jenkins-ci.plist配置文件了解详细信息。 Jenkins默认无密码,可使用“sudo passwd jenkins”命令设置密码- 打开Jenkins管理页面
http://localhost:8080/,端口默认为8080,可在管理页面修改。
安全设置
系统管理–>Configure Global Security,默认启用安全没有勾选。
- 勾选
启用安全 安全域中选择Jenkins专有项目数据库,并勾选允许用户注册。授权策略中选择项目矩阵授权策略; 设置匿名用户为Read权限;添加一个用户名,给予全部权限(该用户稍后创建)。- 重启Jenkins, http://localhost:8080/restart
- 重启后使用
Login->create an account使用之前输入的用户名创建账号。

在错误的设置安全域、授权策略时,会无法登录到Jenkins管理页面修改配置,可通过下面的方法修复。
- 停止Jenkins(杀进程)
- 在
$JENKINS_HOME目录(通常为/Users/Shared/Jenkins/Home)中找到config.xml文件 - 打开此文件,将
<useSecurity>true</useSecurity>的true修改为false - 删除
authorizationStrategy、securityRealm节点 - 重启Jenkins,这时会恢复到没有
启用安全的情况。
安装插件
在系统管理->管理插件中可安装必要的插件。
我们需要安装git插件Git Client Plugin、Git Server Plugin,
Xcode插件Xcode integration。
启动、关闭与重启
对于登录用户,可以直接使用Jenkins的管理url。
http://localhost:8080/exit
http://localhost:8080/restart
http://localhost:8080/reload
杀掉jenkins进程
ps -e | grep jenkins
53 ?? 0:02.51 /usr/bin/java -jar /Applications/Jenkins/jenkins.war
392 ttys000 0:00.00 grep jenkins
sudo kill 53
使用launchctl
sudo launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist
sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist
自动化构建
在Jenkins中,任务是以Job为单位的,在管理页面点击新建,输入Item名称,
并选择项目类型为构建一个自由风格的软件项目,点击OK后就进入了Job设置页面。
源码管理
可以根据需要设置从svn或者git获取源码。
对于git需要设置
- Repository URL: 仓库URL
- Credentials: 用户名、密码
- Branches to build:需要构建的分支
- Additional Behaviours:其它需要执行的git操作,在必要的时候可以设置。
对于svn需要设置
- Repository URL: 仓库URL
- Credentials: 用户名、密码
- Check-out Strategy: check-out的策略,可以直接
svn update、在update之前执行svn revert或者获取一份全新的拷贝。
构建触发器
设置构建触发条件,其中Build periodically可以在指定的时间触发构建,在进行每日构建时可以设置,构建时间使用类cron的语法。
也可以不设置触发器,手工触发构建任务。
构建
在构建步骤中可以使用Exeute shell执行任意构建任务,对于iOS项目,我们可以使用Xcode插件简化构建流程。
Xcode
General build settings
指定需要构建的target,不指定会构建所有的targets;在Setting中还有一系列构建的设置。
Clean before build?在build前是否先cleanGenerate Archive?是否生成xcarchive文件Configuration构建使用的配置Pack application and build .ipa?是否打包ipa文件.若选择打包ipa文件,则还需要设置ipa文件名pattern,在名称中可使用:
- 版本号
${SHORT_VERSION}, - build号
${VERSION} - 构建日期
${BUILD_DATE},日期格式为yyyy.MM.dd
比如可设置为
MyApp_${SHORT_VERSION}_build${VERSION}_${BUILD_DATE},那么生成的文件名格式为MyApp_v1.0_build10_2014.05.17.ipa。- 版本号
Output directory相对于build目录的ipa文件生成目录。
Code signing & OS X keychain options
代码签名及KeyChain设置
Code Signing Identity用于签名的开发者标识,可以在keychain中查看,名称格式为”iPhone Developer: your_name (XXXXXXX)”Unlock Keychain?解锁keychain,设置Keychain path与Keychain password,Keychain path设置为${HOME}/Library/Keychains/login.keychain。
注:Jenkins以jenkins用户运行,其用户目录在/Users/Shared/Jenkins,若Jenkins在开发电脑上安装,实际上Xcode编译所需要的
keychain、Provisioning Profiles等信息都在原登录用户下,自动构建时就会报代码签名错误。可通过以下步骤解决:
在”Keychain Access”应用中将开发者证书从”login”拷贝到”sysmtem”。
在”Keychain Access”中的login tab中,右键点击证书“iPhone Developer: your_name (XXXXXXX)”,选择“拷贝xxxx”;然后在system tab中右键点击,选择”粘贴2项”。
将主用户目录下的
KeyChains目录拷贝到jenkins用户目录下
/Users/YourName/Library/Keychains–>/Users/Shared/Jenkins/Library/Keychains
- 将主用户目录下的
MobileDevice目录拷贝到jenkins用户目录下,MobileDevice中有Devices和Provisioning Profiles两个子目录。
/Users/YourName/Library/MobileDevice–>/Users/Shared/Jenkins/Library/MobileDevice
Execute shell
可以在构建步骤中的任意位置执行脚本,比如在Xcode插件之前执行脚本设置必要的编译环境,执行单元测试,在Xcode插件打包ipa文件后, 将文件上传到后台服务部署分发等。
比如,可增加”Execute shell”将打包文件上传后台服务器。
1 2 3 4 5 6 7 8 | |
构建后操作
增加设置构建完成后进行的步骤,可发布测试报告、邮件通知等。