兜兜转转再次回到开发岗,新入职的公司用的自动打包,觉得挺神奇的,想自己试试怎么弄的。顺便记录一下
1. 配置gitlab
1.1 新建测试项目
第一步可以直接在gitlab上新建一个android测试项目,项目根目录会有.gitlab-ci.yml
文件,这个就是CI持续集成的。一会儿我们再来配置,测试项目结构如下:
1.2 gitlab-runner
这一步需要下载runner,启动runner,最后注册runner,有不懂的可以看命令行,很简单的
runner启动后可以在gitlab的settings的CI/CD中看到这个runner,绿灯就代表ok了
至此我们push代码的时候其实已经能够看到CI在工作了
1.3 配置.gitlab-ci.yml
文件(windows未完成,mac可运行,区别mac是单引号,windows需要双引号,转义转不明白,放弃了)
这一步卡了不少时间,主要是对yml不熟悉,想找个直接能用的,需要配置自己的环境
最简单的配置文件:
image: openjdk:8-jdk
variables:
ANDROID_COMPILE_SDK: "28"
ANDROID_BUILD_TOOLS: "28.0.3"
ANDROID_SDK_TOOLS: "24.4.1"
before_script:
stages:
- build
assembleDebug:
stage: build
only:
- master
script:
- ./gradlew assembleDebug -g C:\Users\杨浩东\.gradle(改成你的gradle地址)
- curl.exe -F "_api_key=1a2fbf9aba4cdaafea85841ea25d93a8"(改成你的apikey) -F "file=@app/build/outputs/apk/debug/app-debug.apk"(自定义apk目录) https://www.pgyer.com/apiv2/app/upload
- curl "https://oapi.dingtalk.com/robot/send?access_token=32e804c89ee5ef3844f5977f0bedacdc37b377352f1f7840a56e3b79cfc9215b"(钉钉机器人设置页面可以找到) -XPOST -H 'content-type:application/json' -d '{"msgtype":"text","text":{"content":"【Andord Auto Test】打包完成,下载地址:https://www.pgyer.com/22V2"},"isAtAll":false}}'
artifacts:
paths:
- app/build/outputs/apk/debug/app-debug.apk
tags:
- test(runner register时候的tags 进行匹配)
遇到的问题集锦
1.CI一直处于阻塞状态
你可以查看一下报的什么问题,我一开始的问题是runner register的时候不知道选什么选了docker-windows,应该是我没有装这个的缘故,后来网上查了改成shell是最方便的。
可以看到这一步已经成功了
2.初始化环境出错
网上说是有些win10的机器会出错
这里只要将你安装runner目录的config.toml
文件中搜索pwsh修改成powershell即可
3.上传蒲公英出现问题
最后是这条指令在本地可以跑了,但是上传代码依然有问题 这步卡了很久很久
curl -F "_api_key=1a2fbf9aba4cdaafea85841ea25d93a8" -F "file=@app/build/outputs/apk/debug/app-debug.apk" https://www.pgyer.com/apiv2/app/upload
我觉得应该是shell指令改成powershell上面的就出现问题了,一个坑跳进另一个坑啊,这里最后用自己的runner设置成powershell,restart runner就成功了,莫名其妙卡了半天 真的很奇怪。
4.注意 windows环境一定要双引号 并且要进行转义 并且汉字要转成unicode码才能正常显示 太坑了
下面这句在本地是能跑通的。
curl "https://oapi.dingtalk.com/robot/send?access_token=dd95eb024977ecb75c8947c014fb751e529b59b0a8addc9b9269eb5ecadbe0bf" -H "Content-type: application/json" -d
"{\"msgtype\": \"text\",\"text\": {\"content\":\"test\"}}"