Android Apk配置Jenkins参数化打包

因团队配合需要其他团队需要对我们团队的项目拥有打包权利,借此机会干脆整个项目都用Jenkins打包,省去一些麻烦,也能提升一些效率。

环境:Linux
系统:CenterOS 7

1 准备工作

1.1 Jenkins安装及插件安装

在安装Jenkins之前,请确保服务器上以安装JDK,并配置全局的Java环境变量。因为Jenkins是依赖Java环境的。

  1. 服务器上安装Jenkins。Jenkins官网教程
  2. Jenkins安装插件:Credentials Binding、Git、
    GitLab Plugin/GitHub(根据自己需求)、Gradle、RVM

1.2 环境变量配置

1.2.1 Android SDK安装

由于平时工作开发一般都是Windows或者Mac电脑,很少有用Linux系统进行Android开发的。

所以打包需要的一些源码和环境是需要准备的。这里有一个快捷的方法就是将完整的项目(包含运行时文件:.gradle、.idea、build等)上传到GitLab上,然后Jenkins拉取完整项目,此时只需要gradle运行环境就可以了,但这里极其不建议这样做。原因有以下:

  • 运行时的文件是跟当时环境有很大关系,所以上传之后容易出现不可预料的运行错误(这个经历过SVN+Eclipse的小伙伴应该懂)。
  • 如果项目的SDK版本有更新或引入的库引入了之前没有的SDK版本,那么就需要再次上传运行时文件。
  • 上传运行时文件,只能单人操作,其他人不能在进行代码上传到该分支或代码合并。而且因为运行时文件是实时变动的,所以就需要上传完Jenkins后将所有运行时文件删除,不然很容易出现代码冲突。

所以我们采取很好的方式就是用SDKManager去自行在服务器上安装SDK,这样如果有更新,我们只需把服务器上没有安装的SDK版本,根据版本号将其安装即可。省去很多麻烦,也更优雅一些。

Android SDK Manager官网

在这里插入图片描述
向下拉倒最下找到这个部分,将对应的管理工具下载到服务器上。然后解压。

SDK Manager文档

根据文档安装需要的SDK版本。

1.2.2 安装Gradle

Gradle官网

Gradle的安装很很简单,按照文档里按照即可。

2 配置Jenkins

2.1 配置Android SDK

  1. 点击Jenkins左侧菜单的Manage Jenkins菜单。

在这里插入图片描述
2. 点击右侧的Configure System菜单。
在这里插入图片描述

  1. 找到Global properties。勾选Environment variables。添加Android SDK的根目录作为环境变量。

在这里插入图片描述
变量名称:ANDROID_HOME

2.2 配置全局工具变量

  1. 回到这个页面,点击Global Tool Configuration。
    在这里插入图片描述
  2. 配置Git、Gradle环境变量。
    在这里插入图片描述
    变量名字随意,变量值必须为相应的根目录的绝对路径。

3 创建项目

  1. 点击左侧目录的New Item菜单。
    在这里插入图片描述
  2. 填写项目名称、勾选Freestyle project、点击OK。
    在这里插入图片描述
  3. 填写描述,勾选Discard old builds。勾选此项是为了防止旧文件太多,既影响编译效率,也占用服务器存储。可根据自行需要设置保存天数和数量,这里都设置的是3天、3个。
    在这里插入图片描述
  4. 设置代码仓库。
    在这里插入图片描述
    如果之前没有Credentials就创建一个。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  5. 创建Build。
    在这里插入图片描述
    在这里插入图片描述
app:clean
app:assembleEnvOpenRelease

勾选Invoke Gradle,根据项目选择已创建的Gradle Version(在Global Tool Configuration中创建的),然后点击更多信息按钮。
在这里插入图片描述
将此项勾选,后面会提到。

  1. 存档文件(可选)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    这个文件可以是具体的文件名,也可以是如图所示的通配符格式的。

点击最底下的Save按钮进行保存。

  1. 构建项目。点击Build Now按钮。
    在这里插入图片描述
    在这里插入图片描述
    点击这个构建记录。然后点击左侧菜单,Console Output菜单。
    在这里插入图片描述
    在这里插入图片描述
    如果页面最后显示这几行文字说明,项目打包已经成功。
    在这里插入图片描述
    如果页面最后显示这几行文字说明,项目打包失败。往上看可以看到失败的具体原因,根据具体原因去分析是什么问题。

这里说两个比较常见的问题:

  1. 项目中配置了buildToolsVersion一定要删掉,因为服务器上的版本未必一直。还有一些配置的问题也可以在本地进行打包测试。在AndroidStudio命令行中输入命令gradlew Release命令进行打包,确保打包问题再在Jenkins上面进行打包。
  2. 这个也是比较常见的错误,错误内容如下所示:
* What went wrong:
Execution failed for task ':imageeditlibrary:compileReleaseLibraryResources'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
   > 90 exceptions were raised by workers:
     com.android.builder.internal.aapt.v2.Aapt2Exception: Android resource compilation failed
     AAPT: \data\Jenkins\.jenkins\workspace\Demo\imageeditlibrary\build\intermediates\compiled_local_resources\release\out: error: 系统找不到指定的文件。 (2).

这个问题是Android打包检查命令报的错误,文件路径过长导致找不到文件。首先确保如下图所示的勾选已经勾选。
在这里插入图片描述
如果上图的已经勾选,还是报这个错误,那就说明我们的项目目录过深,需要更改。

