作为一个运维来说,想必大家都有这样的想法,能自动的操作就绝不手动,能一步完成的事情绝不分多步执行。想着法的偷懒,才是我们进步的源泉啊
这不我们的 Android 开发,来和我抱怨说,测试人员最近总是要找他要 apk 包,有时候一忙,中间一停顿,那种写代码的感觉就没了,大概开发写代码也是要灵感的
在运维的眼中,程序员是万能的,在程序员眼中,运维也是万能的。既然都这么说了,咱就要万能一把,把这个问题给解决了
在 Jenkins 上,我们把编译构建的权限给到了测试,然后测试就可以想怎么打包就怎么打包了
在正式开搞之前我还是要抱怨两句的, 虽然说 我百度一下 (Jenkins 构建 android 项目) 能跳出一大片来,但是我真的想说 what fuck 了,真没有只看一篇,就能完成这个的。到时候你们可以百度一波试试
安装和配置 编译 Android 所需的 gradle 和 android_sdk
先去官网下载我们需要的 gradle ,版本最好是和 目前开发所使用的的版本一样
官方下载地址:http://services.gradle.org/distributions/
目前我们用是的 Gradle 4.6,我就用这个版本来做示例了
wget http://downloads.gradle.org/distributions/gradle-4.6-all.zip
unzip gradle-4.6-all.zip
mv gradle-4.6-all /usr/local/gradle
vim /etc/profile
#在最后添加下面这两句
export GRADLE_HOME=/usr/local/gradle
export PATH=$PATH:$GRADLE_HOME/bin
source /etc/profile
gradle -v
配置 android_sdk
靠谱的下载地址 http://tools.android-studio.org/index.php/sdk
wget https://dl.google.com/android/android-sdk_r24.4.1-linux.tgz
tar -xvzf android-sdk_r24.4.1-linux.tgz
mv android-sdk-linux /usr/local/android-sdk
vim /etc/profile
#在最后添加下面这两句
export ANDROID_HOME=/usr/local/android-sdk
export PATH=$PATH:$ANDROID_HOME/tools
source /etc/profile
图片可能看不太清楚,具体如下
Build Name and Description Setter
插件安装完毕之后,再去 Jenkins 里配置一下服务器安装的 Gradle
然后设置一下 android_sdk 的环境变量
新建一个项目
配置源码地址
很不幸的是,编译打包报错了,我们可以打开控制台输出查看报错信息
看报错,说是缺少了一些 sdk 的版本 (关于需要哪些版本,可以事先问好开发(可以把这个截图给开发看,他们就知道了),安装好,就可以避免这个报错了)
#列出所有的 sdk 版本及其 tag
android list sdk --all
#我们缺少的是 android-28 和 build-tools;28.0.2 ,选择其对应的 tag 进行安装
android update sdk -u --all --filter 8,6 #都选择 y
下面我们重新来构建,后续可能还会有报错,但是我们的策略就是看报错,缺少补啥就好了
我的后续还有报错,还缺了 android-26 ,android-27 ,重复上面的命令,补上就好了
等待编译完成,没有报错之后,我们去 工作空间 里查看编译出来的 APK 包(不知道路径的可以问下开发)
接下来就要考虑为这个 apk 包可以用链接下载,并为其生成可下载的二维码
这边 我们就用 nginx 来实现可用连接下载,只要把 apk 包移动到 nginx 配置好的对应的目录
server {
listen 60080;
server_name download.apk.com; #没有使用域名,只是为了好看区分,懂 nginx 的应该知道
charset utf-8;
location / {
root /opt/android_apk/apk;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
}
server {
listen 60081;
server_name download.img.com;
charset utf-8;
location / {
root /opt/android_apk/img_er;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
}
为 apk 生成二维码
网上看到的资料基本都是借用第三方完成的,就想着能不能自己搞个小工具来完成这个操作,这是我就想到了万能的 python,说干就干吧,一起来试试
系统自带的是 python2.7,我就用了 python2.7 来做
pip install pillow
pip install qrcode
vim get_img.py
#!/usr/bin/python
# encoding=utf8
import qrcode
import sys
def main(url,imgpath):
qr = qrcode.QRCode(
version=5,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4
)
#参数 version 表示生成二维码的尺寸大小,取值范围是 1 至 40,最小尺寸 1 会生成 21 * 21 的二维码,version 每增加 1,生成的二维码就会添加 4 尺寸,例如 version 是 2,则生成 25 * 25 的二维码,这里我们需要适当的调整大小
qr.add_data(url)
try:
qr.make(fit=True)
img = qr.make_image()
img.save(imgpath)
except:
print "输入的保存二维码的路径有问题,情检查"
if __name__ == '__main__':
if len(sys.argv) == 3:
main(sys.argv[1],sys.argv[2])
else:
print "输入的参数个数不对,请输入正确的 url 链接 和 二维码保存的地址"
新加一个构建的 shell 脚本(你们要用,应该需要做一些适当的修改),如图
最后再加个 构建后操作,如图
是这里我们可以适当的调整 图片的大小
<img width='300px' height='300px' src="http://ip:800/customer_${BUILD_NUMBER}.jpg"
然后保存退出,进行新一轮的项目构建,当我满心欢喜的以为已经没有问题的时候,又打脸了,图中这块地方并没有出现我们想象中的二维码,尴尬的很
此处还是耗费了一点时间的,不过最后还是找到了解决方案,原来是有一个小配置需要改一改
系统管理—>全局安全配置
但是这里一改之后,又出现了一个小问题,把全局的描述都改了,如图,描述不再是 分行显示了
不过对于知道一点 html 的同学来说,就是小 case ,看操作
最后我们再来看最后的项目构建完成的效果图,完美!!!!
过程中有遇到问题的大佬,可以及时联系博主