Android项目cicd流程总结(使用jenkins)
没有cicd之前我们都是怎么做的
相信做安卓开发的都做过这些事
- 手动运行单元测试,根据报错改代码
- 检查代码风格,根据报错改代码
- 构建apk包,发给测试,有时候还得打很多个
- 接收测试的反馈,改bug,
- 重复之前的步骤
- 把apk放到ftp或者其他地方去发布
是不是想到这一套流程,头都大了,虽然每一步都不难,但是连起来都手工操作就很繁琐
像这些手动流程固定的事,我们完全就可以交给机器来做,让我们有更多时间做点别的事,没错,这就是今天要说的cicd
什么是cicd,以及在cicd过程中包含了哪些步骤
一般来说,安卓开发的CI/CD流程包括以下几个阶段:代码提交、代码检查、编译构建、单元测试集成测试、部署发布、用户反馈。
- 在代码提交阶段,开发者将自己的代码推送到远程仓库,例如Git或SVN,并触发CI/CD工具或平台例如Jenkins或Travis CI等
- 在代码检查阶段,CI/CD工具或平台会对代码进行静态分析和风格检查,例如使用SonarQube或Checkstyle等。
- 在编译构建阶段,CI/CD工具或平台会使用Gradle或Maven等工具对代码进行编译和打包,生成APK文件
- 在单元测试阶段,CI/CD工具或平台会使用JUnit或Espresso等框架对代码进行单元测试,并生成测试报告。
- 在集成测试阶段,CI/CD工具或平台会使用Appium或Selenium等框架对应用进行集成测试,并生成测试报告
- 在部署发布阶段,CI/CD工具或平台会将APK文件上传到内部服务器或外部平台,例如蒲公英或Google Play等,并通知相关人员。
- 在用户反馈阶段,开发者可以通过Bugly或Firebase等工具收集用户的反馈和错误信息,并根据需要进行修复和更新
通过以上几个步骤,我们可以把以前的app构建流程从手动变为自动,而且可以通过不断以非常低的成本的重复这个过程,提高我们的项目质量,这就是cicd带给我们的自信
今天我们来通过jenkins来实现上面的几个步骤
安装配置jenkins
本文讨论的主要是在windows环境下安装jenkins
- 从jenkins官网下载对应的安装包即可
- 安装过程很简单但是需要提供一个账号,就像下图显示的界面,这个账号需要有权限
打开开始菜单,搜索本地安全策略
,选择本地策略
、用户权限分配
,在右侧的策略中找到作为服务登录
,双击打开。点击添加用户或组
,在输入框中填入你的账户的名字,单击检查名称
,如果加上了下划线,则说明没有问题,如果输入的用户不存在,则会跳出来一个找不到名称
的对话框。
这里需要注意一点,windows家庭版默认是没有本地安全策略的,需要用一些技巧把它开启,如下:
1. 在桌面上单击右键,选择“新建”->“文本文档”。
2. 将文本文档重命名为“OpenLocalSecurityPolicy.bat”。
3. 右键单击“OpenLocalSecurityPolicy.bat”,选择“编辑”。
4. 将以下命令复制并粘贴到文本编辑器中:
@echo off
pushd "%SystemRoot%\system32"
findstr /c:"[SR] Cannot repair member file" %windir%\logs\cbs\cbs.log >%userprofile%\Desktop\sfcdetails.txt
start ms-settings:windowsdefender
start ms-settings:windowsupdate
start ms-settings:windowsupdate-history
start ms-settings:windowsupdate-options
start ms-settings:storagesense
start ms-settings:storagesense-diagnostics
start ms-settings:storagesense-configurecleanup
start ms-settings:storagesense-changehowwesave
start ms-settings:storagesense-runstoragecleanupnow
start ms-settings:storagesense-storageusage
start ms-settings:storagesense-changestoragesavelocations
start ms-settings:backup
start ms-settings:backup-advancedsettings
start ms-settings:backup-addalocaldriveornetworklocation
start ms-settings:backup-managebackups
start ms-settings:backup-moreoptions
start ms-settings:dateandtime
start ms-settings:regionlanguage
start ms-settings:regionlanguage-languagepacks
start ms-settings:regionlanguage-speech
start ms-settings:regionlanguage-keyboards
start ms-settings:regionlanguage-morespeechservicesonline
start ms-settings:speech
start ms-settings:speech-microphoneprivacysettings
5. 保存并关闭文本编辑器。
6. 双击“OpenLocalSecurityPolicy.bat”文件,以打开本地安全策略。
- 修改默认根地址到其他盘符
默认情况下,jenkins的主目录都是在c盘,如果这样,我们使用中产生的数据都是在c盘,用过windows的都知道,数据放在c盘是很危险也是很让人不爽的一件事,我们可以通过修改jenkins的主目录方法来把数据放到其他盘
在成功安装了jenkins并解锁之后,我们可以配置环境变量JENKINS_HOME,地址就是我们想改的目录,
<env name="JENKINS_HOME" value="%LocalAppData%\Jenkins.jenkins"/>
改为
<env name="JENKINS_HOME" value="E:\jenkins"/>
- 配置常用的插件
在第一次启动jenkins的时候,会让你选择安装哪些插件,这时候直接选择推荐的插件就好,包含了一些常用插件,比如git等等,如下图
配置针对于android的环境
gradle – Dashboard -> Manage Jenkins -> Global Tool Configuration中的Gradle配置gradle路径即可
jdk – Dashboard -> Manage Jenkins -> Global Tool Configuration中的JDK配置jdk路径即可
git – Dashboard -> Manage Jenkins -> Global Tool Configuration中的Git installations配置git路径即可
配置Android的具体job信息
新建一个freestyle的item,在里面做以下几步:
配置git仓库地址以及构建分支
设置构建触发器(定时构建) – 找到构建触发器,勾选build periodically,在编辑框里按照规则设置构建时间,在某天的某个时段自动构建,比如45 9-15/2 * * 1-5,虽然可以提交一次就构建一次,但是不建议这么做。构建表达式的规则见下图,可以根据自己的需要写表达式。
配置构建后步骤,自动把apk包上传到ftp或者其他地方
在Jenkins的项目中,选择“构建”->“增加构建步骤”->“执行shell”或“执行Windows批处理命令”
一个上传ftp的例子ftp -n <<EOF open ftp.example.com user username password cd /remote/directory put /local/file bye EOF
配置邮件通知
在构建完成之后,特别是失败的时候,我们希望收到一封邮件告诉我们构建失败了,快去处理,我们可以通过以下步骤来实现
- 在Jenkins中安装Email Extension Plugin插件,可以在插件管理中搜索并安装。
- 在Jenkins的系统管理中,配置邮件服务器的地址,用户名,密码和端口。如果使用的是QQ邮箱或者163邮箱,还需要获取邮箱授权码并使用授权码作为密码。
- 在Jenkins的项目中,选择“构建后操作”->“增加构建后操作”->“Editable Email Notification”。
- 在邮件通知的配置中,填写收件人,抄送人,邮件主题,邮件内容等信息。可以使用一些变量来自定义邮件内容,例如BUILDSTATUS表示构建状态,BUILDSTATUS表示构建状态, {BUILD_URL}表示构建链接等。
这里特别要注意的是,上面的配置地址和授权码需要在job的设置里面进行,在全局配置有可能发不出邮件
配置单元测试和代码检查
我们还需要在运行前执行代码lint检查和单元测试,也需要配插件,插件名字是JUnit和Warnings Next Generation
- 参考上面 配置Android的具体job信息 中的配置,添加lint和单元测试的任务
- 配置单元测试插件和lint插件,主要指定报告文件的位置,见下图
- 把单元测试的结果放到邮件的附件中去,配置见下图,也可以放些别的东西
一劳永逸,使用docker把上面的配置做到随时随地使用
上面的步骤完成之后,我们就能自动构建,上传apk什么的了,但是每次换台机器我们都得再配一次,想下就很累,这时候我们就可以用docker,创建一个容器,把上面这些操作放在容器里面,在新环境里面拉个镜像,创建容器跑起来,就ok啦,关于怎么用docker,就需要大家自己去搜索学习了