回到项目主页,点击项目左侧菜单栏,点击Configure菜单。
在这里插入图片描述
点击更多按钮。
在这里插入图片描述
填写新的比较短的项目路径。
在这里插入图片描述
点击最底下的Save进行保存,然后重新点击Build Now菜单。再次查看此次日志输出就会发现打包成功。

4 上传

我们打完包肯定不是就在服务器上放着,需要给测试或产品等相关人士下载测试和使用的。目前有三种实现方式:

  1. 上传到自有服务器,生成二维码进行下载。
  2. 上传到蒲公英平台。
  3. 上传到fir平台。

第一种方式比较麻烦还需要对文件进行维护,这里就不过多介绍了,就是写个脚本将文件上传到服务器,服务器返回一个访问地址,然后将这个地址转换成二维码显示,或者写一个前端页面,来优雅的显示这个二维码。

这里主要介绍上传蒲公英和fir上有什么注意事项。

4.1 上传到蒲公英

首先得有个蒲公英账号,不用多说。蒲公英官网
同时需要进行实名验证,如果账号没有进行实名验证或验证信息不全,则无法上传成功的。
蒲公英文档
这里有一点需要注意就是蒲公英Jenkins插件升级之后,会有两个插件版本进行选择,这里我们选择v2,根据官方文档解释是v1版本上传失败的概率比较大。
在这里插入图片描述
其他的根据文档进行填写即可,只需要一个APIToken即可。

4.2 fir上传

需要账号,需要实名验证fir官网
fir官方文档(用处不是很大)
fir-cli GitHub地址

由于不知道什么原因,官方将Jenkins插件进行了下架处理,改用钩子的方式进行上传。可能觉得插件的这种方式让用户用的太方便太舒服,用钩子的这种方式可能很多人不是很会配置,网上的文章也比较少介绍这种方式,所以还可以堂而皇之的收取些咨询费用。因为在这里插入图片描述
阔以阔以。秀,真的是秀。

fir上传的注意事项是,它是依赖Ruby环境的,你也可以本地安装好Ruby,或者用Jenkins插件RVM。

RVM用法总结
RVM实用指南

这里fir-cli的要求是2.4之后的版本。如果是用插件的话需要在项目的Configure里的Build Environment下面勾选下图所示。
在这里插入图片描述
版本号大于2.4就好。个人更推荐本地安装Ruby环境这样更方便些,这种方式它每次都需要检索Ruby,不是特别方便。

然后在Build分类下面增加一个Execute shell。
在这里插入图片描述

#!/bin/bash --login

gem install fir-cli
source /etc/profile
fir login firApiToken
fir publish app/build/outputs/apk/envOpen/release/app-envOpen-release.apk [-c --changelog=firChangedLog ]

将命令中的firApiToken、firChangedLog换成你自己的APIToken和更新日志就可以了。

5 参数化构建

有的时候我们可能需要打包不同分支的代码,也可能需要上传到fir或蒲公英上面去,但是这个更新内容每次都需要在Configure里面去更改很是不方便,而且并不是每个打包人都有这个权限可以更改项目的Configure,因为这个Configure一旦出问题,整个项目就会打包失败,还是很有影响的,而且也可能出现删库跑路。

所以权限的赋予还是很重要滴。那么想动态的去设置这些就没有办法了么?答案当然是有的,不然Jenkins也太low了哈。

那么如何操作呢?

假设我们有这个两个需求:

  1. 动态的切换上传的fir账号。
  2. 动态的设置应用的更新日志。

5.1 创建参数

在Configure里构建项目是参数化的并添加参数。
在这里插入图片描述
在这里插入图片描述
这里我们添加两个参数的分类,一个是Credentials Parameter,另一个是String Parameter。第一个是用来切换fir上传的APIToken用的,第二个是用来记录更新日志用的。

第一个参数呢,首先是命名,这个随意哈。其次呢,需要选择凭证的类型,这里选择Secret Text类型,是否是必须的,是否有默认值,这个都是根据实际情况去设置的。
在这里插入图片描述
如果没有凭证,那我们就添加一个凭证。
在这里插入图片描述
在这里插入图片描述
这里可以设置该凭证的作用域和种类,这里我们选择Secret Text。Secret就是fir官网的APIToken,ID就是显示的名词(词能达意是最好的),描述根据需要看是否填写。填写完之后点击下面的Add按钮就添加成功了。
在这里插入图片描述
这个是我的一个设置,该参数是必须的,并且有默认值。

第二个String Parameter的设置就直接放图了,比较简单。
在这里插入图片描述
字符串的设置有两个,一个是单行显示,一个是多行显示。这个根据自己需求去选择哪个。我这里选择单行显示,因为是内部人用的,所以没那么多更新日志需要展示。

参数配置完之后,还有一个小注意事项,就是第一个参数是凭证,所以我们在选择的时候,实际上是选择的凭证ID,但我们真正想要的其实是密文,所以还需要一个小小的设置。如下图。
在这里插入图片描述
然后再更改一下fir的命令就可以,如下:

#!/bin/bash --login

gem install fir-cli
source /etc/profile
fir login ${firApiToken}
fir publish app/build/outputs/apk/envOpen/release/app-envOpen-release.apk [-c --changelog="${firChangedLog}" ]

至此参数化打包也配置完成了,在配置Jenkins参数化打包的时候可能会遇到很多问题,遇到问题解决问题,保持好心态。小编在配置时就差点心态崩了,问题太多,解决办法也比较少,所以写文记录一下。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值