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

上一节我们已经搭建好了本地的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
# 在该目录下载最新的sdk
wget http://dl.google.com/android/android-sdk_r24.4.1-linux.tgz
# 解压sdk
tar 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 path
echo $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
# 这是任务B
job_b:
    script:
        - cmdb1
        - cmdb2

例如:

# 自动编译一个debug apk
job_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/Ubuntu
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.deb.sh | sudo bash

# For RHEL/CentOS
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash
  • 安装脚本:
# For Debian/Ubuntu
sudo apt-get install gitlab-ci-multi-runner

# For RHEL/CentOS
sudo 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 register

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
https://gitlab.com
Please enter the gitlab-ci token for this runner
xxx
Please enter the gitlab-ci description for this runner
my-runner
INFO[0034] fcf5c619 Registering runner... succeeded
Please enter the executor: shell, docker, docker-ssh, ssh?
docker
Please enter the Docker image (eg. ruby:2.1):
ruby:2.1
INFO[0037] Runner registered successfully. Feel free to start it, but if it's
running already the config should be automatically reloaded!

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

Gitlab CI 使用

更新CI:

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

# For Debian/Ubuntu
sudo apt-get update
sudo apt-get install gitlab-ci-multi-runner

# For RHEL/CentOS
sudo yum update
sudo 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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会尽力回答你的问题。以下是一个超简单配置Android持续集成自动化打包流程 - GitHub+GitLab-CI+蒲公英+钉钉 的步骤: 1. 在 GitHub 创建一个新的 repository,将你的 Android 项目代码上传到该仓库中。 2. 在 GitLab 中创建一个新的项目,并将该项目与 GitHub 中的相应仓库进行关联。 3. 在 GitLab 中创建一个新的 .gitlab-ci.yml 文件,用于配置持续集成自动化打包流程。以下是一个示例文件: ```yml image: openjdk:8-jdk stages: - build - deploy before_script: - chmod +x ./gradlew build: stage: build script: - ./gradlew assembleDebug artifacts: paths: - app/build/outputs/apk/debug/app-debug.apk deploy: stage: deploy script: - curl -F "file=@app/build/outputs/apk/debug/app-debug.apk" -F "uKey=YOUR_UKEY" -F "_api_key=YOUR_API_KEY" https://www.pgyer.com/apiv2/app/upload - curl -X POST -H 'Content-type: application/json' --data '{"msgtype":"text","text":{"content":"Android自动化打包完成,请前往蒲公英下载最新版本!"}}' https://oapi.dingtalk.com/robot/send?access_token=YOUR_ACCESS_TOKEN ``` 4. 在蒲公英网站中创建一个新的应用,并将该应用的 uKey 和 api_key 配置到 .gitlab-ci.yml 文件中的 deploy 阶段中。 5. 在钉钉开发者后台中创建一个新的机器人,并将该机器人的 access_token 配置到 .gitlab-ci.yml 文件中的 deploy 阶段中。 6. 确保 GitLab CI/CD Runner 已经正确地安装在你的 Android 项目所在的服务器上,然后在 GitLab 中启用 Runner。 7. 每次你向 GitHub 中的仓库提交新的代码时,GitLab CI/CD Runner 将会自动触发持续集成自动化打包流程,并将最新的 APK 文件上传到蒲公英网站,并通过钉钉机器人发送通知消息。 希望这些步骤能够对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值