用Jenkins搭建Android参数化自动构建及生成二维码遇到的各种坑

Jenkins的安装及Android SDK Gradle等安装我就不介绍了,网上很多教程,主要讲一下我搭建参数化构建流程中遇到的各种坑

1.首次git远程仓库连接不上,老是Timeout或者拉一部分就报错

如果你在【系统管理】--【全局工具配置】添加了Git参数如下图

git配置

也在项目的配置中添加了git的证书,如未添加可点击右侧“添加”

如果使用的ssh克隆地址则添加sshkey私钥,  如果使用https连接的克隆地址,则添加用户名密码,保存


源码配置

然后我还是报错了,报错信息大概是Time out to connect to.....,可以看控制台输出,已经拉了一部分代码,但是每次都失败,然后我在控制台输出中看了一个关键信息,就是默认连接下载git代码的超时时间是10分钟,如果10分钟内未下载完,则会报这个错。

但是首次拉Android项目,有很多项目庞大,而且同时需要连接各种第三方库的地址下载,所以10分钟根本不够,改一下默认时间后这个问题解决了

在项目源码设置时添加如下操作,Advanced clone behaviours,最后一个超时时间设置为30分钟

git 克隆高级配置

2.执行gradle 指令 提示clean不存在(编译目录与项目根目录不同导致的)

我的gradle指令是 gradlew clean  assembletestdebug,这个testdebug是开发在build.gradle文件配置的编译选项,如不太清楚可以自己查看app目录下的build.gradle看有哪些编译选项,或者问开发同学,一般情况下会有测试环境/生产环境 ,debug/release编译方式,具体命名以gradle文件为准

项目配置中我已经指定了gradlew地址为项目中gradlew文件的地址了,而且勾选了Make gradlew executable,但是就是找不到相关的gradle指令

后来我发现我们的代码编译路径不在根路径下,jenkins编译默认是在下载下来的项目根目录下编译的,而我们的项目在根目录下多了一级目录 ,导致要在根目录的下一级目录编译,此时根目录找不到build.gradle文件所以报错


gradle编译配置

点开项目中gradle配置右下角的高级选项

在如下选项中填上build.gradle的地址即可,${workspace}是系统环境变量,代表当前目录的要路径,我的在下一级的XXX目录中所以,作如下配置

配置build.gradle的地址

3.build.gradle中用到了一些指令如Git报错,Git不是可运行的指令,也不是XXX

我们的build.gradle中又使用了git指令,此时运行,我一直报找不到Git指令,也就是经常没配环境变量的那种报错,可是之前我已经配置了全局工具指明了Git.exe的地址呀,而且 通过git都已经克隆下代码了,有点不太理解,后面各种折腾发现,编译运行的时候调用指令是直接调用执行机上的指令,我们需要在作如下配置,如果你用了其它命令也报不能运行,如python等,也是一样的配置。

查看执行机


点击执行机的设置


配置执行机环境变量

4.参数化构建的插件找不到无法下载

我用了如下两个插件,但是在可选插件中一直找不到

Build With Parameters

Persistent Parameter Plugin

在系统管理---插件管理---升级站点可以填写如下多拉几次,多下载几次可以成功,我是下载了五六次才成功,连接比较慢

http://mirror.xmission.com/jenkins/updates/update-center.json

5.参数化构建

通用设置中添加如下参数

一般打包的参数是,环境( 测试还是生产),打包的分支,编译类型(debug&release)

如果需要打渠道包,也可以配置相应渠道参数

参数化配置

使用的时候直接用${BRANCH}这种如下是配置打包的分支

编译的指令如下配置:clean  assemble${ENVIRONMENT}${BUILD_TYPE},然后配置完成后,点击build with params就会让你选,环境,分支,和编译类型了,一个流水线打多种包毫无压力


构建带参数的包

6.编译完成生成二维码

刚开始我用了蒲公英的插件,但是使用后一直上传超时,不知道是啥问题,后来没办法 ,我也没有自己的服务器就直接选用了jenkins本身自带的服务器来挂载二维码了,扫描的时候要登录jenkins账号才能下载

首先增加构建后操作缓存我们生成的包,缓存后你构建完成后将能看到包的下载地址

缓存构建产物

点击右侧的view可以看到一个下载地址,我们直接使用这个地址来生成二维码

构建完成产物

http://10.17.140.186:18080/job/项目名称/构建编号/artifact/缓存目录地址/build/outputs/apk/test/debug/master_test_debug.apk

类似如上的地址,我们写python脚本,使用Qrcode库,生成二维码图片,并放在与apk包同一级的缓存目录,点击view也可以查看到qrcode.jpg的浏览地址

注意点1:

jenkins缓存物也就是直接可以用地址下载目录在jenkins jobs目录下:

我的jenkins安装在D盘,我的缓存地址如下

D:\Jenkins\jobs\项目名\builds\构建号\archive下 

而最初编译的产物在workspace下相应的项目的build输出文件下,缓存的动作相当于,你指定路径让他去你编译完成的地址拿到相应的包复制到缓存目录下,缓存目录可在jenkins下直接通过ip访问

注意点2:

构建完成的包如果有一些代码的参数你无法拿到如生成的包是1_0_1.apk是根据代码中的版本号生成的,你拿不到版本号,你需要重命名为一个你可以知道名字的包,名字可以固定 ,也可以使用我们之前自定义的参数拼接,如test_master_debug.apk,这个可网上搜索怎么做,编译完成 后可修改指定文件夹下.apk后缀的文件名。

注意点3:

缓存产物需要用到jenkins自带的环境变量,BUILD_NUMBER

python获取环境变量如下:

import os

no = os.getenv("BUILD_NUMBER")

env = os.getenv("ENVIRONMENT")

branch = os.getenv("BRANCH")

build_type = os.getenv("BUILD_TYPE")

最终的链接需要这些参数拼接

具体代码如下,我作了重命名然后生成二维码:


python重命名生成二维码

然后执行python脚本:

执行这个python指令,需要在执行机添加环境变量,我上面说过,不然会报python不是可运行的指令,也不是批处理文件


最后我们添加构建后操作

需要安装set build description的插件

分支:${BRANCH}<br>环境:${ENVIRONMENT}<br>类型:${BUILD_TYPE}<br>请使用内网扫码下载<br><img src='http://XXX.XXX:8080/job/项目名称/${BUILD_NUMBER}/artifact/项目地址/build/outputs/apk/${ENVIRONMENT}/${BUILD_TYPE}/qrcode.jpg' height="200" width="200" />

生成的效果


记住在系统设置--安全设置中需要选择Safe HTML,不然的话他会显示我们写的那行HTML代码而不会解析,这个好似也要装一个插件,自行百度。

如有疑问,可联系我微信Chihuotiantangwd

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容