利用Jenkins完成Android项目打包

问题和思路

目前存在的问题

打包操作由开发人员完成,这样开发进度容易被打断。

解决问题的思路

将打包操作交测试/产品/开发人员来完成,主要是测试/开发。

按照以上的思路,那么Jenkins+Gradle的解决方案是比较经济的,实现起来难度不大,下面我们详细介绍一下搭建过程。

搭建过程

服务器的准备

  • 普通配置PC一台

  • 安装ubuntu20.04(或者vmware虚拟ubuntu也可以)

  • 可配置上网、关闭防火墙、开启ssh服务

docker安装Jenkins

在ubuntu下安装dokcer。使用下面的命令拉取Jenkins的docker镜像,这里我用的是lts的长期支持版本,你可以到Jenkins官网自由选择其他版本。

sudo docker pull jenkins/jenkins:lts

配置宿主机映射到容器的目录,之后jenkins的一些配置文件都将会存储到该目录下,这个目录可以自己定,但是我建议遵守我这样的规范,便于日后查找和管理。

  1. sudo mkdir /home/jenkins_home # 创建jenkins_home目录

  2. sudo chown zhq:zhq /home/jenkins_home #设置该目录的所有者和所属的组(zhq是常用登录到机器的账号)

ps:zhq是常用登录到机器的账号,这样为了避免一些有关操作权限的问题。

启动Jenkins的docker镜像,并设置相关参数,参数解释:

  • -d 表示以后台模式运行

  • --name 为容器定义一个名字(后面可以代替容器id使用)

  • -p 表示映射容器的端口到宿主机的端口

  • -v 表示映射宿主机的目录到容器的目录

  • -u zhq 使用zhq用户运行,与登录到ubuntu的账号一致,避免后面出现的一些执行权限问题

  • -v /home/jenkins_home:/var/jenkins_home 映射jenkins_home,将数据存储到宿主机,这样配置就不会随容器丢失

  • -v /var/run/docker.sock:/var/run/docker.sock 与 -v /usr/bin/docker:/usr/bin/docker 把宿主机docker 映射到容器内,可以直接在容器内使用宿主机docker

  • -v /usr/lib/x86_64-linux-gnu/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7 \ 容器内docker运行需要的库文件

  • -v /opt:/opt \ 自主安装的一些运行时软件(如java/maven/git...)

  • -v /etc/timezone:/etc/timezone映射时区文件,保证容器的时区和宿主机相同(官网的Jenkins容器时区不是中国的时区)

最后的jenkins/jenkins:lts是要启动的镜像。

  1. sudo docker run -d --name jenkins -p 8080:8080 -p 50000:50000 -u $(id -u) \

  2. -v /home/jenkins_home:/var/jenkins_home \

  3. -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker \

  4. -v /usr/lib/x86_64-linux-gnu/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7 \

  5. -v /opt:/opt \

  6. -v /etc/timezone:/etc/timezone jenkins/jenkins:lts

ps:可使用以下命令查看container是否运行成功:

  1. $ sudo docker ps

  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

  3. 3c20dfcbb16e jenkins/jenkins:lts "/sbin/tini -- /usr/…" 2 minutes ago Up 2 minutes 0.0.0.0:8080->8080/tcp, 0.0.0.0:50000->50000/tcp jenkins

容器启动后,就可以访问ip:8080看到Jenkins首次运行的首页了,然后通过下面命令查看初始密码,填入之后跳转到安装插件的页面,选择第一个就好,会默认安装一些插件。

sudo cat /home/jenkins_home/secrets/initialAdminPassword

ps: 上面路径与在浏览器中访问Jenkins提示的地址不一样哦,那个是container中的地址,我们要查宿主机中映射的地址,见上面的命令,不要搞错。

插件安装很慢,所以我们要设置的插件的国内镜像url进行提速,具体自行寻找参考文章。

替换完成后,需要执行以下命令,重启容器:

  1. sudo docker ps # 获取container 的id

  2. sudo docker container restart 获取的container_id

