Android快速开发与体系搭建--持续集成--Gitlab CI

来源:互联网 发布:影视制作软件app 编辑:程序博客网 时间:2024/04/27 14:16

上一节我们已经搭建好了本地的Gitlab的代码托管平台。在创建好将要开发的项目后,我们选择是否配置项目CI(Continuous integration 持续集成)。

了解CI

CI与敏捷开发

首先,持续集成并不是为了敏捷开发而发明的,或者说本意并不是如此。早在敏捷开发形成思路之前,持续开发就被作为最佳实践(best practice)而运用到对产品质量的监控中了。项目中一般都需要定期的对产品质量进行监控,常用的控制方法一般分为两种:

  1. 持续集成:项目在每个提交过程中,联动发布用于测试的版本
  2. 阶段集成:项目每隔一段时间,发布一个用于测试的内部版本

相对于阶段集成来说,敏捷开发的形式更适合持续集成,因为这能更快捷的在开发过程中发现问题,而不是等到阶段交付的时候来个大爆炸。因此,推进敏捷时Martin被所倡导并由此风靡起来。就持续集成本身而言,并不被什么开发模型所限制,在任何一种开发模型中都可以采用,也可以运行得非常理想。

使用CI的好处

在《Code Complete》里提到了,对于持续集成(在书中,Steve McConnell使用Incremental Integration的术语)有以下几点好处:

易于定位错误: 也就是当你的持续集成失败了,说明你新加的代码或者修改的代码引起了错误,这样你很容易的就可以知道到底是谁犯了错误,可以找谁来讨论。
及早在项目里取得系统级的成果:因为代码已经被集成起来了,所以即使整个系统还不是那么可用,但至少你和你的团队都已经可以看到它已经在那了。
改善对进度的控制:这点非常明显,如果每天都在集成,当然每天都可以看到哪些功能可以使用,哪些功能还没有实现。如果你是程序员,你不用在汇报任务的时候说我完成了多少百分比而烦恼,而如果你是项目经理的话,那么你也不再烦恼程序员说完成了编码的50%到底是个什么概念。
改善客户关系:理由同上。
更加充分地测试系统中的各个单元:这也是我们常讲的Daily Build与Smoke Test相结合带来的绝大好处。
能在更短的时间里建造整个系统:这点恐怕要你实施以后才能得出结论。就我们而言,持续集成并没有为每个项目都缩短时间,但却比没有实施时,项目更加可控,也更加有保证。

随着时间的推移,持续集成带来的更多好处,也逐渐被认识到了,比如说:

有助于项目的开发数据的收集:比如说,项目代码量的变化,经常出错的Tests,经常出错的source code,等等。
与其它工具结合的持续代码质量改进:如与CheckStyle, PMD, FindBugs, Fxcop等等等等的结合。
与测试工具或者框架结合的持续测试:如与xUnit,SilkTest, LoadRunner等等的结合。
便于Code Review:在每个build里,我们都可以知道与前一个build之间有什么改动,然后针对这些改动,我们就可以实施Code Review了。
便于开发流程的管理:比如说,要把一个开发的build提交给测试组作测试,测完满意了,再提交到发布组去发布。

可以看出,持续集成能够更好地辅助项目开发、错误检测和产品沟通。它所带来的优点,弥补了敏捷开发过程中,产品快速迭代导致的各种问题,如:代码过度冗余、项目框架不稳定等。

现在,我们来看一下如何在Gitlab上搭建CI。

Gitlab CI 配置

Gitlab CI 是Gitlab为我们提供的一款持续集成程序,在Gitlab安装时默认安装并默认启动。

1. 安装Android编译环境

  • 安装 Android SDK
    如果计算机上没有Android SDK的话,需要下载并配置一下。
    下面是命令行的下载方法:
# 选择一个目录中保存sdk, 如果没有则创建该目录mkdir /nsr/server/android-sdk# 在该目录下载最新的sdkwget http://dl.google.com/android/android-sdk_r24.4.1-linux.tgz# 解压sdktar xfv android*.tgz# 解压完毕后, 切换到`tools`目录下, 以便使用android命令cd /android-sdk-linux/tools/# 查看当前远程库中有哪些版本的sdk和工具./android list sdk# 根据需要安装指定版本的sdk, 这里安装API 18及以上. 多个安装项目可带有项目编号, 用逗号分隔, 例如下面n1,n2,n3. 注意输入的是序号, 而不是API版本号./android update sdk -u -a -t n1,n2,n3# 之后弹出是否接受许可, 输入y后开始下载安装. 这里我用的腾讯云服务器, 结果坑的是下载瞬间完成, 后来发现并没有下载下来, 无奈自己从电脑用FileZilla传到服务器上的.

