超简单配置Android持续集成自动化打包流程 - GitHub+GitLab-CI+蒲公英+钉钉

GitLab-CI的相关语法:https://fennay.github.io/gitlab-ci-cn/gitlab-ci-yaml.html

 

场景

为了优化工作流程,解放开发人员双手,不整天被【帮我打一个新的测试包】这种琐碎的事儿打乱工作的节奏,这两天就研究了下有关于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-jdk

variables:
  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 pipefail

stages:
  - build

assembleDebug:
  stage: build
  only:
    - master
  script:
    - ./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-jdk

variables:
  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地址可以在【群聊】【添加机器人】【自定义】中获取。


 
钉钉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直接设置通知钉钉:


 
蒲公英设置webhook
 
钉钉显示效果

蒲公英应用下载地址,可以在后台查看。


 
蒲公英后台

5.指定分支

我们并不需要每次提交都触发持续集成。所以我们需要指定触发持续集成的分支。

 only:
    - master
参数说明
only 定义一列git分支,进行集成
except 定义一列git分支,不进行集成

6.上传artifacts文件路径

  - app/build/outputs/apk/debug/app-debug.apk

可以在Gitlab中下载打出来的包。


 
GitLab下载包

注意事项

到此流程全部结束,只要你提交代码到Github,Gitlab-CI就会帮你自动打包,你可以在【GitLab】【对应工程】【CI/CD】中查看打包的进程。


 
查看进程

打包成功后就会发送通知到你的钉钉,并同步至蒲公英,当然你也可以到GitLab中从附件中下载安装包,如果你的微信绑定了蒲公英,在你的微信里也会有相应的提示。


 
钉钉提醒

 
微信提示

但是有一点要注意。由于在GitlLab上打包,它并不会缓存仓库,所以每次都需要重新下载工程中所有被依赖的库。从图中也可以看到,一个中型工程的集成时间在25-30分钟左右。打包速度异常缓慢,但已经足够满足日常的一些需求。当然如果能利用Jenkins把环境部署在本地将是一个更好的选择。


参考脚本

 

 

 

 

posted @ 2022-08-08 17:30  BUGMANWL  阅读(1197)  评论(0编辑  收藏  举报