再次访问Jenkins页面可以发现插件安装飞快。

创建一个自由风格的项目:

  • 在项目配置中,添加git地址、分支名称

  • 保存退出,回到项目列表,点击右侧的构建按钮

  • 校验代码是否拉取成功

  1. cd /home/jenkins_home/workspace

  2. ls -l

  3. drwxr-xr-x 12 zhq zhq 18 4月 21 16:28 HelloWorld # 如果展示了项目名称,代表拉取代码成功

  • 暂停当前操作,我们先在本地使用Gradle打包,然后再和Jenkins进行结合

Gradle打本地包

下载解压java SDK、Android SDK和gradle。

  1. ~$ mkdir soft

  2. ~$ cd soft

  3. ~$ wget ftp://biguser:www.jb51.net@big.gxkjbg.com:8021/201704/tools/jdk-linux-x64.tar.gz

  4. ~$ wget http://dl.google.com/android/android-sdk_r24.4.1-linux.tgz

  5. ~$ wget https://services.gradle.org/distributions/gradle-5.4.1-all.zip

  6. ~$ tar -zxvf jdk-linux-x64.tar.gz -C /opt/java/

  7. ~$ tar -zxvf android-sdk_r24.4.1-linux.tgz

  8. ~$ unzip gradle-5.4.1-all.zip

配置Java、Android环境变量。

~$ sudo vim /etc/profile

在文件底部添加以下内容:

  1. export JAVA_HOME=/opt/java/jdk1.8.0_131

  2. export PATH=${JAVA_HOME}/bin:${PATH}

  3. export ANDROID_HOME=/home/zhq/soft/android-sdk-linux

保存退出后,导入新的配置:

~$ source /etc/profile

现在来验证一下。以我们当前项目做例子,可执行下面命令:

~$ ./soft/gradle-5.4.1/bin/gradle --parallel -b /home/jenkins_home/workspace/HelloWorld/build.gradle assemble_test

其中:

  • /home/jenkins_home/workspace/是文中Jenkins用来存放项目代码的目录;

  • /HelloWorld/build.gradle我们项目build.gradle所在目录,如果打包其他项目应做响应替换;

  • assemble_test是项目的buildType,一般都会有assembleDebug和assembleRelease,项目不同可能会有其他类型,比如我们用到的assemble_test。

以上操作,有错误产生,和当前所使用的Android SDK没有升级相关版本有关系,由于下载的Android SDK无法启动Android SDK manger,所以我安装了Android Studio,在启动的时候提示指定SDK路径,启动已经下载了的项目,按照提示更新SDK即可。

Android Studio在ubuntu下安装比较容易,在此不做详细说明了。

把Jenkins和Gradle进行结合

把打包命令写成一个脚本test.sh。

  1. #!/bin/bash +x

  2. . /etc/profile

  3. ~/soft/gradle-5.4.1/bin/gradle --parallel -b /home/jenkins_home/workspace/HelloWorld/build.gradle

保存退出后,增加执行权限:

chmod +x test.sh

在Jenkins项目中添加构建shell,把刚才文件的绝对路径添加进去,下面我们就准确掉坑里了。

执行项目构建发现构建失败,提示test.sh没有找到,这是因为Jenkins执行的时候,是在容器中进行的,我们刚才那个路径在容器中不存在,我们需要把宿主机当作一台远程机器ssh到机器上执行脚本:

  • 给Jenkins安装SSH插件

  • 在系统管理-->系统配置中按照填写宿主机ip/端口/凭证(登录账号密码)如下图:

  • 保存退出,重新构建

至此,这台机器已经可以成功打包了。

扫尾工作

