• 对于注定会优秀的人来说,他所需要的,只是时间----博主
  • 手懒得,必受贫穷,手勤的,必得富足----《圣经》
  • 帮助别人,成就自己。愿君在本站能真正有所收获!
  • 如果你在本站中发现任何问题,欢迎留言指正!
  • 宝剑锋从磨砺出,梅花香自苦寒来!
  • 本站开启了防爆破关小黑屋机制,如果您是正常登录但被关进小黑屋,请联系站长解除!

<十五>Jenkins实战应用–Jenkins构建安卓项目配置

Jenkins eryajf 1年前 (2018-05-11) 2907°C 已收录 7个评论
本文预计阅读时间 20 分钟

*系列汇总*

这是一个系列文章,大大小小到今天惊然发现竟然已经累计二十篇了,也就不得不做一个小汇总。回想当初写第一篇文章的时候,就已经决心事无巨细,一应认真的走下来,回头遮望,看着皇皇这么多文章,一股强烈的成就感就此油然而生,于是便有了这些汇总整理。在这个过程当中,好像也帮助过不少的人,这是让我尤其开心的事情,同时也结识了一些志同道合的朋友,再没有比这更让人觉得愉悦的事情啦!也希望以后写出更多类似的系列文章。

文章汇总地址如右:Jenkins入门教程。

如果相中哪个,点击进去便是。希望正在读这段话的你能够在这个小系列中获得自信以及喜悦!

1,简单介绍。

公司安卓打包都是开发小伙伴每次用自己的IDE进行打包,有时候测试需要某个包,还需要找开发去要,两相权衡,都要废掉不少时间。有时候浪费一些时间还好,当你沉浸在自己的思路当中工作时,最烦别人突然打断,这种打断不仅仅是眼前的事情无法继续,更是将充满光芒的思想的慧根给切断了。

为了避免这种情况,我打算利用Jenkins来作出打包功能,然后权限开放给测试小伙伴,他们可以自己按需进行打包并下载使用,而不用再依赖于开发人员,简直是测试小伙伴的福音。

2,效果展示。

开始正式的配置之前先看一下最终的效果,来刺激一下学习的劲头。

利用Jenkins的插件直接在项目的构建历史当中显示可以下载的二维码。网上的一般都是打码分享的,我这里放心大胆分享,等会儿再细说可以这么做的原因。

而且在邮件通知当中,测试小伙伴也可以直接保存二维码或者点击链接进行下载。

好啦,现在开始吧。

3,准备工作。

1,一个可用的Jenkins环境

这个不多说了,不会的参考本人其他Jenkins文章。

2,配置gradle。

官网:https://gradle.org/

下载地址:http://services.gradle.org/distributions/

找到与自己公司安卓开发所使用的版本下载即可(注意下载后缀是all.zip的,不要下载别的)。我一开始就有遇到版本太低了的情况,这里就不重现了,直接下载公司现在用着的4.4版本。

下边是一波命令的操作

cd /opt
wget http://downloads.gradle.org/distributions/gradle-4.4-all.zip
unzip gradle-4.4-all.zip

vim /etc/profile

#gradle
export GRADLE_HOME=/opt/gradle-4.4
export PATH=$PATH:$GRADLE_HOME/bin

source /etc/profile
gradle -v

最后用查看版本号的方式验证安装情况。

写教程的时候已经忘掉自己配置gradle的时候遇到的一个问题,那就是系统的glibc版本过低的问题,这个真的是让人非常难受,前两天在自己服务器配置mindoc的时候也是碰到这个问题,意思就是CentOS 6版本上用的glibc版本只到2.12,然而很多依赖需要2.14的,好了,升级去吧,有够受的,即便是看上去升级可以了,但是又会搞乱系统的编码,现在想起来,当时我在6上碰到这个问题了,直接跳过,去到CentOS 7上部署了。

有时候,不要死磕,也是一种好的精神。

3,配置sdk。

一个比较不错的下载地址:tools.android-studio.org/index.php/sdk

再来一波操作

cd /opt
wget https://dl.google.com/android/android-sdk_r24.4.1-linux.tgz
tar xf android-sdk_r24.4.1-linux.tgz
	
vim /etc/profile

#SDK
export ANDROID_HOME=/opt/android-sdk-linux
export PATH=$PATH:$ANDROID_HOME/tools

然后通过下边的命令来验证安装的情况

cd android-sdk-linux/tools

./android list sdk --all	#通过这个命令列出所有的sdk版本。

