我的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+蒲公英+钉钉相关推荐

  1. 使用Jenkins搭建iOS/Android持续集成打包平台

    http://debugtalk.com/post/iOS-Android-Packing-with-Jenkins/ http://debugtalk.com/post/iOS-Android-Pa ...

  2. 【安卓开发系列 -- 开发环境】Unbuntu 下 Android 持续集成打包环境搭建 -- Jenkins 构建工具安装(gradle + git + android 工具)

    [安卓开发系列 -- 开发环境]Unbuntu 下 Android 持续集成打包环境搭建 -- Jenkins 构建工具安装(gradle + git + android 工具) [1]Unbuntu ...

  3. 一个超简单的android任务列队(排队)3

    一个超简单的android任务列队(排队)3 上一篇讲到了列队中的任务超时,这一篇继续对列队任务进行扩展,新增插入任务到列队中,可以实现插队功能,实现异步请求列队.来看代码,在LineUpTaskHe ...

  4. Android Studio如何配置CURL指令一键打包apk上传至蒲公英

    Android Studio如何配置CURL指令一键打包apk上传至蒲公英 第一步:在所需要打包的模块build.gradle文件中加入如下代码: android{buildTypes {//配置ap ...

  5. Android中APK打包流程

    aapt: android application package tool,SDK (Android打包流程图) #Android打包流程 1.通过aapt工具将 资源文件(res).清单文件(An ...

  6. Android开发 —— apk打包流程

    0. 前言 apk 全称是Android应用程序包(Android application package),一种能被Android系统识别并运行的文件格式. apk 文件基于 zip 文件格式,它与 ...

  7. 微信小程序自动化打包(taro+oss+ci+Jenkins+node+钉钉)

    在日常的小程序开发中不使用自动化可能会出现的一些问题: 分支切换,代码上传,预览码生成,操作无脑但耗时 当生成码的要求同时来的时候,需要等待 小程序单独的机制,导致无法像web端那样做整体流程管控 非 ...

  8. 简单的android ant 批量打包

    友盟android统计是这样搞的,添加友盟sdk后每打一个平台的包都要修改AndroidManifest.xml里<meta-data android:name="UMENG_CHAN ...

  9. 一步教你超简单设置Android Studio背景图片

    想知道如何将Android Studio设置成下面这样的背景吗 今天就教你一个非常简单的方法 首先打开自己的android项目 点击左上角的File,选择Settings选项 依次选择Appearan ...

最新文章

  1. 用递归法计算斐波那契数列的第n项
  2. CentOS7定制封装发行版-基于CentOS minimal
  3. 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  4. 丰润达全面完成安防传输生态体系布局
  5. (Unfinished)RNN-循环神经网络之LSTM和GRU-04介绍及推导
  6. 使用.NET中的XML注释(一) -- XML注释标签讲解
  7. 前端学习(3335):ant design中按钮尺寸的大小
  8. 程序员赚钱致富的6种方法
  9. linux备份还原系统程序
  10. iOS面试中经常问的点 - RunTime
  11. session原理及实现共享
  12. 孙子兵法吃鸡之地形篇
  13. ANTS Memory Profiler - NET内存泄漏分析工具
  14. centos刻录工具_centos u盘引导制作工具
  15. 青藏高原的气候类型及气候特征
  16. 如何彻底的删除hao123_hao123太流氓!怎么从电脑彻底清除?
  17. 如何在小方框上打对号 小方框内打对勾 word 方框打对勾
  18. H5外部浏览器唤起微信分享
  19. 亚马逊运营怎么做广告?六大方法!
  20. 关于浏览器隐私/无痕模式下localStorage的判断

热门文章

  1. 在学校图书馆里进入WOS却依然无法搜索文献如何解决?
  2. Win10开机登陆后黑屏,只有鼠标
  3. 计算机启动bios设置程序,电脑怎样进入BIOS设置
  4. 通用企业智能制造ERP源码 制造业通用ERP系统源码 工厂ERP源码C# web ASP.NET 源码
  5. 写给女孩:二十岁之后的每一年都很重要
  6. dedecms织梦后台模板layui框架
  7. html网站运行天数代码,网站运行天数代码
  8. 北工大2009计算机系新生李洋,强势围观!初次入校,请您多多关照……
  9. java 阴历阳历转换
  10. Python中jieba库的使用