安装存放到指定位置。对于上面提到的test.sh可以进行修改,把apk放到指定位置,代码修改如下:

  1. #!/bin/sh +x

  2. . /etc/profile

  3. ~/soft/gradle-5.4.1/bin/gradle --parallel -b /home/jenkins_home/workspace/Hellworld/build.gradle assemble_test

  4. app_path='/home/jenkins_home/workspace/{项目apk存放的位置,根据项目不同进行修改替换}'

  5. target_path='/home/zhq/webroot/apks/' # 此处是自定义存放位置

  6. if [ "`ls -A ${app_path}`" = "" ];

  7. then

  8. echo "${app_path} is empty"

  9. else

  10. mv $app_path/*.apk $target_path

  11. rm -rf $app_path/*

  12. fi

把列表发布到网络,可以通过浏览器访问:

  • 使用docker安装lnmp服务器

  • 映射apk存放目录到nignx服务器

以上内容不是很难,略掉了哈。

行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入扣群: 320231853,里面有各种软件测试+开发资料和技术可以一起交流学习哦。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3018620.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

20基础解决-buuctf-1.RSA1

2.buuctf-1.RSA1 RSATool2v17工具的使用 打开RSA Tool 1.Number Base 设置为十进制 2.注意:Public Exponent这里要使用16进制的数,如果公钥e17的话,就应该填入十六进制的11 3.给出p,q,e的话直接填入,再点击Calc.D,获得d 4.给出…

代码生成工具1 ——项目简介和基础开发

1 项目简介 需要提前在数据库建好表,然后执行代码生成工具,会生成简单的Java文件,避免重复编写增删改查代码。类似的工具网上有很多,本人开发这个工具属于自娱自乐。这个专栏会记录开发的过程。 2 项目搭建 数据库使用MySQL &…

CSS-背景属性

目录 背景属性 background-color (背景颜色 ) background-image (背景图片 ) background-repeat (背景图平铺方式 ) no-repeat 不平铺 repeat-x 水平方向平铺 repeat-y 垂直方向平铺 repeat 平铺 background-position (背景图位置) background-size (背景缩…

Golang | Leetcode Golang题解之第74题搜索二维矩阵

题目&#xff1a; 题解&#xff1a; func searchMatrix(matrix [][]int, target int) bool {m, n : len(matrix), len(matrix[0])i : sort.Search(m*n, func(i int) bool { return matrix[i/n][i%n] > target })return i < m*n && matrix[i/n][i%n] target }

html--瀑布效果

<!doctype html> <html> <head> <meta charset"utf-8"> <title>瀑布效果</title><style> body {background: #222;color: white;overflow:hidden; }#container {box-shadow: inset 0 1px 0 #444, 0 -1px 0 #000;height: 1…

小程序搜索排名优化 三步操作提升

搜索排名优化最直接的一个目的就是为了提升小程序的排名和流量&#xff0c;获取用户的信任度。当用户在搜索关键词的时候&#xff0c;能让用户看到小程序&#xff0c;增加被发现和点击的机会。 一、关键词优化&#xff1a; 1.选择合适的关键词&#xff1a;选择与小程序内容高…

VMware虚拟机提示内存不足

VMware虚拟机&#xff0c;k8s集群搭建内存不足的问题 疑问&#xff1a;我的电脑是8G8G双通道的内存&#xff0c;当我在搭建k8s集群时给master-2G内存&#xff0c;node1-3G内存&#xff0c;node2-3G内存&#xff1b; 当依次打开虚拟机到node2时VM提示“物理内存不足&#xff0c;…

AI预警未来:山体滑坡与塌方事故的潜在发现者

在科技日新月异的今天&#xff0c;人工智能&#xff08;AI&#xff09;的应用已经渗透到了我们生活的各个领域。而在防灾减灾的领域中&#xff0c;AI技术的引入无疑为我们打开了一扇新的大门。以梅大高速大埔往福建方向K11900m附近发生的路面塌方灾害为例&#xff0c;我们不禁思…

数字人解决方案——AniPortrait音频驱动的真实肖像动画合成

概述 在当今数字化时代&#xff0c;将静态图像和音频素材转化为动态、富有表现力的肖像动画&#xff0c;已经成为游戏、数字媒体、虚拟现实等多个领域的重要技术。然而&#xff0c;开发人员在创建既具有视觉吸引力又能保持时间一致性的高质量动画框架方面面临着巨大挑战。其中…

阿贝云免费服务器推荐

由于近期毕设需要&#xff0c;需要将毕设上传到云服务器&#xff0c;届时答辩方便展示&#xff0c;找了很多云服务器提供商&#xff0c;发现都是需要抢或者其他要求的&#xff0c;无意中从一个知乎帖子中发现了阿贝云&#xff0c;号称永久免费&#xff0c;兴冲冲的开始免费适用…

【Git】Git学习-15:分支简介和基本操作

学习视频链接&#xff1a;【GeekHour】一小时Git教程_哔哩哔哩_bilibili​编辑https://www.bilibili.com/video/BV1HM411377j/?vd_source95dda35ac10d1ae6785cc7006f365780https://www.bilibili.com/video/BV1HM411377j/?vd_source95dda35ac10d1ae6785cc7006f365780 git bran…

解释 RESTful API 以及如何使用它构建 web 应用程序

RESTful API&#xff08;Representational State Transfer&#xff09;是一种设计风格&#xff0c;用于创建网络应用程序的 API。它基于HTTP协议&#xff0c;通过使用标准的HTTP方法&#xff08;如GET、POST、PUT和DELETE&#xff09;来实现对资源的操作。 RESTful API的设计原…

用友时空KSOA linkadd.jsp SQL注入漏洞复现

前言 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。 一、产…

深入探索van Emde Boas树:原理、操作与C语言实现

van Emde Boas (vEB) 树是一种高效的数据结构&#xff0c;用于处理整数集合。它是由荷兰计算机科学家Jan van Emde Boas在1977年提出的。vEB树在处理整数集合的查找、插入、删除和迭代操作时&#xff0c;能够以接近最优的时间复杂度运行。vEB树特别适合于那些元素数量在某个较小…

【免费Java系列】大家好 ,今天是学习面向对象高级的第八天点赞收藏关注,持续更新作品 !

这是java进阶课面向对象第一天的课程可以坐传送去学习http://t.csdnimg.cn/Lq3io day08-Map集合、Stream流、File类 一、Map集合 同学们&#xff0c;在前面几节课我们已经学习了Map集合的常用方法&#xff0c;以及遍历方式。 下面我们要学习的是Map接口下面的是三个实现类H…

Baidu Comate智能编助手:打工人的编码利器

目录 写在前面一、Baidu Comate智能编助手二、安装使用三、功能特点四、使用体验五、优势与不足写在最后 写在前面 在当前AI技术和工具蓬勃发展的时&#xff0c;对于AI开发工具的需求日益增长。Baidu Comate智能编码助手作为一款基于文心大模型的新一代编码辅助工具&#xff0…

红帽为 Red Hat OpenShift AI 扩大与 Elasticsearch 向量数据库的合作

作者&#xff1a;来自 Elastic Aditya Tripathi 红帽和 Elastic 今天宣布开展合作&#xff0c;以便在 Red Hat OpenShift AI 上集成 Elasticsearch 向量数据库。 Red Hat OpenShift 用户现在可以通过红帽生态系统目录实施 Elasticsearch 以进行向量搜索和检索增强生成 (RAG) 应…

证券基金信创联盟研讨会:YashanDB分享金融核心数据库技术实践

4月26日&#xff0c;由证券基金行业信息技术应用创新联盟主办、WG3稽核风控系统工作组承办、国信证券股份有限公司协办的信创联盟2024年度系列研讨会第三期-稽核风控系统信创实践成功举办。国内头部企业国信证券、申万宏源证券、信达证券、国金证券、广发证券等单位共计300余人…

牛客热题:链表的奇偶重排

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;力扣刷题日记 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 文章目录 牛客热题&#xff1a;链表的奇偶重排题目链接方法一&…