记一次Jenkins构建Android-App打包上传蒲公英的爬坑经历

「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战」。

前言

其实搭建/部署环境是没什么可说的,按部就班而已,但是作为一名非著名程序员却不得不吐槽一下:开发是不是就只负责git push/pull和本地打包/部署?除此之外就不管过程是如何部署到服务器上去的?(不会这个步骤的还比较多)。关于这个问题,题主也侧面的从开发同学那儿证实了,他说了:从业10年从没玩过jenkins,对于linux也知之不深;之所以是这样的局面是因为公司有运维,开发本身就不关注这些旁枝末节。话说回来,程序员多点技能面他不好吗?好吧,我就是一个懂点运维、开发的小测试,也觉得好到哪里去。

案例

多学点总归是不会有坏处,题主也经常向运维大佬学习,才能兼职公司的运维,才能加薪啊!

在这里插入图片描述

在这里插入图片描述

部署jenkins

关于部署jenkins服务,题主就简单带过; 介绍它的三种部署方式:

1、下载war包,通过java -jar启动,还可以带参数--httpPort;

2、部署容器服务,如tomcat,将war包放在容器启动目录下即可;

3、docker部署方式,先pull镜像然后在run镜像,简直不要太轻松。

安装插件

Android项目也好其他项目也罢,都离不开一个编译/构建工具,如gradle、maven、npm、ant等等;

但是它有坑啊,如果是正常jenkins版本安装插件对应的版本它没问题,如果是jenkins还是当前的版本,但是插件它升级了且还只支持高版本的jenkins,

这你就没辙了,一旦你升级了jenkins,原来的其他插件可能不兼容jenkins,如此一来一往jenkins服务器就要面临崩坏了,维护是不能同时兼顾的痛!

在这里插入图片描述

  • 假装原来已经安装好了gradle插件,只需要在全局工具配置那里调好版本号就好了

在这里插入图片描述

  • 最后在创建/编辑job,点击构建选择掉用gradle脚本插件,输入指令就没跑了

在这里插入图片描述

既然我不想冒险升级jenkins,那么只剩下动手解决问题了。

Gradle历史版本

咱自己去下载gradle安装包,手动部署并配置

在这里插入图片描述

  • 创建安装目录、解压、配置环境变量、测试,一气呵成;
# 没有unzip就yum install -y 安装即可
[root@localhost ~]# mkdir /usr/local/gradle-6.1.1
[root@localhost ~]# unzip -d /usr/local/gradle gradle-6.1.1-bin.zip
[root@localhost ~]# ls /opt/gradle/gradle-6.1.1
[root@localhost ~]# vim /etc/profile

export PATH=$PATH:/usr/local/gradle-6.1.1/bin
export PATH

[root@localhost ~]# source /etc/profile
[root@localhost ~]#  gradle -v
------------------------------------------------------------
Gradle 6.1.1
------------------------------------------------------------

Build time:   2020-01-24 22:30:24 UTC
Revision:     a8c3750babb99d1894378073499d6716a1a1fa5d

Kotlin:       1.3.61
Groovy:       2.5.8
Ant:          Apache Ant(TM) version 1.10.7 compiled on September 1 2019
JVM:          1.8.0_191 (Oracle Corporation 25.191-b12)
OS:           Linux 3.10.0-1127.el7.x86_64 amd64
复制代码
  • 这就完了?这只是第一步,还有Android的sdk环境呢!不然构建会报错:找不到sdk环境

在这里插入图片描述

Linux-Android-SDK下载

linux命令下载:wget dl.google.com/android/and… 或者 curl -O dl.google.com/android/and…

  • 同样的操作,解压、配置ANDROID_HOME
[root@localhost ~]# mkdir -p /root/android/android-sdk-linx
[root@localhost ~]# tar -zxvf android-sdk_r24.4.1-linux.tgz -C /root/android/android-sdk-linx
[root@localhost ~]# vim /etc/profile

export ANDROID_HOME=/root/android/android-sdk-linx
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME:bin:$ANDROID_HOME/platform-tools

export  ANDROID_HOME PATH

[root@localhost ~]# source /etc/profile
复制代码
  • 但是在构建的时候还是报错了,原因很简单,是找不到sdk环境,所以在job构建调用shell脚本,写了如下配置:

在这里插入图片描述 在这里插入图片描述

  • 好了,环境是没问题了,但是...题主说的是但是啊,它又双叒失败了,

在这里插入图片描述

  • 首先怀疑是网络问题是没问题的,但是宿主机、虚拟机单独访问是没问题的,那么这个问题就无法解释了

在这里插入图片描述

  • 最后一关,就是第一构建它会请求很多资源,然后本地gradle缓存又没有,怎么办?
[root@localhost ~]# scp -r gradle/lib/*  root@localhost:/usr/local/gradle-6.1.1/lib
复制代码
  • 所有依赖都复制过来了,但是又遇到了新的问题,这回不是网络问题了,而是502,对方服务器的问题

在这里插入图片描述

排查结果显示:是因为题主pull分支错了,人家Android开发早就不用这个依赖了。

  • 最后jenkins构建部署服务成功,皆大欢喜!

在这里插入图片描述

  • 关于构建Android打包失败提示:SDK location not found. Define location with an ANDROID_SDK_ROOT environment variable or by setting the sdk.dir path in your project's local properties file at '/data/jenkins/workspace/flaget-Android-Pgyer/local.properties'.

在jenkins服务器配置Android打包的工具及sdk,只要在/etc/profile配置环境变量没错的情况下,是不需要在shell重新export导入环境变量,而关于报错本地local.properties找不到sdk家目录,是因为本身就有问题,只需要在workspace目录下创建local文件写入sdk.dir正确的路径即可:/root/android/android-sdk-linux

在这里插入图片描述

总结

遇事不慌,自动化解决不了的问题,手动解决是最有效的方式,没有之一,不但能提升自己的技能,还能锻炼自己解决问题的思想,总归来说,是题主忍不住要写这样一篇文章来记录自己的辛酸历程(辛酸是因为开发总丢一句话:我本地能打包,我就不知道jenkins为什么会失败?)吐槽归吐槽,但是有开发的极力配合这是很大的鼓舞,因为题主也是第一次部署Android自动化构建打包过程,万事开头难,题主希望每个人都能有进步的空间,在技术进阶的路上互相支持。

猜你喜欢

转载自juejin.im/post/7060884167688454180