本文章主要是记录在Mac端集成Jenkins打包流程,包含了Tomcat搭建、Jenkins搭建、shell脚本编写三大块。其中生成下载二维码、集入第三方加固、修改apk包名等额外操作都是在shell脚本中完成的。
Tomcat搭建
1.安装
Tomcat官网链接:http://tomcat.apache.org ,Mac电脑要下载tar.gz包。
解压后更改文件夹名并放到合适的目录,比如改名为Tomcat,然后放置用户目录下(cd ~)
2.终端开启服务
打开终端,进入Tomcat的bin目录,cd ~/Tomcat/bin
授权: chmod 755 *.sh
开启服务: ./startup.sh
关闭服务: ./shutdown.sh
3.验证
浏览器访问“localhost:8080”,看到Tomcat界面,说明成功了
Jenkins搭建
一、安装
Jenkins官网下载链接:https://jenkins.io/download/
注意:下载.war包
下载完成后,将war包放到Tomcat的webapp下,然后启动Tomcat就会自动生成一个跟war包名称一样的文件夹,这里默认是jenkins。之后在浏览器访问localhost:8080/jenkins就可以访问jenkins了。
第一次访问jenkins的时候会开启安装流程
1.输入密码,此密码的文件路径已提供,在终端中cat此路径就能看到。
2.点击推荐安装,之后会自动安装插件
3.进入创建jenkins用户的界面,如果不想填可以使用admin默认账号。
4.安装完成就进入jenkins主页了。
二、完善Jenkins配置
1.进入系统设置,在环境变量里添加SDK和Python3。(我这里添加Python3是因为shell脚本中用到了python)
2.进入全局工具配置,配置JDK、Git、Gradle
3.进入插件管理,安装一些必要的插件:
Build Name Setter: 修改build名称
description setter plugin: 设置build的描述
Git Parameter Plug-In: 添加显示选择git分支的界面的插件
安装完成后重启下jenkins就能使用了。
三、开始创建项目
输入名称
开始参数化构建
参数化构建后
配置git源码管理,输入仓库URL和ssh凭据
创建ssh凭据,ssh密钥使用项目git中配置的,这里需要注意的是,使用的ssh不能设置密码,否则jenkins添加的时候会报权限异常。
接着在构建环境中设置build后的名称
下面就是核心的构建配置了,首先选择gradle版本,然后输入需要执行的gradlew命令
gradlew命令可以在Android Studio中看到,我们每次编译运行项目就是调用了这些命令
最后一块是构建后操作,主要是为了自定义显示Build后的信息,包括打包的分支号、环境、二维码下载等。
Description展开内容:
download apk
download tinker backup zip file
标签展示的效果如下图:
我们在写上面的Description和后面编写shell脚本的时候需要用到很多环境变量,我们可以在增加构建步骤中选择执行shell,然后看到jenkins为我们提供了完善了环境变量表:
到这里,我们就完成了最基本的jenkins构建打包功能。但是我们使用jenkins的目的肯定不是为了单纯地构建打包,而是将整个发包流程在jenkins中一键完成,来解脱繁琐的重复操作。下面就是通过编写shell脚本来执行生成二维码、保存bakApk文件、第三方加固、apk包重命名等操作。
shell脚本编写
1.生成二维码
创建新目录,并将打好的包移到这里
if [ ! -d "${WORKSPACE}/output" ];then
mkdir ${WORKSPACE}/output
fi
mkdir ${WORKSPACE}/output/${BUILD_NUMBER}
# 将打好的包移到新的目录中
mv ${WORKSPACE}/app/build/outputs/apk/${BUILD_TYPE}/*.apk ${WORKSPACE}/output/${BUILD_NUMBER}/${JOB_NAME}_${BUILD_NUMBER}.apk
一开始我们需要在终端中去了解jenkins的目录结构,通过命令cd .jenkins/进入jenkins目录,ls查看文件夹,找到workspace。jenkins构建的项目都在这里,apk在app/build/outputs/${BUILD_TYPE}/中,这里的BUILD_TYPE即debug或release。
在知道apk的位置后我们需要将apk移到workspace/output目录,在移动前我们先创建一级文件夹用来区分每次的构建,文件夹名可以使用BUILD_NUMBER。
安装qrcode库
qrcode库可以方便的将apk转换为二维码,安装方式和使用方式Github上都有详细的介绍,这里就不说了。
这里是链接https://github.com/sylnsfar/qrcode
# 生成二维码(myqr后跟下载链接, -n output-filename -d output-directory)
myqr ${JENKINS_URL}download/${JOB_NAME}/output/${BUILD_NUMBER}/${JOB_NAME}_${BUILD_NUMBER}.apk -n ${JOB_NAME}_${BUILD_NUMBER}.jpg -d ${WORKSPACE}/output/${BUILD_NUMBER}
2.备份bakApk文件
此动作是为了热修复tinker保留补丁备份文件
cd ${WORKSPACE}/app/build/bakApk
zip -r ${JOB_NAME}_${BUILD_NUMBER}_tinker_backup.zip ./*
mv ${JOB_NAME}_${BUILD_NUMBER}_tinker_backup.zip ${WORKSPACE}/output/${BUILD_NUMBER}/${JOB_NAME}_${BUILD_NUMBER}_tinker_backup.zip
切换到bakApk目录,压缩并移动文件至之前创建保存apk的那个文件夹。
3.使用360第三方加固
360官网有命令行示例,以下是示例
# 使用360加固
# 只有在打release包并选择了使用360加固的条件后才会开始加固
if [[ "${REINFORCE_WITH_360}" = true && "${BUILD_TYPE}" = "release" ]];then
echo "360 reinforce begin"
# 切换到360的jiagu目录下
cd /Users/xxx/360jiagubao_mac/jiagu
# 登录
java -jar jiagu.jar -login username password
# 导入签名信息
java -jar jiagu.jar -importsign keystore文件的路径 storePassword keyAlias keyPassword
# 导入渠道信息
java -jar jiagu.jar -importmulpkg 渠道文件
# 开始加固
java -jar jiagu.jar -jiagu apk文件路径 加固后输出路径 -autosign -automulpkg
echo "360 reinforce finish"
fi
REINFORCE_WITH_360参数是在参数化构建过程中添加一个布尔值参数设置的名称。
到此,我们就完成了360加固,包括分渠道和签名的操作。之后我们还可以写个重命名的python脚本来方便改名称,最后将所有apk包压缩放至上面的保存apk的那个文件夹统一管理。
我们的shell脚本基本就完成了,在jenkins构建的时候就会自动执行shell脚本。
这时我们再来回顾下构建后操作Description中的标签,就会明朗很多:
download apk
download tinker backup zip file
download protected apk zip file
这里有两点需要补充下,
一是要正确显示html标签需要去jenkins的全局安全配置中设置标记格式器,见下图
二是我们生成的${JENKINS_URL}download需要在Tomcat中的server文件中配置下。打开Tomcat/conf/server.xml文件,在Host标签中加入:
这样我们就将整个构建过程中的产出放到download下,例如二维码图片文件、原始apk、bakApk文件以及加固后的渠道包等。然后通过我们在Description自定义标签后在build history中就可以看到最终成果: