Android jenkins 打包发布
来源:互联网 发布:淘宝上卖的一碗泄油汤 编辑:程序博客网 时间:2024/06/05 06:52
前言
app 提测阶段,需要实时更新apk供测试人员测试。开发人员去实时打包,肯定浪费人力。
如果测试人员打包呢,又会有限制,毕竟不是每位测试都懂代码!真没有办法了吗?
环境:
Jenkins ver. 2.60.3
发布到 linux ,以下下环境是在linux 下配置的
这里只介绍打包完成后,apk如何上传到蒲公英,并从蒲公英拉取二维码链接到本地,然后展示到jenkins 构建界面
详情页面
1.首先进入项目配置界面
在 general 选下卡下 设置 –>项目名称,描述,构建方式(本例采用参数化构建,version-name,version-code对外开放给测试人员)etc。
2.切换源码管理配置源码路径
本例采用svn作为源码仓库,这里svn项目配置成动态可调整的
3.选项卡切换到构建触发器选项
配置触发规则,根据具体需求动态配置如下五种触发规则
触发远程构建 (例如,使用脚本)
Build after other projects are built Build periodically GitHub hook trigger for GITScm polling Poll SCM
本例配置为 Build periodically 规则为 50 7 * * 1-5 ,每天早上 7:50 ,周一~周五去自动打包发布。
4.选项卡切换到构建环境选项
5.选项卡切换到构建选项
配置gradle,配置打包脚本如下图
选择 Execute Shell 设置打包发布脚本
注意:这里linux环境,和window 环境的脚本不太一样需要转换成相应平台的编码方式
蒲公英集成jenkins 文档入口 https://www.pgyer.com/doc/view/jenkins
我们这里写的脚本在蒲公英提供的shell脚本基础上增加拉取二维码链接,并保存到本地的步骤
#java -jar /usr/local/android/qrtools/QRcode.jar url=http://10.7.0.201:8080/jenkins/apk/npl-${APP_VERSION}-${Channel}.apk image=latestapk.jpg save=/root/.jenkins/workspace/npl_trunk/# 脚本自动上传到蒲公英-拉取最新二维码 cd .. cd updateshell ./needparameter.sh ../npl_trunk/app/build/outputs/apk #./needparameter.sh /usr/tomcat/apache-tomcat-8.0.36/webapps/jenkins/apk echo " start decode image ======================" # use jq tools to download pgy image to local disk, get data from pgy.json RESULT=$(jq -r .data.appQRCodeURL /root/.jenkins/workspace/updateshell/pgy.json) curl -s $RESULT > /usr/tomcat/apache-tomcat-8.0.36/webapps/jenkins/apk/npl.png # image File save path npl_trunk/npl.png curl -s $RESULT > ${WORKSPACE}/npl.png # delay one second sleep 1
6. 选项卡切换到构建后操作选项
设置Archive the aritifacts 存档文件类型 需要插件
设置 set Build Description 需要插件,这个就是显示到build界面二维码设置入口
设置通知邮件 etc
这里着重介绍下shell脚本的编写,以及过程中遇到的问题
1.shell脚本解析蒲公英返回json串
2.如何存储json串到本地
3.根据解析出来的二维码图片,如何发起网络请求并下载二维码图片!
4.图片保存/读取
未解决问题
二维码链接想通过邮件形式发送给构建者,没能解决,邮件模板中不能读取到本地json串中内容!
个人想法:修改邮件模板,使用groovy脚本+jetty模板,将解析出来
的json串中二维码嵌入到邮件模中。
#!/bin/bash#MAIN_MODULE AndroidStudio project directory under the main moduleMAIN_MODULE="."#The test address separately#MAIN_MODULE="./app" # pgy API accountPGYER_USER_KEY="蒲公英key"PGYER_API_KEY="蒲公英Api"#APK path#APK_PATH="${MAIN_MODULE}/build/outputs/apk"#Receive the external transfer apk pathAPK_PATH=$1echo "=============================================="#echo "current path: `pwd`"echo "APK_PATH=${APK_PATH}"APK_LIST=`ls -t ${APK_PATH}`echo "${APK_LIST}"#ind the latest apk packagefor APK_FILE in ${APK_LIST}; do APK_NAME=${APK_FILE} echo "apk file name= $APK_NAME File=$APK_FILE"done#-------------------------------------------------if [ -n "$APK_NAME" ]; then # Determine whether is empty echo "upload $APK_FILE pgy" #upload pgy updateDescription(version descript) RESULT=$(curl -F "file=@${APK_PATH}/${APK_NAME}" -F "uKey=${PGYER_USER_KEY}" -F "_api_key=${PGYER_API_KEY}" https://qiniu-storage.pgyer.com/apiv1/app/upload) echo $RESULT > pgy.json#-------------------send mail------------------------- echo "send mail to" 279642707@qq.com echo "${RESULT}" | mail -s "${APK_NAME} already unload pgy" 279642707@qq.com #http://www.pgyer.com/apiv1/app/uploadfi
workspace 目录
包含脚本
注:
APK_PATH=$1 接受apk编译出来apk路径的。这样一套脚本可以对所有项目使用
上面代码字面意思就是,根据传的apkpath,去循环路径下的apk,然后上传到蒲公英。这里需要配合build中的构建脚本, assemblyDebug/Release
然后读取 RESULT(蒲公英平台返回的json串)
{ "code": 0, "message": "", "data": { "appKey": "--------------", "userKey": "-----------------", "appType": "2", "appIsLastest": "1", "appFileSize": "15076147", "appName": "\u8bfa\u79d2\u8d37", "appVersion": "1.1.0", "appVersionNo": "5", "appBuildVersion": "19", "appIdentifier": "--------------", "appIcon": "f63573b31ed8ddd4df14dcc4da09060c", "appDescription": "\n \u8bfa\u79d2\u8d37\u662f\u4e00\u6b3e\u57fa\u4e8e\u79fb\u52a8\u4e92\u8054\u7f51\u5168\u7a0b\u5728\u7ebf\u7533\u8bf7\u7684\u7f51\u7edc\u501f\u6b3eAPP\uff0c \u4e3b\u8981\u89e3\u51b3\u90fd\u5e02\u5e74\u8f7b\u767d\u9886\u4e0e\u84dd\u9886\u5728\u65e5\u5e38\u751f\u6d3b\u4e2d\u7684\u5c0f\u989d\u501f\u6b3e\u9700\u6c42\u3002\u8bfa\u79d2\u8d37\u91c7\u7528\u4e92\u8054\u7f51\u5927\u6570\u636e\u65b9\u5f0f\uff0c\u5927\u5927\u7f29\u77ed\u4e86\u501f\u6b3e\u6240\u9700\u7684\u65f6\u95f4\uff0c\u65e8\u5728\u63d0\u4f9b\u4e00\u4e2a\u7b80\u5355\u65b9\u4fbf\u3001\u7075\u6d3b\u5feb\u6377\u7684\u501f\u6b3e\u65b0\u6a21\u5f0f\u3002\n", "appUpdateDescription": "", "appScreenshots": "9a6e655c02cdca2d83e141e3ae1d295d,ad25de9276b4633ec8d299827d3d6294,fb8e5a80514353a1bacc692a39866210,51ca54f8edaf6eba71e2b77264a14dfa,c76cf279c24fb40c30b3c4cdee3380a0,8a64c38cfdeb11cb4e9aa5fa31a60d98", "appShortcutUrl": "6yS4", "appCreated": "2017-12-06 10:42:46", "appUpdated": "2017-12-06 10:42:46", "appQRCodeURL": "https:\/\/www.pgyer.com\/app\/qrcodeHistory\/------------------" }}
保存到指定目录
echo $RESULT > pgy.json //当前目录
后面需要解析json,解析出 “appQRCodeURL”: “https:\/\/www.pgyer.com\/app\/qrcodeHistory\/——————”,拿到 appQRCodeURL去下载图片到本地
下面这段脚本放入到 needparameter.sh 中取执行,竟然报错。迫不得已拉出来执行,执行位置在build shell 中前面已经贴出来
echo " start decode image ======================" # use jq tools to download pgy image to local disk, get data from pgy.json RESULT=$(jq -r .data.appQRCodeURL /root/.jenkins/workspace/updateshell/pgy.json) curl -s $RESULT > /usr/tomcat/apache-tomcat-8.0.36/webapps/jenkins/apk/npl.png # image File save path npl_trunk/npl.png curl -s $RESULT > ${WORKSPACE}/npl.png # delay one second sleep 1
注: 这里面使用linux平台 jq解析工具,语法查看 https://stedolan.github.io/jq/
下面处理就很顺利了。读取json,解析iappQRCodeURL链接,通过 curl 命令去服务器下载,存到指定位置。通过uri 路径写死。
- Android jenkins 打包发布
- JENKINS 打包发布脚本
- Android Jenkins ant 打包
- Unity3d Jenkins 打包Android
- jenkins-android打包
- Jenkins实现自动打包发布、启动
- Jenkins下Android自动化打包(图文讲解)(自动发布内测平台)
- Jenkins Android 自动打包配置
- Jenkins Android 自动打包配置
- Jenkins搭建Android自动打包
- Unity3d使用Jenkins打包Android
- Jenkins实现Android自动打包
- Jenkins实现Android自动打包
- Jenkins实现Android自动化打包
- jenkins 构建打包android app
- Android+jenkins自动打包教程
- Android自动打包-通过Jenkins
- Android 数据库打包发布
- 面试题42:翻转单词顺序(句子反转)
- PHP后端接收不到AngularJs中$http.post发送的数据的问题
- php 多维数组转一维数组
- 【转】Android ROM研究---Android build system增加模块
- ie删除文件html
- Android jenkins 打包发布
- miniui实现多附件上传
- pthread.h提示error C2011: “timespec”:“struct”类型重定义
- 对异或的理解
- java 抽奖
- NLP点滴——文本相似度,计算文本间的距离
- 剑指offer---包含min函数的栈
- 一个YAFFS引发的一系列问题
- HDU 4970 Killing Monsters(树状数组VS思维)