如何利用jenkins与蒲公英实现全面自动化打包
在开发的时候,每一个版本结束之后都要将工程代码打包成ipa文件,然后分发给测试团队进行测试,每次改一个小bug都要打一次包,实在是效率太低了,为了解决这个问题,于是想通过配置jenkins与蒲公英平台实现全自动的打包化,从此之后开发人员就不用再关注打包这种繁琐而没有意义的事情上,可以更专心的开发工作,最终要实现以下目标:
当开发人员将代码改好上传到svn或者git仓库管理器上之后,jenkins会自动的去查询是否有代码的改动,如果代码有改动就会将目标工程进行打包,打包之后再将包文件上传到蒲公英平台,再通过邮件的形式告知所有测试人员,邮件中包含蒲公英的下载链接,点击便可安装,这样一来开发人员就不必去关心打包工作,只需要将修改的代码上传到svn或者git就好。
主要步骤:
1 jenkins的安装
有两种方法来安装jenkins,分别是:
方式1: 通过去官网下载pkg包安装;
方式2: 通过homeBrew命令行安装:
brew install jenkins
通过两种方式安装有几点不同:
1 安装的目录不一样;
2 卸载的方式不一样,如果是方式一安装的则需要到目录下找到uninstall程序点击卸载,如果方式2安装的则直接在命令行执行:
brew uninstall jenkins
极力推荐第二种方式,方便快捷。
在安装过程中按照提示一步一步执行便可;成功之后,直接在浏览器地址栏中输入:localhost:8080即可;
第一次进入的时候需要设置账号密码之类的信息,设置完成之后便可以通过账号密码登录进去。
如果需要退出jenkins直接在端口后面添加exit,重启添加restart,重新加载reload;
2 Fastlane
是一套使用Ruby写的自动化工具集,目的是为了简化安卓与IOS的部署过程,自动化工作流。
1 安装xcode命令行工具
xcode-select --install
如果是直接在mac上使用了xcode工程的话一般都是默认装好的,就可以直接进行第二步;
2 安装Fastlane
sudo gem install fastlane -NV 或者 brew cask install fastlane
建议使用gem安装,安装执行
fastlane --version
便可确认是否安装完成和当前使用的版本号。不过在这个过程中可能会遇到一些问题,比如JDK版本过高或者过低,此时就要下载对应的版本下载,总之遇到具体问题具体分析,通常看到提示都是能够解决的。
3 初始化fastlane
通过终端命令cd+目录,直接跳到工程目录,执行:
fastlane init
成功之后工程文件中会多出几个文件,如下图:
其中Fastfile则是我们应该操作的文件,在文件中编写:
platform :ios do
desc "Description of what the lane does"
lane :custom_lane do
# add actions here: https://docs.fastlane.tools/actions
end
lane :beta do
build_app(export_method: "ad-hoc")
pgyer(api_key: "f9467c727eb065b322341c6c49f22aac", user_key: "fa31dbf8cd6bcc6ef0d6c1b01bce1788")
end
end
其中ad-hoc指的是包的格式,同时还设置了蒲公英的api_key和user_key,这两个值直接到蒲公英官网实名注册一下就可以获得了。
在执行beta do都命令时可能会经历很多次失败,但是不要放弃,从log中寻找失败的原因,然后再一步一步的解决这个问题,可能是因为没添加证书,插件版本过低等,耐心的一个一个解决即可。
想要上传到蒲公英还需要安装它的插件,执行命令行:
fastlane add_plugin pgyer
为了避免每次新建项目都要执行fastlane init命令,可以将固定的几个文件和工程文件一起上传到svn中,这样一来就不用每次都执行fastlane init命令了。
3 配置jenkins
基础工作基本已经搭建完成之后,就要进行实际的操作了,登录到localhost:8080
1 新建一个任务,选择*风格的软件项目即可;
2 进入系统管理-系统设置
通过全局属性中的环境变量,设置好将来可以接受邮件的邮箱地址和将来工程的目录地址,这里可以设置很多参数,只要是在多处用到的都可以在这里设置。
设置好系统管理员的邮件地址,这里要注意一个问题就是,如果是qq邮箱的话可能会遇到第三方的授权码问题,那么此时简单的设置邮箱密码是不能够发送邮件成功的。
这里设置好发送邮件和密码,也就是发件人的账户密码,而且必须正确,不然会发送邮件失败,不同的邮箱都要不同的STMP server,具体问题具体分析,此处是163的,所以设置smtp.163.com即可。
系统配置到这里就差不都了,不过这里的东西很多,我只是简单的配置了一下,如果要想实现更复杂的功能就要配置更多了,以后有机会可以更详细的研究一下。
4 配置我的任务
进入我的任务-配置
因为我使用的是svn,所以选择subversion,Repository URL是svn上对应项目的地址,选择svn-Edit-Copy URL复制出工程的地址,Credentials是svn获取代码的账户与密码,也必须正确才行,不然拉取不到代码。
通过轮训来检查svn对应工程的代码是否有改变,如果有改变就执行构建动作,H/3….表示三分钟检查一次,具体格式可以点击右侧的问号查询。
执行终端命令行,首选cd到具体工程目录下,然后执行fastlane beta命令,直接执行先前设置好的打包成具体格式,如ad-hoc类型的包,然后上传到蒲公英平台上去。
最后便是构建后操作,此处可以设置构建后的具体操作,可以通过邮件的形式将结果发送给具体的人员,比如成功之后便可以将成功格式的数据发送给开发和测试人员,失败之后便只将结果发送给开发人员等等,这里的设置很多,扩展性也很大,看自己的需求了。
邮件的内容需要自己编写,此处选择的是html格式,如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>${PROJECT_NAME}-第${BUILD_NUMBER}次构建日志</title>
</head>
<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4"
offset="0">
<table width="95%" cellpadding="0" cellspacing="0"
style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
<tr>
<td>(本邮件是程序自动下发的,请勿回复!)</td>
</tr>
<tr>
<td><h2>
<font color="#0000FF">构建结果 - ${BUILD_STATUS}</font>
</h2></td>
</tr>
<tr>
<td><h4>
<font color="#0000FF">内网测试安装地址:http://www.pgyer.com/pxw_ios_inner</font>
</h4></td>
</tr>
<tr>
<td><h4>
<font color="#0000FF">iOS用户版V5.11.1 .ipa文件SVN目录: svn://192.168.1.200/ios/xw-ios-ipa/xw-customer-ipa/V5.11.1
</font>
</h4></td>
</tr>
<tr>
<td><br />
<b><font color="#0B610B">构建信息</font></b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td>
<ul>
<li>项目名称 : ${PROJECT_NAME}</li>
<li>构建编号 : 第${BUILD_NUMBER}次构建</li>
<li>SVN版本 : ${SVN_REVISION}</li>
<li>触发原因: ${CAUSE}</li>
<li>构建日志: <a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
<li>构建 Url : <a href="${BUILD_URL}">${BUILD_URL}</a></li>
<li>工作目录 : <a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li>
<li>项目 Url : <a href="${PROJECT_URL}">${PROJECT_URL}</a></li>
</ul>
</td>
</tr>
<tr>
<td><b><font color="#0B610B">Changes Since Last
Successful Build:</font></b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td>
<ul>
<li>历史变更记录 : <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a></li>
</ul> ${CHANGES_SINCE_LAST_SUCCESS,reverse=true, format="Changes for Build #%n:<br />%c<br />",showPaths=true,changesFormat="<pre>[%a]<br />%m</pre>",pathFormat=" %p"}
</td>
</tr>
<tr>
<td><b>Test Informations</b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td><pre
style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">Total:${TEST_COUNTS,var="total"},Pass:${TEST_COUNTS,var="pass"},Failed:${TEST_COUNTS,var="fail"},Skiped:${TEST_COUNTS,var="skip"}</pre>
<br /></td>
</tr>
<tr>
<td><b><font color="#0B610B">构建日志 (最后 100行):</font></b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td><textarea cols="80" rows="30" readonly="readonly"
style="font-family: Courier New">${BUILD_LOG, maxLines=100}</textarea>
</td>
</tr>
</table>
</body>
</html>
在邮件中通过蒲公英的网址通过二维码扫描便可以下载app进行安装了。
至此,jenkins的配置也算是基本完成了,不过这些只是很简单的配置,如果想要实现更多功能则需要更深入的研究了,在整个过程中每一步都有可能遇到问题,此时不要放弃,耐心的查找问题的来源和解决方案,到最后一定可以成功的。