./android update sdk -u --all --filter 1,2,3  
#再通过这个命令安装需要的sdk版本。其中1,2是对应版本的标签。

公司这边需要的是24.0.0 26.0.0 27.0.3 这三个,那么对应的安装就可以了,命令如下:

./android update sdk -u --all --filter 4,11,19

其实一开始并不知道该安装的是哪些,只听公司开发说代码里写了一个需要26的,一开始也就只是下载了26版本的,剩下两个都是在后来的报错中知道需要这个,那么就安装咯。

报错的样子大概如下:

当你下载这些之后,会在build-tools目录下保存着。

ok,基本上服务器这边的环境差不多了,就剩Jenkins这边的配置咯。

4,web界面配置

1,安装一些插件

必有:

build-name-setter		 #是一个设置构建项目名称的插件。
Gradle			         #这个不说了,gradle所需插件。
Git Parameter		         #在选择参数化构建的时候使用。
Email Extension Plugin	         #发送邮件使用。
description setter plugin	 #等会儿配置构建历史显示二维码的利器。

2,配置全局变量

进入到系统管理–》系统设置–》全局属性–》环境变量

添加两个:

注意名称不要乱改,因为常规来说都是这么定义的,如果乱改,可能出错。

再添加一下gradle的全局变量。

进入到系统管理–》全局工具配置–》添加gradle

ok,现在可以开始正式的项目配置了。

5,配置项目

1,新建一个项目,名字就是test-android好了。

2,丢弃旧的构建,没啥说的,不让构建历史太长。

3,参数化构建构成

使用选项参数来进行选择,这里配置了两项,一个是定义包的环境,测试预发与线上,另一个就是Git的分支版本号。

4,源码管理

这没啥说的,配置好地址就行了。

5,构建环境

在构建环境这里可以选择一下set build name,只是为了让构建历史中看起来好看一些。

#${BUILD_NUMBER}-${ENVIRONMENT}-${BRANCHES}

其中的变量也都是根据项目里边配置的变量来定义的。

定义之后显示效果如下:

6,构建

使用gradle命令进行构建。

首先是构建这里,选择gradle的构建,version是选择刚才配置好的环境变量。

下边Tasks写入编译的命令,其实是一整条,只不过这里分行显示了,可以直接合成一行,只不过每行之间都要空格。

注意这里的变量其实是上边选择参数里边定义的名称,不要弄错了。

7,execute shell

这里完成了两件事儿,一个是让apk在内网环境中可供下载,一个是生成对应的二维码,这个地方需要详细表述一下。

首先,来解答一下开头我说可以不打码放心的放出二维码,是因为这些配置都是在内网当中,外网是无法访问下载的。网上很多教程都是借用一些第三方的平台,诸如蒲公英之类的,但我觉得这种方式太low,或者说依赖这种第三方很不理想,理想中就是一切靠自己在本地给完成了。偶然的之前在一个地方看到一个大神分享了一个二维码制作的小工具,也正是借助于这个工具,得以让所有的关于二维码的情况得以实现。

获取工具请点击右边:二维码生成工具

在此感谢作者那种,跟我一样的共享开源的精神。嘿嘿。

一开始我的思路想着直接将地址定位到Jenkins的工作空间那里边,然后直接让用户扫描二维码进行下载不就ok啦,就是借助于Jenkins的功能,让这里的下载变得easy,然而,现实却是当你这么配置了之后,得出一个二维码,扫了二维码之后发现,需要登录Jenkins才能进行下载,,哈哈哈哈,搞到这里,我自己也忍不住呵呵一笑。

那么好吧,给你制作一个单独的可供下载的地址好啦。

直接在本地安装nginx。配置两个虚拟主机:

一,可供下载的apk。
[root@xdjenkins vhost]$cat apk.conf
server {
        listen       800;
        server_name test.apk.com;
        charset utf-8;
        location / {
                root   /usr/local/nginx/html/app/;
                autoindex       on;
                autoindex_exact_size    off;
                autoindex_localtime     on;
        }
}
二,可供访问到的二维码地址。
[root@xdjenkins vhost]$cat er.conf
server {
        listen       801;
        server_name test.image.com;
        charset utf-8;
        location / {
                root   /usr/local/nginx/html/er;
                autoindex       on;
                autoindex_exact_size    off;
                autoindex_localtime     on;
        }
}
注意:两个虚拟主机当中的域名就不要太在意了,随便写的而已,反正都是内网使用,等会儿都是直接用ip+port就可以啦!

