自动化是 DevOps 里非常重要的一环,应儘可能的把流程都自动化。我们可以透过Jenkins等CI工具来达成以下的自动化。
自动单元测试
自动UI测试
自动程式码检核
自动发布Beta App给测试人员
自动签署APK
自动发布App至Google Play
透过Slack、Email即时通知
你可以参考我的实体书,更完整的自动化流程
天珑网路书店:Android TDD 测试驱动开发:从UnitTest、TDD到DevOps实践
而这篇将介绍 Jenkins 这个 CI 工具来进行自动测试。
Jenkins是一个功能强大的持续整合工具,有丰富的外挂可以供开发人员使用,可以将建置专案、测试、分析及部署等工作自动化,让App工程师可以专注在开发及撰写单元测试。
安装 Homebrew
Jenkins需要透过Homebrew来安装。Homebrew是一个可以方便在Mac上管理套件的工具。
在「终端机」上输入指令,安装HomeBrew。
/usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
安装Jenkins
HomeBrew安装完后,接着在终端机输入以下指令来安装Jenkinsbrew install jenkins
安装完成后,输入启动 Jenkins的指令:brew services start jenkins
启动完成后,在浏览器输入网址 http://127.0.0.1:8080/就可以开启Jenkins。在第一次启用时需要输入管理员密码。
在这个目录下 /Users/{UserName}/.jenkins/secrets/initialAdminPassword
可以找到预设的管理员密码。
回到Unlock Jenkins的网页上输入 Administrator password 。
因为.jenkins是一个隐藏的资料夹,如果在目录下看不到的话,请先开启Finder,按下 Shift + command + >,即可显示隐藏档。
Jenkins启动之后,勾选要安装的功能后点选Install。
安装完成后,输入First Admin User 资料。
看到Jenkins is ready就代表完成了。
环境设定
Jenkins启动后,将会依照你的浏览器语言作为预设语言,Jenkins的中文翻译还不是很完整,我们把它调整为英文。在后续的说明会比较一致。
点选管理Jenkins,点选管理外挂程式,安装Locale。
回到管理Jenkins里,点选设定系统,预设语言输入en_US,勾选下方的Ignore browser preference and force this language to all users。设定完成后,Jenkins就会成功调整为英文了。
再次回到Jenkins首页,就可以看到都是用英文显示了。
设定Android Home
在Jenkins首页,点选 Manage Jenkins,点选Configure System。在Global properties里设定Android_Home。如果你已经安装Android Studio,Android SDK 会被安装在:/Users/{UserName}/Library/Android/sdk
。
设定ANDROID_HOME
管理外挂程式
Jenkins可以透过安装不同的外挂来强化功能。
安装Gradle Plugin。Gradle可以用在Android专案的编译、测试及检查程式码。安装Gradle Plugin就可以在Jenkins执行Gradle指令。
安装外挂Gradle Plugin
安装 Git Plugin
安装完之后,需要再设定git路径。在Manage Jenkins -> Global Tool Configuration设定Git的路径。你可以在终端机输入$ which git,查询git在本机的安装路径。
自动建置Android专案
当开发人员将程式码合併到储存库时,我们希望Jenkins能自动从Git Server下载程式码并建置。这个建置是非常基本且重要的,当有程式码提交而无法编译成功时,你可以马上发现错误。越早发现,就越早修正。
Jenkins首页的左边功能列,点选New Item(新增作业)。
输入Item Name,也就是作业名称,点选 Freestyle project 后,再点选下方的「OK」。
Source Code Management
在Source Code Management的Repository Url 填入Git Repository 网址。如果你的Repository不是公开的,则需要在Credentials新增帐号及密码资讯。接着在Branch Specifier 输入要Pull的分支。
Builder Trigger (建置触发程序)
设定完程式码储存库的路径后,接着从Builder Trigger去设定执行的时机,勾选Poll SCM。我们先指定每10分钟执行一次。
Schedule里的5个数字依序为:
分:一小时中的第几分钟。
时:一天中的第几小时。
日:一个月的第几天。
月:一年中的第几月。
星期:星期几,0、7都代表星期日。
*代表适用所有数字
例:每天晚上8点建置
0 20 * * *
例:每30分建置一次
H/30 * * * *
例:週一到週五,每天的9:00~18:00,每隔两小时建置一次
0 9–18/2 * * 1–5
建置专案
接着设定建置专案,在Build里点选 Add build step ,接着选择Invoke Gradle script,这表示着我们将使用Gradle指令来建置专案。
选择Use Gradle wrapper,在Tasks 输入指令 build,这里的build 指令就如同你在Android Studio 上执行build Project是一样的。
储存后,Jenkins专案内容页。点选Build Now,就会马上开始建置了。
执行之后,在Build History可以看到正在建置中。第一次建置通常会花比较多时间,因为还要从程式码储存库下载程式码。
执行完后看到蓝灯,代表建置成功。蓝色Icon的#1则代表第1次建置。
点进去可看到详细建置过程及结果Console Output。
回到首页,你可以在任务的列表,看到刚刚建立的First Build。同样会显示上一次的建置结果为蓝灯。
S指的是Status,W指的是Weather。当S呈现红色表示建置失败,而W表示近期建置的状况。
当有失败的时候,也不要害怕,建置失败是一件很平常的事情。而这也正是我们的目的:即早发现错误,并修正。如果有失败,应儘速将失败的建置修正,再开始新的任务。而如果无法快速修复,应儘快将它恢复到前一个可用的版本。
最后建置的专案被下载在/Users/{Use}/.jenkins/workspace/{ProjectName}
,你可以在这里找到被下载的程式码
查看测试报表
Jenkins 也能用来自动执行单元测试。建置指令build就包含建置专案与执行单元测试。你可以在 app/build/reports/tests/testDebugUnitTest/index.html
这个路径找到单元测试的结果。
从测试报告呈现了成功及失败的数量、测试成功的百分比。你可以依照Packages或Classes分类来看。
点进去Package的Classes里,可以再看到每一个测试案例的结果及执行时间。
如果失败的话,也能看到哪些测试案例是失败的。
完整的Android自动化:你可以参考我的实体书
天珑网路书店:Android TDD 测试驱动开发:从UnitTest、TDD到DevOps实践
自动单元测试、自动UI测试、自动程式码检核、自动发布Beta App给测试人员、自动签署APK、自动发布App至Google Play、透过Slack、Email即时通知。
Android 线上课程
Android 动画入门到进阶
Android UI 进阶实战(Material Design Component)
medium:
https://medium.com/@evanchen76