超简单配置Android持续集成自动化打包流程 - GitHub+GitLab-CI+蒲公英+钉钉
我的Github:github.com/BzCoder
GitLab-CI的相关语法:fennay.github.io/gitlab-ci-c…
欢迎各位留言讨论
场景
为了优化工作流程,解放开发人员双手,不整天被【帮我打一个测最近的包】这种琐碎的事儿打乱工作的节奏,这两天就研究了下有关于Android持续集成的东西,特此记录。我们项目是存放在GitHub的私有仓库,现在有三个持续集成自动化打包的方案:
- Travis CI:Github亲儿子,它对于开源库是免费使用,但是针对GitHub私有库的持续集成是收费的。
- Jenkins:功能强大,使用灵活,但是Jenkins配置的复杂度和部署成本都相对比较高,有学习成本,但是一个不错的方案。
- GitLab CI:非常简单,完全免费,且完全不需要配置额外服务器资源的方案,支持私有仓库,学习成本低。
本着薅资本主义羊毛的原则,我们来介绍下这个方案。
工具集
- GitHub:世界最大代码托管平台,世界最大程序员交友平台。
- GitLab:很多功能都比GitHub好,但是可惜用的人没有GitHub多,但是很多公司都把他私有化部署。
- GitLab-CI:配合GitLab平台的持续继承平台。
- 蒲公英:国内知名APP内测分发平台。
- 钉钉:阿里出品办公软件,我们主要使用机器人功能进行相关人员通知。
总体流程
简单地了解了工具,接下来我们就开始持续集成之旅。
同步代码到GitLab
首先要将GitHub上的代码转移一份到GitLab上,并且保持同步。万幸的是,这最关键的一部,贴心的GitLab已经搞定了。 【登录Gitlab】【New project】 【CI/CD for external repo】【GitHub】,只要经过授权,GitLab就可以获取到你GitHub帐号下所有的仓库。选择【Connect】后即可同步你的GitHub项目到GitLab。
配置GitLab-CI
配置GitLab-CI其实十分简单,我们只要将GitLab-CI的持续集成脚本文件.gitlab-ci.yml
加入到我们工程的根目录即可,如果你是想即拿即用,那么你只需要复制粘帖以下代码,替换相关Key值与SDK,JDK版本即可。
image: openjdk:8-jdkvariables:ANDROID_COMPILE_SDK: "28"ANDROID_BUILD_TOOLS: "28.0.2"ANDROID_SDK_TOOLS: "4333796"before_script:- apt-get --quiet update --yes- apt-get --quiet install --yes wget tar unzip lib32stdc++6 lib32z1- wget --quiet --output-document=android-sdk.zip https://dl.google.com/android/repository/sdk-tools-linux-${ANDROID_SDK_TOOLS}.zip- unzip -d android-sdk-linux android-sdk.zip- echo y | android-sdk-linux/tools/bin/sdkmanager "platforms;android-${ANDROID_COMPILE_SDK}" >/dev/null- echo y | android-sdk-linux/tools/bin/sdkmanager "platform-tools" >/dev/null- echo y | android-sdk-linux/tools/bin/sdkmanager "build-tools;${ANDROID_BUILD_TOOLS}" >/dev/null- export ANDROID_HOME=$PWD/android-sdk-linux- export PATH=$PATH:$PWD/android-sdk-linux/platform-tools/- chmod +x ./gradlew# temporarily disable checking for EPIPE error and use yes to accept all licenses- set +o pipefail- yes | android-sdk-linux/tools/bin/sdkmanager --licenses- set -o pipefailstages:- buildassembleDebug:stage: buildonly:- masterscript:- ./gradlew assembleDebug- curl -F "file=@app/build/outputs/apk/debug/app-debug.apk" -F "uKey=蒲公英uKey" -F "_api_key=蒲公英api_key" https://qiniu-storage.pgyer.com/apiv1/app/upload- curl "钉钉WebHook地址" -XPOST -H 'content-type:application/json' -d '{"msgtype":"text","text":{"content":"@135xxxxxxx@135xxxxxxx@135xxxxxxx【xxxx】打包完成,下载地址:https://www.pgyer.com/xxxx"},"at":{"atMobiles":["135xxxxxxx","135xxxxxxx","135xxxxxxx"],"isAtAll":false}}'artifacts:paths:- app/build/outputs/apk/debug/app-debug.apk
复制代码
配置脚本
这边地解释下常用的几处配置项的含义,毕竟我们的要求是快速简单配置,过多的就不赘述了。
1.配置JDK版本,SDK版本
根据项目实际SDK版本情况修改。
image: openjdk:8-jdkvariables:ANDROID_COMPILE_SDK: "28"ANDROID_BUILD_TOOLS: "28.0.2"ANDROID_SDK_TOOLS: "4333796"
复制代码
2.打包指令
此处根据需要更改打包命令,示例中打的是Debug包。
./gradlew assembleDebug
复制代码
3.上传蒲公英
第一个参数为你打包后文件的路径,“@”符号不能丢。第二个第三个参数可以在蒲公英官网查询。
curl -F "file=@app/build/outputs/apk/debug/app-debug.apk" -F "uKey=蒲公英uKey"-F "_api_key=蒲公英api_key" https://qiniu-storage.pgyer.com/apiv1/app/upload
复制代码
当然你也可以配置其他参数来满足你的需求。
参数 | 类型 | 说明 |
---|---|---|
uKey | String | (必填) 用户Key |
_api_key | String | (必填) API Key |
file | File | (必填) 需要上传的ipa或者apk文件 |
installType | Integer | (选填)应用安装方式,值为(1,2,3)。1:公开,2:密码安装,3:邀请安装。默认为1公开 |
password | String | (选填) 设置App安装密码,如果不想设置密码,请传空字符串,或不传。 |
updateDescription | String | (选填) 版本更新描述,请传空字符串,或不传。 |
4.通知钉钉
curl "钉钉WebHook地址" -XPOST -H 'content-type:application/json' -d '钉钉消息json'
复制代码
钉钉WebHook地址可以在【群聊】【添加机器人】【自定义】中获取。
钉钉消息中的Json可以参考以下格式
{"msgtype": "text","text": {"content": "@135xxxxxxx@135xxxxxxx@135xxxxxxx【xxxx】打包完成,下载地址:https://www.pgyer.com/xxxx"},"at": {"atMobiles": ["135xxxxxxx","135xxxxxxx","135xxxxxxx"],"isAtAll": false}
}
复制代码
参数 | 参数类型 | 必须 | 说明 |
---|---|---|---|
msgtype | String | 是 | 消息类型,此时固定为:text |
content | String | 是 | 消息内容 |
atMobiles | Array | 否 | 被@人的手机号(在content里添加@人的手机号) |
isAtAll | bool | 否 | @所有人时:true,否则为:false |
@后面为你所需要通知的同事的钉钉绑定的手机号码,更多用法可以参考钉钉机器人文档。
当然你也可以在蒲公英后台中设置webhook直接设置通知钉钉:
蒲公英应用下载地址,可以在后台查看。
##5.指定分支 我们并不需要每次提交都触发持续集成。所以我们需要指定触发持续集成的分支。
only:- master
复制代码
参数 | 说明 |
---|---|
only | 定义一列git分支,进行集成 |
except | 定义一列git分支,不进行集成 |
##6.上传artifacts文件路径
- app/build/outputs/apk/debug/app-debug.apk
复制代码
可以在Gitlab中下载打出来的包。
注意事项
到此流程全部结束,只要你提交代码到Github,Gitlab-CI就会帮你自动打包,你可以在【GitLab】【对应工程】【CI/CD】中查看打包的进程。
打包成功后就会发送通知到你的钉钉,并同步至蒲公英,当然你也可以到GitLab中从附件中下载安装包,如果你的微信绑定了蒲公英,在你的微信里也会有相应的提示。 但是有一点要注意。由于在GitlLab上打包,它并不会缓存仓库,所以每次都需要重新下载工程中所有被依赖的库。从图中也可以看到,一个中型工程的集成时间在25-30分钟左右。打包速度异常缓慢,但已经足够满足日常的一些需求。当然如果能利用Jenkins把环境部署在本地将是一个更好的选择。
转载于:https://juejin.im/post/5d02392ff265da1bbe5dff50
超简单配置Android持续集成自动化打包流程 - GitHub+GitLab-CI+蒲公英+钉钉相关推荐
- 使用Jenkins搭建iOS/Android持续集成打包平台
http://debugtalk.com/post/iOS-Android-Packing-with-Jenkins/ http://debugtalk.com/post/iOS-Android-Pa ...
- 【安卓开发系列 -- 开发环境】Unbuntu 下 Android 持续集成打包环境搭建 -- Jenkins 构建工具安装(gradle + git + android 工具)
[安卓开发系列 -- 开发环境]Unbuntu 下 Android 持续集成打包环境搭建 -- Jenkins 构建工具安装(gradle + git + android 工具) [1]Unbuntu ...
- 一个超简单的android任务列队(排队)3
一个超简单的android任务列队(排队)3 上一篇讲到了列队中的任务超时,这一篇继续对列队任务进行扩展,新增插入任务到列队中,可以实现插队功能,实现异步请求列队.来看代码,在LineUpTaskHe ...
- Android Studio如何配置CURL指令一键打包apk上传至蒲公英
Android Studio如何配置CURL指令一键打包apk上传至蒲公英 第一步:在所需要打包的模块build.gradle文件中加入如下代码: android{buildTypes {//配置ap ...
- Android中APK打包流程
aapt: android application package tool,SDK (Android打包流程图) #Android打包流程 1.通过aapt工具将 资源文件(res).清单文件(An ...
- Android开发 —— apk打包流程
0. 前言 apk 全称是Android应用程序包(Android application package),一种能被Android系统识别并运行的文件格式. apk 文件基于 zip 文件格式,它与 ...
- 微信小程序自动化打包(taro+oss+ci+Jenkins+node+钉钉)
在日常的小程序开发中不使用自动化可能会出现的一些问题: 分支切换,代码上传,预览码生成,操作无脑但耗时 当生成码的要求同时来的时候,需要等待 小程序单独的机制,导致无法像web端那样做整体流程管控 非 ...
- 简单的android ant 批量打包
友盟android统计是这样搞的,添加友盟sdk后每打一个平台的包都要修改AndroidManifest.xml里<meta-data android:name="UMENG_CHAN ...
- 一步教你超简单设置Android Studio背景图片
想知道如何将Android Studio设置成下面这样的背景吗 今天就教你一个非常简单的方法 首先打开自己的android项目 点击左上角的File,选择Settings选项 依次选择Appearan ...
最新文章
- 用递归法计算斐波那契数列的第n项
- CentOS7定制封装发行版-基于CentOS minimal
- 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
- 丰润达全面完成安防传输生态体系布局
- (Unfinished)RNN-循环神经网络之LSTM和GRU-04介绍及推导
- 使用.NET中的XML注释(一) -- XML注释标签讲解
- 前端学习(3335):ant design中按钮尺寸的大小
- 程序员赚钱致富的6种方法
- linux备份还原系统程序
- iOS面试中经常问的点 - RunTime
- session原理及实现共享
- 孙子兵法吃鸡之地形篇
- ANTS Memory Profiler - NET内存泄漏分析工具
- centos刻录工具_centos u盘引导制作工具
- 青藏高原的气候类型及气候特征
- 如何彻底的删除hao123_hao123太流氓!怎么从电脑彻底清除?
- 如何在小方框上打对号 小方框内打对勾 word 方框打对勾
- H5外部浏览器唤起微信分享
- 亚马逊运营怎么做广告?六大方法!
- 关于浏览器隐私/无痕模式下localStorage的判断