好啦,现在可以直接利用二维码制作小工具来生成咯。

现在来贴出刚才在shell中执行的那两步操作。

cd /usr/local/nginx/html/app/ && rm -rf *

cp $WORKSPACE/app/build/outputs/apk/app/$ENVIRONMENT/*.apk ./

source /etc/profile

A=`cd /usr/local/nginx/html/app/ && ls > /tmp/aa.log && cat /tmp/aa.log`

java -jar /usr/local/nginx/html/tools/qr.jar url=http://192.168.106.101:800/$A  image=ishangjie.jpg save=/usr/local/nginx/html/er/

没啥过多好说的,暂时这个地方也比较low,因为容易出现apk被覆盖的问题,毕竟测试人那么多,第一个发好了,正在下载app,这个过程中又有另外一个人发布给覆盖了,那么第一个人就又要再重新去发布一次才能下载,虽然这种情况基本上不大多,但是在公司测试人员比较多的情况下也会出现,所以暂时先这样,后期丰富一下功能,实现保留5个历史apk与对照的二维码。

8,构建后的操作

在构建后操作里添加这个,此处就是定义构建历史显示二维码的地方,此处也踩坑不少,由于不是很懂html,导致改来改去,也没有效果,最后竟然发现不是html写的有问题,而是需要修改一些其他地方的配置。

这个时候这里不用动,是Jenkins当中默认的填入方框里的是文本格式,所以这里的html也就失去效果,一直像我这里显示的样子了:

解决办法:

进入系统管理–》全局安全配置–》Markup Formatter

原本默认的是纯文本的,现在更改成html,然后二维码显示就正常了。

但是,注意,这里会带来一个问题,那就是全局全部都变成html的了,之前一些配置可能会受影响。

这里举一个受影响的例子:

所以这里就要做一个取舍了,看你自己想要哪一个,不想要哪一个了。

9,配置发送邮件

最后是邮件的配置了,上边第一个箭头是定义的收件人,中间的是格式,下边的是邮件内容。

在下边了:

<!DOCTYPE html>
 <html> 
 <head> 
 <meta charset="UTF-8"> 
 <title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title> 
 </head> <body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0"> <table width="95%" cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif"> 
 <tr> <td>(本邮件由程序自动发送,请勿回复!)</td> </tr> 
 <tr> <td><h2> <font color="#0000FF">安卓包下载地址</font> </h2></td> 
 </tr> 
 <tr>
      <td nowrap="nowrap" style="border-color: gray;"><span style="color: #808000;">本次构建的安卓版本号是:</span></td>
      <td nowrap="nowrap" style="border-color: gray;"><span style="color: #808000;">#${BUILD_NUMBER}-${ENVIRONMENT}-${BRANCHES}</span></td>
</tr>
 <tr> <td> <ul> 
 <li>下载地址:<a href="http://192.168.106.101:800/ishangjie.apk">点击即可下载</a></li>
 <img src="http://192.168.106.101:801/ishangjie.jpg" /> 
  </ul> </td> </tr>
  </table>
 </body>
 </html>

ok,就此,所有的都配置完毕,基本上可以收工了。

剩下的也就是Jenkins的权限配置一下,让测试小伙伴可以自己构建使用,别的,找合适的地方炫耀一波,基本上就够了。

一周下来,用了晚上几个小时就给总结了,是的,没错,先写一遍教程,再整理到博客上来,几个小时就进去了,今天周五,下班的时候七点半了,回到家吃过饭就开始弄博客,到这会儿,哈,一眨眼功夫,竟然快零点了!!!

任何人如果在使用本教程的过程中有疑问,都可以通过主页上的联系方式与我交流。

6,补充之一,关于链接的补充

18年5月14日补充如下:

上周是周五将下班写的总结,临事匆忙,因此漏掉最后一步,今天特来补充。

最后附上所有曾参考过的文章在此,尽管没有某一篇是给自己指明十分清晰的路,但是没有这些铺垫,自己也不可能走到现在,从开头的抱怨,到中途的熬炼,再到最后的感恩,这就是学习的历程,也是学习的趣味吧。

参考:

https://www.jianshu.com/p/915c1ae69144

https://blog.csdn.net/g19920917/article/details/52071957

https://blog.csdn.net/g19920917/article/details/52071957

https://blog.csdn.net/w_yunlong/article/details/54695535

https://blog.csdn.net/cjm2484836553/article/details/78013272

https://blog.csdn.net/xlyrh/article/details/54667633

https://segmentfault.com/a/1190000008395219

http://www.uml.org.cn/jchgj/201801292.asp

7,补充之二关于未竟之事的补充

18年5月17日晚22点补充

上周定的计划说完成Jenkins构建安卓项目的五个历史二维码可供下载的,但是两天过去,也请教过不少周边前端的人,基本上都以失败告终。

经过两天断续试验,到头来惊然发现,邮箱里边不支持js的代码,知道真相的我,顿时“泪如雨下”。这种感觉就像你做了所有的万全准备了,最后东风没来,气煞我也。

喏,就是如下所示:

还有:

又能说什么呢。

这里简单说明一下方案与最终的折中办法。

首先怎么在二维码访问站点下保留五个二维码,怎么在apk访问站点下保留五个apk,好像这两个都不是特别难,但是让这两者所保留的五个历史分别进行对应性的可以通过二维码下载到对应的apk,这个就相当有难度了。

我仔细观察过项目构建之后生成的apk名称,也算是有规律,差不多是这样:${ENVIRONMENT}-${BRANCHES}.apk,如果依靠原始的名称来作为可供使用的apk下载,如果是只保留一个,显然是可以的,但是如果想要保留五个,那么但从命名这一个方面就是无法定义的,还有就是需要二维码那里的名称与apk保持同步以及对应,这事儿或许有多种解决方案,但是就我个人目前所想到的,大概就是这么一种了,很荣幸,就这么一种,被我给想到了。

这种方法就是直接调用系统中的变量${BUILD_NUMBER}作为apk的名称,以及二维码的名称,这样,既保证了apk与二维码的对应关系,也保证了每次做了新的构建之后三方同步向前更新,,,事实上这个地方的难点也正在于此,因为每次都会进行新的构建,如果不是抓住构建数这个变量,恐怕还真不好控制。

现在保留五个apk与五个二维码并且他们是对应关系已经不难,而通过邮件将五个二维码展示出去也实现不了,那就干脆退而求其次,让测试同仁直接通过Jenkins的构建历史当中显示的二维码进行下载吧。

最后就是保留五个历史的操作了。参考我的另一篇文章,保留五个文件的办法


weinxin
扫码订阅本站,第一时间获得更新
微信扫描二维码,订阅我们网站的动态,另外不定时发送WordPress小技巧,你可以随时退订,欢迎订阅哦~

二丫讲梵 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明<十五>Jenkins实战应用–Jenkins构建安卓项目配置
喜欢 (11)
[如果想支持本站,可支付宝赞助]
分享 (0)
eryajf
关于作者:
学无止境,我愿意无止境学。书山有路,我愿意举身投火,淬炼成金!

您必须 登录 才能发表评论!

(7)个小伙伴在吐槽
  1. eryajf
    置顶易见。
    eryajf2018-06-17 11:24 Windows 7 | Chrome 65.0.3325.181
  2. 你的教程都是原创的 点个赞 不像网上的教程都是复制粘贴的
    超超2018-07-26 11:34 Windows 7 | Chrome 63.0.3239.108
    • eryajf
      我个人也是网上复制粘贴教程之苦,因此自己博客发出的教程都是实战经验或者经过试验的。最后,有空常来逛逛 :razz:
      eryajf2018-07-28 09:24 Windows 7 | Firefox浏览器 61.0
  3. eryajf
    签到成功!签到时间:2018-07-29 12:22:21,每日打卡,生活更精彩哦~
    eryajf2018-07-29 12:22 Windows 7 | Chrome 67.0.3396.99
  4. eryajf
    签到成功!签到时间:2019-07-08 14:44:26,每日打卡,生活更精彩哦~
    eryajf2019-07-08 14:47 Windows 7 | Chrome 75.0.3770.100
  5. 这个保留APK的容易 写一个python的后端服务,然后把你打包好的文件发送过去(python后端在你jenkins服务器上的情况下,可以复制到指定路径下),提交给python后端的参数版本文件路径和jenkins的版本构建id,由python后端运行二维码制作程序,记录到数据库中,然后你在展示的时候给一个python后端API二维码展示接口,再给一个文件下载接口,完美解决,你报存多少个都没有问题
    w4632947142019-08-29 14:50 Windows 10 | Chrome 75.0.3770.100
    • eryajf
      是的,都是可以的,这里就是提供一种思路,实现方法怎样都行
      eryajf2019-08-29 22:12 Mac OS X | Chrome 76.0.3809.100