Android使用Jenkins持续集成

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/binbinqq86/article/details/81033707

转载请注明出处:https://blog.csdn.net/binbinqq86/article/details/81033707

前言

本文较长,不是一般的长,需要强大的耐心,希望各位看官慢慢阅读,如果觉得不好,您只当一乐,如果觉得还可以,能给您带来收获,那将是我的荣幸,以下正文开始。。。

背景

原来在刚开始工作到时候不知道有Jenkins这种神器的存在,每次项目要提测了,测试人员都会在整个改bug期间,不停的找我们要包,当然,我们自己每天也会去打包给他们,这个过程其实挺机械化的,非常浪费人力资源,那么有没有一种方案,可以每天定时打包,或者一键打包呢,并且把这个东西放到服务器上,这样也方便测试人员自己去打包,或者谁需要谁就去自己打(不要总是来找开发哥哥要包,他们很忙的~),后来看到Jenkins一切就迎刃而解了,那么什么是Jenkins呢,到底为什么这么厉害呢?下面就先来介绍一下。

Jenkins简介

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。Jenkins的功能包括:

1、持续、自动地构建/测试软件项目。
2、监控软件开放流程,快速问题定位及处理,提示开放效率。

使用Jenkins不仅可以持续构建Android,还可以构建Java、IOS等项目,可以说整个公司团队的项目基本都可以弄一台专门的服务器放在公司内部去用来持续构建打包发布项目,极大的节省了开发人员、测试人员的工作量。

准备工作

本人电脑是MAC,所以以下都是基于MAC系统讲解,其他window,Linux配置和使用都是一样的。

下载和安装

我们先去官网下载:https://jenkins.io/download/
我们可以选择稳定版和开发版,这里我选择的是稳定版:
这里写图片描述

下载完成之后,我们之间点击安装就可以了,window下可以下载war包和tomcat去部署。安装完成后会出现输入密码页面,初始的管理员密码,jenkins自动生成的,根据页面上的路径找到密码(我的路径是:/Users/Shared/Jenkins/Home/secrets/initialAdminPassword,注意一下权限问题,后面也会遇到,这是一个坑),拷到下面的输入框中。
这里写图片描述
安装插件,可以默认的安装,也可以自己选择,(jenkins配置好后也可以安装插件)这里我们选择默认的。
这里写图片描述

完了以后到创建用户:
这里写图片描述

如果不想创建,则点击下方的Continue as admin直接登陆进去即可,然后修改一下初始密码,就是我们刚才第一步输的那一串,改为自己的密码即可,完成后就可以进入主页了:
这里写图片描述
Jenkins默认的地址是:http://localhost:8080

基本配置

安装好以后,我们就来进行基本环境的一些配置,主要是jdk,android sdk,gradle,git。
这里写图片描述

我们依次点击红线进入配置,首先是系统设置:
这里写图片描述

按照上图配置,键必须是ANDROID_HOME,不可以是其他字母,下面的值就是你本机的android sdk目录,一定要注意这里的权限问题,否则后面构建的时候没有权限的话会提示找不到sdk路径,还有一种方案,就是所有需要的这些环境,不要用系统下的目录,而是自己去新建目录,然后去存放这些文件,这样就避免了权限的问题,而且如果是公司的服务器,一般都是Linux,这些目录都是需要去单独下载和配置环境变量的,本文就偷懒使用了系统安装的默认目录。
这里写图片描述

这样就配置好了基本的环境变量和全局变量。(这里gradle也可以不配置,在最后构建的时候会自动去下载,不过速度非常慢)

新建项目

一切准备就绪,下面就来新建一个我们要构建的项目。点击新建任务,输入名称,选择构建一个自由风格的软件项目,然后确定。
这里写图片描述

建好之后,点击进入我们的项目,然后就可以进行基本的配置了。

项目基本配置

General

点击左边的配置:
这里写图片描述
这里写图片描述

从上到下一共6个tab,我们去一一配置自己想要的功能:
描述里面我们可以写下自己工程项目的简介。
这里写图片描述

勾选参数好构建过程,我们可以增加一些参数来控制自己的项目的构建,这里其实对应的变量是工程下面的gradle.properties里面定义的,然后build.gradle脚本会采用这里配置的去动态构建工程,注意一定要与properties文件中一一对应。我们可以添加的参数类型如下:
这里写图片描述

这里由于我们的项目是在公司内部搭建的gitlab上,所以增加了一个Git Parameter,用来选择需要构建的分支,而BUILD_TYPE就是一个选项参数,里面的debug和release则和我们项目里面的buildTypes对应
这里写图片描述

