Linux环境基于Jenkins搭建Android自动化构建平台(二)

文章目录

      • 前言
      • 配置Jenkins构建参数
      • 编写shell脚本
        • 编写初始化脚本
        • 编写执行脚本
      • 构建
      • 扩展
        • JSP实现遍历指定路径下文件

上篇主要介绍Jenkins搭建Android自动化构建平台的工具安装及项目配置,接下来我们具体详细的讲述利用Jenkins参数化构建我们的Android项目以及如何实现对构建结果进行后续操作(加固、压缩对齐、重签名、插入多渠道信息)等等。
不清楚如何使用Jenkins搭建Android自动化构建平台请阅读《 Linux环境基于Jenkins搭建Android自动化构建平台(一)》。

前言

我的目的是将Jenkins构建后的结果按照当前构建的应用信息(应用名称+构建环境+构建日期)在我们系统指定位置(/opt/android/workspace)生成对应的操作目录结构,后续的操作都会基于此目录进行,目录类似如下结构:
Linux环境基于Jenkins搭建Android自动化构建平台(二)_第1张图片
针对上图的目录结构,解释下相关目录功能

  • app1 app2 ... appN:Jenkins构建的独立的应用根目录。
  • keystore:存储当前应用的签名文件(应用构建前应配置完毕)。
  • channel:存储当前应用多渠道配置文件(应用构建前应配置完毕,,后续我们会通过网页实现上传签名文件和多渠道配置文件功能)。
  • apk:按照构建环境及构建日期存储当前应用构建的原始apk、经过加固后apk、经过压缩对齐后apk、经过重新签名后apk文件。

基于此我们接下来通过jenkns平台提供的构建后操作编写我们的shell脚本完成上述目录结构的创建工作。

配置Jenkins构建参数

由于后续我们shell脚本创建目录结构时候需要知道当前构建的应用名称构建环境构建日期因此,这三个参数我们建议通过Jenkins平台的参数化构建添加如下:
Linux环境基于Jenkins搭建Android自动化构建平台(二)_第2张图片

编写shell脚本

编写初始化脚本

上述声明好shell脚本需要的参数之后,接下来我们就可以编写我们的初始化shell脚本了,进行目录结构的创建(后面的执行脚本将依赖此初始化脚本创建的目录)以及原始apk文件的迁移。
进入Jenkins平台选择项目—>配置—>构建后操作选择添加Post build task

#!/bin/bash
echo "***********************************************"
echo "*                                             *"
echo "*            初始化构建后操作                    *"
echo "*                                             *"
echo "***********************************************"

#当前构建的项目名称(例如:app1)
projectname=${PROJECT_NAME}
#项目基本路径
workspace="/opt/android/workspace"

#1 创建当前构建项目根目录
rootpath=$workspace/$projectname
echo "创建当前项目根路径:$rootpath"
mkdir -p $rootpath

#2 创建子目录-keystore目录(存放签名文件,此目录应该构建前创建好并将签名文件移动到此处,
#  否则构建时候找不到签名文件,导致构建失败)
keystorepath="$rootpath/keystore"
echo "创建签名文件目录路径:$keystorepath"
mkdir -p $keystorepath

#3 创建子目录-channel目录(存放多渠道信息,此目录应该构建前创建好并将渠道配置文件移动到此处,
#  否则后续插入多渠道找不到配置文件,导致插入失败)
channelpath="$rootpath/channel"
echo "创建渠道文件目录路径:$channelpath"
mkdir -p $channelpath

#4 创建子目录-构建结果apk目录(存放构建后的结果)
#从构建时间中截取日期
build_date=${BUILD_TIME%-*}
echo ${build_date}
apkpath="$rootpath/apk/$BUILD_TYPE/$build_date"
echo "创建构建结果目录路径:$apkpath"
mkdir -p $apkpath

#5 将构建结果原始apk移动到指定目录下
cp app/build/outputs/apk/${BUILD_TYPE}/app-v${APP_VERSION}-${BUILD_TIME}-${BUILD_TYPE}.apk $apkpath

编写执行脚本

写好初始化脚本后,如果执行jenkins构建任务,会在指定目录下创建一系列文章开始图片上的目录结构,接下来我们编写一个公用的shell执行脚本用来执行一系列的加固、压缩对齐、签名、插入多渠道等操作了。

工具说明

  • 加固:我使用的是360加固助手:官网下载对应平台工具即可,具体使用内部附有文档(首次使用需要登陆)。
  • 对齐压缩:我这里使用android-sdk自带的工具zipalign
  • 签名:我这里使用android-sdk自带的apksigner支持v2签名。
  • 多渠道插入:我使用的是美团的walle支持v2签名。详细介绍参考《新一代开源Android渠道包生成工具Walle》具体使用参考《Walle》。

基于Linux环境,我将360加固助手和walle分别存储在系统/opt/android/packconfig目录下
在这里插入图片描述
先分析下,由于我们打算编写一个公用的shell执行脚本,因此我们需要知道对哪个项目进行操作(应用名称),以及操作的是什么环境(构建环境),并且操作该环境下什么日期(构建日期),具体哪个文件(文件名称),因此在执行此shell脚本时候我们需要动态传递上述的四个参数即:应用名称+构建环境+构建日期+文件名称

具体shell执行脚本如下:

#!/bin/bash
echo "*******************************************************"
echo "*                                                     *"
echo "*=========执行加固、压缩、重签名、插入多渠道操作============*"
echo "*                                                     *"
echo "*******************************************************"