当然,你也可以通过安装Android Studio的方式,通过AS直接安装好开发环境。这个应该是最简单的方式,毕竟你要开发的话,工具肯定都得装了。

  • 准备Gradle

我们可以直接在脚本中编写Gradle命令,如果没有Gradle, 将会开始下载Gradle和其他依赖包

  • 配置环境变量
# 编辑系统全局配置文件nano /etc/profile# 在最末尾加入环境变量, 注意变量名必须用ANDROID_HOME, 这是Gradle脚本默认识别的export ANDROID_HOME=/usr/server/android-sdk/android-sdk-linux/export PATH=$ANDROID_HOME:$PATH# 保存退出后, 使用以下命令使环境变量生效source /etc/profile# 验证环境变量中是否有android sdk pathecho $PATH

2. 创建并编写.gitlab-ci.yml脚本

该步骤用于告诉Gitlab本项目需要使用CI功能, 并执行.gitlab-ci.yml脚本。

在项目根目录创建一个.gitlab-ci.yml文件. 在其中编写自动构建所需要执行的操作.
脚本的编写格式如下:

# 预执行脚本, 在所有任务执行前所进行的初始化命令before_script:    - cmd1    - cmd2# 构建任务, 在before_script后执行, 多个构建任务会分别执行.# 这是任务A, 任务名可以任意job_a:    script:        - cmda1        - cmda2# 这是任务Bjob_b:    script:        - cmdb1        - cmdb2

例如:

# 自动编译一个debug apkjob_build_debug_apk:    script:        - ./gradlew assembleDebug    artifacts:        paths:            - app/build/outputs/apk/*.apk# 这里面:# job_build_debug_apk 为构建任务名# artifacts 表示build后需要上传的文件# path 用于指定上传文件的路径,这里我们将编译生成的apk上传

脚本编写完后, 可以使用Build中右上角的CI Lint功能检查语法.

语法没有问题则可以push到项目中, 此时查看项目的Build中就会有你所编写的任务. 不过他们目前是pending状态, 因为我们还没有安装runner来运行.

2. 安装并配置runner

该步骤用于安装runner来执行.gitlab-ci.yml脚本。

参考官方文档

  • 下载脚本:
# For Debian/Ubuntucurl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.deb.sh | sudo bash# For RHEL/CentOScurl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash
  • 安装脚本:
# For Debian/Ubuntusudo apt-get install gitlab-ci-multi-runner# For RHEL/CentOSsudo yum install gitlab-ci-multi-runner
  • 注册runner:
sudo gitlab-ci-multi-runner register

注册时会要求你按步骤输入一些信息,用于将runner与对应的Gitlab关联起来。信息可以在点击Runner后看到。 按照提示输入相关信息,注册内容关键是url地址和token。 注意executor如果你不确定选哪种就选择shell即可。

sudo gitlab-ci-multi-runner registerPlease enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )https://gitlab.comPlease enter the gitlab-ci token for this runnerxxxPlease enter the gitlab-ci description for this runnermy-runnerINFO[0034] fcf5c619 Registering runner... succeededPlease enter the executor: shell, docker, docker-ssh, ssh?dockerPlease enter the Docker image (eg. ruby:2.1):ruby:2.1INFO[0037] Runner registered successfully. Feel free to start it, but if it'srunning already the config should be automatically reloaded!

至此Runner安装成功并且已经开始运行。我们再看项目中的Build可以看到任务已经执行完毕,并给出了过程和结果。

Gitlab CI 使用

更新CI:

直接执行下面这段代码即可

# For Debian/Ubuntusudo apt-get updatesudo apt-get install gitlab-ci-multi-runner# For RHEL/CentOSsudo yum updatesudo yum install gitlab-ci-multi-runner

引用Build badge:

可以通过以下地址引用最新的Build结果, 一般我们会放在README中.

其中example.gitlab.com需要改为自己的Gitlab域名, namespace需要改为你的用户名, project需要改为项目名称, branch需要改为分支名称.

http://example.gitlab.com/namespace/project/badges/branch/build.svg
0 0
原创粉丝点击