当然这在打渠道包的时候,我们还可以增加一个PROUCT_FLAVOR参数,用来控制不同渠道。
这里写图片描述

IN_JENKINS用来控制是否是在用Jenkins打包,这样就可以区分最终输出apk的路径,因为服务器和我们本机路径是不同的。

下面的EMAIL_RECEIVER和EMAIL_RECEIVER2是两个文本参数,用来在构建完成后发送邮件的,里面输入的是邮件接收方。(邮件留在最后讲)

这里的参数我们就暂时配置这几个,后续真正项目中你可以自己随意增加参数去控制整个构建过程,来达到自己想要的功能,比如还可以增加构建环境(开发,测试,预发布,线上),是否混淆等等。。。
这里写图片描述
点击最后的高级按钮,会出现上图,我们可以自己定义工作空间,填入目录和显示名称,Jenkins就会把源码下载到这个目录去。

源码管理

这个tab下面主要就是用来指定源码存放位置的,我这里就存在github上了,公司的话一般都是存在自己的gitlab服务器。
这里写图片描述
上图就是我的源码地址。注意这里的Branches to build一定要选择上面我们的变量值,默认的是*/master,如果不配置,打出来的都是master分支,上面的配置就无效。还有就是在打包的时候如果不选择分支,默认也是打master分支的包,这个地方要注意一下。

构建触发器

这里写图片描述
这个tab下可以设置我们文章开头提到的定时打包功能,勾选定时构建就可以了,是不是很简单很强大~

构建环境

这里写图片描述
这里可以设置一些项目信息,比如在构建之前删除工作目录,设置构建名称等等。。。

构建

这里写图片描述
这里需要设置gradle,我们增加一个构建步骤:Invoke Gradle script,然后配置如上,也可以选择 Use Gradle Wrapper,Tasks里面输入我们要执行的任务,一般是clean assemble$BUILD_TYPE,其实就是gradle打包构建命令,输入在这里即可。点开高级:Pass all job parameters as Project properties,一定要勾选这个选项,代表把你上面的那些参数用来当作gradle构建参数,否则的话是不会起作用的。

然后我们再增加一个shell脚本,用来在构建结束以后得到我们想要的apk地址等信息,然后可以去上传文件到蒲公英。我们先来看看脚本内容:

