前言:前段时间因项目需要捣拾了一下Jenkins自动化打包,过程中遇到了很多的坑,在此记录一下。因为这篇博客是之后写的,所以有些具体的坑就不能回显了。

一,实现的功能

       选择版本号,git 分支,渠道,服务器地址,指定apk输出目录条件生成apk

二,Jenkins的安装

      1,Tomcat下载 ,下载地址:https://tomcat.apache.org/

      2,Jenkins下载,下载地址:https://jenkins.io/download/

     Jenkins 的安装在这里就不做过多的赘述,网上有很多可查阅的资料,本片博客主要是想记录一下遇到的坑。希望对其他小伙伴们能够有所帮助。


   安装完之后是这个样子的

三,配置Jenkins

     

   点击Manage Jenkins 主要配置三个地方

   1,Manage Plugins

        插件安装:Jenkins安装过程中会有提示安装插件,如果插件安装错误可在这里修改。Jenkins的插件是有依赖关系的,安装一个插件可能需要安装它所依赖的插件,否则会安装失败。勾选需要安装的插件,插件会自动安装。一般需要安装的插件的目录如下:

1.Branch API Plugin
2.build timeout plugin
3.build-name-setter
4.Credentials Binding Plugin
5.description setter plugin
6.Dynamic Parameter Plug-in
7.Environment Injector Plugin
8.Git plugin
9.GIT server Plugin
10.Gradle Plugin
11.Git Parameter Plug-In
12.Pipeline: Basic Steps
13.Pipeline: Build Step
14.Pipeline: Input Step
15.Pipeline: Nodes and Processes
16.Pipeline: Stage Step
17.Scriptler
18.Workspace Cleanup Plugin
19.Post-Build Script Plug-in
20.Email Extension Plugin
21.SSH Slaves plugin
22.Timestamper
如果你使用的SVN 还需要安装
Subversion Plug-in
Subversion Release Manager plugin

   2,Configure System

   

 

 全局配置ANDROID_HOME,

 Name: ANDROID_HOME

 Value: SDK所在的目录

 在环境变量中配置ANDROID_HOME,注意两个位置的ANDROID_HOME的配置一定要保持一致

3,Global Tool Configuration

  

  主要配置上面截图中的三个地方JDK,Git,Gradle有些小伙伴可能会发现自己的jenkins中这三者中可能会少了某一个,造成这   个的原因应该是前面安装插件出了问题,返回到前面检查一下

  注意:

         1,JDK的版本不能太低,Jenkins的高版本要求JDK要是1.8以上

         2,Gradle:我这里选择的是Install antomatically 表示根据选择自动安装Gradle,你也可以根据自己本地有的Gradle版本配置。可以配置多个以应对多个Gradle版本

  四,开始一个新工程

       

   1,点击 New Item,输入工程名点击Freestyle project 创建一个新工程

   2,配置新项目



直接选择代码管理 Source Code Management,

  1>需要输入代码管理的路径,我用的是Gitlab管理的

  2>添加通行证,第一次使用需要点击add 添加Kind使用默认的Username with password。

      Username: Git账户的用户名

      Password: Git账户的密码

 

  滚动到Build ,我这里使用的是 Use Gradle Wrapper,然后在Task任务栏中输入Gradle打包命令行

  clean assembleRelease:表示先clean 项目在打出所有的渠道包

  3,点击保存,开始构建项目

     回到jenkins的主目录找到之前创建的工程,点击进去,点击Build,开始构建项目如果前面配置的信息都是正确的这个时候就可以看到打包成功了如果失败了,点击当前构建,点击Console Output查看错误日志

   五,参数化构建项目

         重点来了,定制属于你自己的自动化



    1,勾选 This project is parameterized (参数化构建项目),点击  Add Parameter ,常用的一般是图中标出的两个。第一个是Boolean类型的参数,第二个是选择类型的参数选择第二个如下配置

  

   以此类推,你可以配置你的版本号,对应的Git分支,服务器地址等等。。常用的参数如下

参数名参数类型参数对应的值
APP_VERSIONChoice1.0.0  (版本号)
BRANCHChoicedev/1.0.0 (Git对应分支)
PRODUCT_FLAVORChoiceXiaomi,Huawei  (渠道)
IS_JENKINSChoicetrue  (来自Jenkins打包)
BUILD_TYPEChoiceRelease ,Debug
APP_SERVERChoice服务器地址

   2,完善代码管理

  

注意:Branches to build 这一栏{}中的字段一定要与上面配置的Git分支字段相对应

  3,将参数注入到Android项目的Gradle文件中,这一步很重要。

  

  1, Task任务栏变更:打出对应的渠道包,我这里打的都是正式包

  2,勾选 Pass all job parameters as Project properties ,这一步很重要,这一步就是将配置参数注入到Gradle文件中

  注意:刚开始弄Jenkins时参考了很多资料,很多说的是勾选 Pass job parameters as Gradle  properties.但是我的Jenkins中却没有这一项,很多人的说法是添加命令行的方式,但是我试着勾选了图中的那一项也是可以的。

 好了,上面的参数配置都已经配置完了,点击保存回到我们的工程,会发现之前的Build,变成了Build with Parameters.点击进去就可以看到你前面配置的参数选项。到这里还没完我们继续。

  六,配置Gradle

        1,Android Studio打开Android 本地项目,找到gradle.properties文件。将前面配置的参数配置进去

   

   注意:标红框的位置要添加上,是一个缓存路径。不添加的话很可能会报错。具体的错误描述记不清了。大致是说需要查找的文件路径超出了window的文件路径长度。

       2,配置build.gradle文件

   

 

buildConfigField "String", "API_SERVER", API_SERVER

上面这一段代码要注意,是动态配置到BuildConfig文件里的。我这里是在release,debug版本都配置了是为了动态写入Jenkins配置的服务器地址。

生成的apk:

     1,指定了apk输出的路径

     2,修改了生成apk的名称,按照:“demo”+输入路径文件夹大小+1+".apk"格式

     3,获取Jenkins配置的服务器地址:

   String baseUrl = BuildConfig.API_SERVER;

     可能有些小伙伴有些疑惑:BuildConfig里没有前面配置的参数,因为BuildConfig文件是自动生成的,你需要build一下。至此,所有的配置都配置完了,回到Jenkins就可以开始你的自动化打包了。

  七,满满的都是泪

       1,前面已经说过的,window系统需要在gradle.properties文件中加入android:buildCacheDir = "xxx"

       2,Jenkins中配置参数时有说到配置服务器地址并且动态写入到BuildConfig文件中,地址类型时String类型的,需要加上“”,例如:www.baidu.com,需要写成“www.baidu.com”。否者在BuildConfig文件中左边声明的是String类型的但是右边的却不是字符串,不知道是不是我自己在配置的过程中出了什么差错,欢迎小伙伴们留言。

      3,If you are using NDK, verify the ndk.dir is set to a valid NDK directory. It is currently set to xxx\SDK\ndk-bundle.If you are not using NDK, unset the NDK variable from ANDROID_NDK_HOME or local.properties to remove this warning. 这个问题可以忽略不会影响编译结果(ps在我这边是可行的)

   在配置过程中遇到的点点滴滴的坑还是挺多的,距离上一次的配置有一段时间了大都忘记了。希望能够帮助到其他的小伙伴,也欢迎指正文中不足或是错误的地方。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