Centos 7配置Jenkins构建Android持续集成(离线内网环境)

安装配置Jenkins

为了安全考虑,首先需要解锁Jenkins

在Jenkins服务器上查询管理员密码

点击[跳过插件安装]

插件安装

安装插件Subversion,前往https://plugins.jenkins.io/,搜索Subversion,如下图:

根据出错提示,逐个安装解决依赖包

目前的依赖安装顺序如下(严格按照按照顺序操作):

构建编译需要的Maven仓库

从本地构建项目的Gradle缓存中提取项目依赖的jar/aar资源,反向生成项目依赖的Maven仓库下载连接地址,部署到自己的服务器上,提供Gradle编译的时候下载。

具体脚本内容如下:

配置Gradle本地下载

配置Android SDK

下载Android SDK,目前Google已经不提供单独的Android SDK下载了,都是通过Android Studio进行下载安装。但是对于离线模式来说,还是需要单独下载Android SDK,这时候,我们就需要从Android Studio的配置信息中找到对应的SDK下载地址。

如上图箭头指向的位置,我们下载https://dl.google.com/android/repository/repository2-1.xml可以从里面找到相关的Android SDK下载文件名,手工拼接一下地址就可以正常下载。

创建持续构建项目

注意:某些版本的Gradle构建的时候,需要设置ANDROID_HOME环境变量,我们同时设置ANDROID_HOME跟ANDROID_SDK_ROOT为相同的目录(${WORKSPACE}/.android)即可解决问题。

里面的脚本命令如下:

其他的用户权限配置部分,参考网上其他文章即可。

如果需要检查编译之后的APK的版本号,包名等信息是否符合规范,可以在构建步骤中增加如下脚本:

部署到Nexus OSS 2.x版本

如果我们需要内网部署Nexus OSS,则需要进行如下配置。

首先去Nexus OSS官网下载2.x的Tomcat版本。目前最新的是 2.14.19-01 版本(本站下载)。

访问服务器,可以看到如下界面:

默认的用户名admin,密码admin123

执行如下脚本批量上传到服务器上,如下:

可能遇到的问题

Gradle构建失败

如果升级com.android.tools.build:gradle:4.1.x版本,那么在编译的时候,可能会报告如下错误:

这个现象的奇怪点在于,如果登陆到设备上,直接执行bash gradlew clean build是能成功编译的,即使通过su -u tomcat切换到tomcat用户,也能成功编译,但是Jenkins就是报告上面的错误。

同时,如果编译工具版本降级到com.android.tools.build:gradle:4.0.x版本,也是能正常编译通过的。

经过几个小时的排查,发现,由于Jenkins是使用Tomcat来运行的,因此运行时候的用户就是tomcat。可是tomcat这个用户,默认是没有自己的私有用户目录的。默认情况下Gradle会存放到USER_HOME/.gradle目录下。

这就造成一个问题,就是Gradle去服务器上下载的文件(JAR/AAR/POM),是没有地方存放的!!

早期版本,会在内存开辟一份空间,然后暂时存放到这个空间里。但是com.android.tools.build:gradle:4.1.x版本开始,没有这样处理。这就要求必须给Gradle一个暂时存放临时文件的地方。默认情况下Gradle会存放到USER_HOME/.gradle目录下。

有两种解决方法:

  • 给予tomcat用户指定一个可写的目录。
  • 使用-g参数,指定一个存储目录给Gradle,要求Gradle存放到这个目录下面。

一般还是建议使用-g参数,给每个独立的项目指定一个私有的存储目录,避免项目之间的相互污染。
比如: bash gradlew -g ${WORKSPACE}/.cache clean build

ThinBackup存储目录

默认情况下,不进行任何设置的时候,ThinBackup存储目录为"~/",这个目录在Centos 7系统的默认位置在"/usr/share/tomcat/"目录下。

参考链接


发布者

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注