#!/bin/bash
echo ">>> this is a test..."
if [ "${IN_JENKINS}" ] ; then
    dir="/Users/Shared/Jenkins/Home/workspace/tbTest/app/build/outputs/apk/${BUILD_TYPE}/"
    fileName=""

    cd $dir

    for i in $( ls )
    do
      echo $i
      temp=$i
      if [ "${temp##*.}"x = "apk"x ]
        then
          fileName=$i
      fi
    done

    fullPath=$dir$fileName

    echo 文件全路径:$fullPath
    RESULT=$(curl -F "file=@${fullPath}" -F "uKey=000" -F "_api_key=000" -F updateDescription=${PGY_DESC} http://qiniu-storage.pgyer.com/apiv1/app/upload)
    sub_json=${RESULT##*appKey\":\"}
    appkey=${sub_json%\",\"userKey*}

    export DOWNLOAD_URL=https://www.pgyer.com/$appkey #设置全局变量,为了发邮件拼接完整路径

    echo "#######################################################################################"
    echo "#######################################################################################"
    echo "##"                                                                                
    echo "下载地址:<<< ${DOWNLOAD_URL} >>>"                                          
    echo "##"                                                                                     
    echo "#######################################################################################"
    echo "#######################################################################################"
else
    echo 'normal=================='
fi

这个就是一个简单的shell脚本,遍历我们工程的目录,找到我们的apk文件,然后用蒲公英的api上传过去。

构建后操作

构建后我们一般都是邮件通知,这里我们增加一下邮件步骤:
这里写图片描述
详细的邮件配置后面讲。

上传apk到蒲公英

上传蒲公英也就一句话的事,官方给出了很详细的文档:
这里写图片描述

文档地址如下:https://www.pgyer.com/doc/api#uploadApp

这里就是调用我们上面写好的shell脚本,很简单。

还有一种方案就是使用Jenkins插件来上传蒲公英,这个也很简单,官方也给出了详细的教程,这里不再演示,地址如下:https://www.pgyer.com/doc/view/jenkins_plugin

发邮件

邮件功能,其实Jenkins自带的就有,就是上图里面的第一个E-mail Notification选项,这个功能非常简单,而且邮件内容不能编辑,基本没有卵用,另外一个就是插件了,Editable Email Notification,看名字就很强大,可以编辑的邮件,比系统的强很多,我们下面就分别讲解一下两种。

E-mail Notification

要使用这个邮件功能,必须先做如下配置,切换到系统管理/系统设置:
这里写图片描述
首先配置Jenkins的地址,和系统管理员的邮件地址,这里我写的是163邮箱。
然后找到最后的邮件通知:
这里写图片描述
填写如上,点开高级按钮:
这里写图片描述
勾选smtp认证,输入163邮箱和密码保存即可,注意这里的用户名必须与上面的管理员邮箱一致,否则邮件发送不能成功。
配置好之后勾选最后的通过发送测试邮件测试配置,填写测试邮箱,点击Test configuration,如果没有问题,则会提示成功,并且收到一封邮件如下(有可能被当成垃圾邮件,好好找找)
这里写图片描述
另外163邮箱支持smtp/imap/pop3三种方式的服务器,但是Jenkins只有smtp,所以如果是我们公司内部的邮箱服务器,也需要支持smtp。到时候可以由运维人员去配置或者告诉你这个地址。网易的163邮箱截图如下:
这里写图片描述
另外qq邮箱也是可以做服务器的,只是默认是关闭的,需要你手动去设置里面打开,如下:
这里写图片描述
这里设置好以后,去我们的项目里面设置如下:
这里写图片描述
Recipients就是我们的收件人列表,这里我传入的就是一开始我们设置的参数化构建的变量,这里是由用户来自己输入的,注意多个邮箱采用空格、逗号、换行分开均可,不支持分号。下面的注释说明我们可以看到这个默认的邮件功能只有在构建失败,变的不稳定,或者变回稳定的时候才会发送,如果一直成功,则只有第一次才发送邮件,这就不太友好了,我们看看发送的邮件:
这里写图片描述
可以看到内容就是整个Jenkins的构建日志,很不友好。

Editable Email Notification

这个插件也需要先进行设置:
这里写图片描述

除了红线处,其他都用默认值就可以了,这里的默认值都是Jenkins的全局变量,每个可配的地方都可以使用,我们点开高级,配置如下:
这里写图片描述
同样这里需要跟上面填写的管理员邮箱一致,输入密码即可。具体的邮件发送策略我们可以在这里配,也可以在后面单独的项目里面去配,因为考虑到可能服务器上有很多条业务线的不同项目,所以我们不在这里去配全局的东西,分散到各自项目去单独处理,项目配置如下:
这里写图片描述

这里全部采用默认配置即可,那么我们发送邮件是在哪里配的呢?打开右下角的Advanced Settings:
这里写图片描述

找到Triggers,这个就是我们的邮件触发器,我们新增两个类型:Faiulre-Any,Success,就是任何情况的失败,还有成功,这两种情况才去给我们发送邮件,我们以Success为例,点开高级:
这里写图片描述
Send To 就会发送到我们指定的邮箱,这里配置Recipient List,我们刚才在这个标签下配置的邮箱就会收到邮件,下面还可以自己定义收件人列表,我们采用的是EMAIL_RECEIVER2这个用户输入的变量,cc就是抄送给谁,中间逗号分隔就可以了,下面可以设置主题,内容,内容的样式可以是text文本,还可以是html,非常方便,最后一个Attach Build Log选项是为了在我们的邮件中去读取构建的日志内容,来输出一些东西,比如下载地址之类的东西。。。是不是完全满足我们的需求了!来看邮件效果:
文字版的:
这里写图片描述

html版的:
这里写图片描述

就问你6不6~

开始构建

终于讲完了,当然还有很多可配功能这里没有去说,我们只是说了比较基本的一些,已经满足我们日常打包需求了,下面就开始构建了,点击左侧栏的Build with Parameters,选择和输入需要的参数:
这里写图片描述
点击开始构建。
这里写图片描述
左边栏会有构建历史,点击进去可以查看本次构建详情,点击控制台输出,可以看到如下详细日志:
这里写图片描述
这里写图片描述
完成后上传蒲公英,发送邮件,一切全自动搞定,哈哈~(这里我没有蒲公英的key,所以只是做个例子,所以没有成功,请忽略即可)

最后

至此,我们的android项目使用Jenkins持续集成就讲完了,感觉是不是非常方便呢,以后就可以把打包的任务交给测试妹子了,自己可以偷乐了,哈哈!不明白的童鞋可以在下方留言,谢谢大家~

参考文章:

没有更多推荐了,返回首页