Jenkins的安装及Android SDK Gradle等安装我就不介绍了,网上很多教程,主要讲一下我搭建参数化构建流程中遇到的各种坑
1.首次git远程仓库连接不上,老是Timeout或者拉一部分就报错
如果你在【系统管理】--【全局工具配置】添加了Git参数如下图
也在项目的配置中添加了git的证书,如未添加可点击右侧“添加”
如果使用的ssh克隆地址则添加sshkey私钥, 如果使用https连接的克隆地址,则添加用户名密码,保存
然后我还是报错了,报错信息大概是Time out to connect to.....,可以看控制台输出,已经拉了一部分代码,但是每次都失败,然后我在控制台输出中看了一个关键信息,就是默认连接下载git代码的超时时间是10分钟,如果10分钟内未下载完,则会报这个错。
但是首次拉Android项目,有很多项目庞大,而且同时需要连接各种第三方库的地址下载,所以10分钟根本不够,改一下默认时间后这个问题解决了
在项目源码设置时添加如下操作,Advanced clone behaviours,最后一个超时时间设置为30分钟
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配置右下角的高级选项
在如下选项中填上build.gradle的地址即可,${workspace}是系统环境变量,代表当前目录的要路径,我的在下一级的XXX目录中所以,作如下配置
3.build.gradle中用到了一些指令如Git报错,Git不是可运行的指令,也不是XXX
我们的build.gradle中又使用了git指令,此时运行,我一直报找不到Git指令,也就是经常没配环境变量的那种报错,可是之前我已经配置了全局工具指明了Git.exe的地址呀,而且 通过git都已经克隆下代码了,有点不太理解,后面各种折腾发现,编译运行的时候调用指令是直接调用执行机上的指令,我们需要在作如下配置,如果你用了其它命令也报不能运行,如python等,也是一样的配置。
4.参数化构建的插件找不到无法下载
我用了如下两个插件,但是在可选插件中一直找不到
Build With Parameters
在系统管理---插件管理---升级站点可以填写如下多拉几次,多下载几次可以成功,我是下载了五六次才成功,连接比较慢
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可以看到一个下载地址,我们直接使用这个地址来生成二维码
类似如上的地址,我们写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不是可运行的指令,也不是批处理文件
最后我们添加构建后操作
需要安装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