echo "项目名称:$1"     #app1
echo "构建环境:$2"     #release
echo "构建日期:$3"     #20191127
echo "构建应用名称:$4" #app1-v1.0.0-release.apk

#当前操作应用的根目录
rootpath="/opt/android/workspace/$1"
#当前操作的应用apk文件路径
apkpath="$rootpath/apk/$2/$3"
echo "当前操作apk路径为:$apkpath"

:<<一:JIAGU
360加固
一:JIAGU
echo "**********************************"
echo "*             1.开始加固            *"
echo "**********************************"
#360加固登陆账号
account="18888888888"
#360加固登陆密码
password="88888888"
#1.1 进入加固工具目录
cd /opt/android/packconfig/jiagu/360jiagu
#1.2 登陆账号(登陆一次即可)
#java -jar jiagu.jar -login $account $password
#1.3 先创建加固后的存储目录
jiaguoutput="$apkpath/jiagu"
mkdir -p $jiaguoutput
#1.4 执行加固命令
java -jar jiagu.jar -jiagu $apkpath/$4 $jiaguoutput


:<<二:ZIPALIGN
对加固后的包进行压缩对齐
二:ZIPALIGN
echo "**********************************"
echo "*           2.开始压缩对齐           *"
echo "**********************************"
#2.1 进入android-sdk build-tools目录
cd /opt/android/sdk/android-sdk-linux/build-tools/29.0.0
#2.2 执行压缩对齐命令(将压缩对齐后的apk文件存储在当前操作原应用同等级目录下)
#对齐压缩后的apk文件名
zipfilename="zipalign.apk"
./zipalign -f -v 4 $jiaguoutput/*.apk $apkpath/$zipfilename
#2.4 生成对齐压缩后的文件后,可删除之前的加固目录了
rm -rf $jiaguoutput


:<<三:SIGN
对压缩对齐后的包进行重新签名(前提需要在指定目录下存放签名的keysotre文件)
三:SIGN
echo "**********************************"
echo "*             3.重新签名            *"
echo "**********************************"
#签名密钥路径(需要构建前配置完毕)
keystorePath="$rootpath/keystore"
#签名后的文件名称
signfilename="${4%.*}-signed.apk"
#3.1 执行签名命令,将签名后的文件存储在当前操作应用目录下
./apksigner sign --ks "$keystorePath/$2.jks" \   
               --ks-key-alias "$2" \
               --ks-pass pass:"88888888" \
               --key-pass pass:"88888888" \
               --out $apkpath/$signfilename \
               $apkpath/$zipfilename
#3.4 签名成功可删除上一步的对齐压缩文件了
rm -rf $apkpath/$zipfilename


:<<四:插入多渠道
将签名后的文件插入多渠道(需要配置渠道列表文件)
四:插入多渠道
echo "**********************************"
echo "*           4.多渠道打包            *"
echo "**********************************"
#4.1 进入walle工具目录
wallepath="/opt/android/packconfig/walle"
cd $wallepath
#4.2 执行插入渠道脚本
#渠道文件路径(构建前需要配置完毕)
channelfilepath="$rootpath/channel/channel.json"
#创建多渠道打包输出目录(我这里将打出的渠道包放在了服务器上一个路径下,通过web项目即可访问到下载使用)
channeloutpath="/opt/tomcat/apache-tomcat-9.0.27/webapps/appbuild/App/$1/$2/$3"
mkdir -p $channeloutpath
#执行插入渠道脚本命令
java -jar walle-cli-all.jar batch2 -f $channelfilepath $apkpath/$signfilename $channeloutpath

#4.2 删除上一步签名后的文件
rm -rf $apkpath/$signfilename

echo "*******************************************************"
echo "*                                                     *"
echo "*================恭喜,多渠道打包完成!====================*"
echo "*    前往 http://xxx.xxxx.xxxx:xxxx/appbuild/ 查看     *"
echo "*                                                     *"
echo "*******************************************************"

这里我将上述执行脚本保存为packaging.sh文件,放在系统的指定位置,通过jenkins平台项目—>配置—>构建后操作在上面脚本下增加一个add other task执行该文件路径。
Linux环境基于Jenkins搭建Android自动化构建平台(二)_第3张图片
通过执行下面命令调用即可

#项目名称
projectname=${PROJECT_NAME}
#构建环境
build_type=${BUILD_TYPE}
#构建日期
build_date=${BUILD_TIME%-*}
echo ${build_date}
#应用名称
appname="app-v${APP_VERSION}-${BUILD_TIME}-${BUILD_TYPE}.apk"

#调用执行脚本(传递四个参数)
/opt/shellscript/package.sh $projectname $build_type $build_date $appname

Linux环境基于Jenkins搭建Android自动化构建平台(二)_第4张图片
执行脚本最后我将生成的多渠道安装包推送到了tomcat下的一个web项目下(工程可参考文末JSP实现遍历指定路径下文件),可通过浏览器直接访问下载安装。

构建

配置完成,应用保存返回项目点击构建查看控制台输出日志构建及后续操作成功
Linux环境基于Jenkins搭建Android自动化构建平台(二)_第5张图片
按照提示我们访问指定的网址看看已经生成了多渠道包。
Linux环境基于Jenkins搭建Android自动化构建平台(二)_第6张图片

扩展

JSP实现遍历指定路径下文件

你可能感兴趣的:(服务器,jenkins)