Jenkins+Tomcat + Gradle + Tinker + Walle + 360加固 + fir.im 持续集成,自动构建

先介绍一下为什么要用这么一大堆东西。。。。

  • 阶段一 开发了一个简单的app
    • 每次打包只需要./gradlew assembleRelease,然后等待几分钟,就可以得到一个安装包。
    • 使用360加固助手进行加固
    • 然后将安装包上传到fir.im
    • 然后通知测试安装测试
  • 阶段二 为了更好的用户体验,使用了热修复tinker
    • ./gradlew assembleRelease打包
    • 生成的安装包上传到360官网进行加固,然后下载加固后未签名的jg.apk
    • 对jg.apk进行对齐,得到zip.apk
    • 对zip.apk进行签名
    • 检查是否采用了V2签名
    • 使用walle进行多渠道分包
    • 上传到fir.im
    • 通知测试人员
  • 阶段三

通过上面的对比,阶段一需要4步完成一次打包测试流程,阶段二则需要12步来完成一次打包测试流程,阶段二都是用各种命令来完成,一方面比较繁琐,另一方面也容易出错,还有可能的阶段三、阶段四。。

说了一堆废话,但是我们都能感觉到好麻烦,为什么打个包这么繁琐。。。有没有什么方法能够更优雅一些?

有,答案就在Jenkins

接下来就让我们用Jenkins将繁琐的流程统统解决掉

关于Tinker,Walle,360加固的可以查看下面两个链接:

Tinker使用过程及注意点(1)-环境搭建及简单使用
Tinker使用过程及注意点(2)-360加固及多渠道分包

Jenkins环境搭建

  • Apache Tomcat
    • 访问Tomcat,然后通过Download下载
      Jenkins+Tomcat + Gradle + Tinker + Walle + 360加固 + fir.im 持续集成,自动构建_第1张图片
    • 将下载的包解压到~/Library/目录下,然后命名为Tomcat
    • 启动Tomcat 打开终端,切换到Tomcat/bin目录下,然后输入:./startup.sh 回车,就可以启动我们的Tomcat了
    • 打开浏览器输入http://localhost:8080/,如果出现一只猫,则证明配置成功
      Jenkins+Tomcat + Gradle + Tinker + Walle + 360加固 + fir.im 持续集成,自动构建_第2张图片
    • 关闭Tomcat,在bin目录下,输入:./shutdown.sh 回车,即可关闭Tomcat
    • 参考
  • Jenkins
    • Jenkins官网,点击Download选择自己的环境下载
    • 将下载的Jenkins.war包直接放到tomcat下的webapps目录
    • 启动tomcat
    • 然后打开http://localhost:8080/jenkins
    • 然后就是一系列的安装过程,默认即可。。。加载的一些插件可以根据自己的需要选择,或者选择推荐的插件安装
    • 可能遇到的问题:打开http://localhost:8080/jenkins报404错误,可能tomcat没启动,或者下载的Jenkins.war是坏的,重新下载即可

创建Jenkins项目

  • 填写项目名称,选择构建一个自由风格的软件项目,点击ok
    Jenkins+Tomcat + Gradle + Tinker + Walle + 360加固 + fir.im 持续集成,自动构建_第3张图片

  • General
    填写一下项目的描述信息即可
    Jenkins+Tomcat + Gradle + Tinker + Walle + 360加固 + fir.im 持续集成,自动构建_第4张图片

  • 源码管理

    • 如果是Git上的项目,勾选Git,然后在Repository URL填写项目的git url
    • 如果是公共仓库则不需要进行其它操作,如果是私有仓库,需要点击Add添加帐号密码,并将node替换成添加的帐号密码
      Jenkins+Tomcat + Gradle + Tinker + Walle + 360加固 + fir.im 持续集成,自动构建_第5张图片
      Jenkins+Tomcat + Gradle + Tinker + Walle + 360加固 + fir.im 持续集成,自动构建_第6张图片
  • 构建器触发
    Jenkins+Tomcat + Gradle + Tinker + Walle + 360加固 + fir.im 持续集成,自动构建_第7张图片
    上面H/15 * * * * 表示每15分钟检查一次
    定时检查的配置,JenKins给出的注释:

Examples:

# every fifteen minutes (perhaps at :07, :22, :37, :52)
H/15 * * * *
# every ten minutes in the first half of every hour (three times, perhaps at :04, :14, :24)
H(0-29)/10 * * * *
# once every two hours at 45 minutes past the hour starting at 9:45 AM and finishing at 3:45 PM every weekday.
45 9-16/2 * * 1-5
# once in every two hours slot between 9 AM and 5 PM every weekday (perhaps at 10:38 AM, 12:38 PM, 2:38 PM, 4:38 PM)
H H(9-16)/2 * * 1-5
# once a day on the 1st and 15th of every month except December
H H 1,15 1-11 *
  • 构建环境
    Jenkins+Tomcat + Gradle + Tinker + Walle + 360加固 + fir.im 持续集成,自动构建_第8张图片

  • 构建

    • 点击增加构建步骤,选择Invoke Gradle script
      Jenkins+Tomcat + Gradle + Tinker + Walle + 360加固 + fir.im 持续集成,自动构建_第9张图片
    • 勾选Use Gradle Wrapper,选择Make gradle executable
      Jenkins+Tomcat + Gradle + Tinker + Walle + 360加固 + fir.im 持续集成,自动构建_第10张图片

以上步骤就可以实现Jenkins的自动构建了。

接下来我们还可以设置以下功能

构建成功后自动上传到fir.im

  • fir.im Jenkins 插件使用方法
    • 下载fir.im插件
    • 安装插件参考:fir.im Jenkins 插件使用方法
      • 进入 Jenkins 管理界面后,点击左侧进入 系统管理
      • 然后找到 管理插件 并点击进入
      • 进入插件管理后,点击 高级 选项卡
      • 然后在页面找到 上传插件,选择已下载好的 fir.im jenkins 插件文件路径,并点击 上传 等待安装成功。
      • 安装成功后,如果没有创建 Jenkins 项目,请先创建项目。如果需要配置已存在的项目,请进入在 配置 中找到 增加构建后操作步骤 ,并选择 Upload to fir.im 添加到 Jenkins 项目中。
      • 添加成功后开始配置各种参数,如图显示:
        Jenkins+Tomcat + Gradle + Tinker + Walle + 360加固 + fir.im 持续集成,自动构建_第11张图片
    • 配置插件
      • fir.im Token(必填)
        Jenkins+Tomcat + Gradle + Tinker + Walle + 360加固 + fir.im 持续集成,自动构建_第12张图片
        Jenkins+Tomcat + Gradle + Tinker + Walle + 360加固 + fir.im 持续集成,自动构建_第13张图片
        Jenkins+Tomcat + Gradle + Tinker + Walle + 360加固 + fir.im 持续集成,自动构建_第14张图片
        保存,然后构建后将会自动上传到fir.im

构建成功后给测试人员发邮件

  • 全局配置
    • 系统管理 -> 系统设置
      • JenKins Location 中填写 JenkinsUrl和管理员邮件地址
        Jenkins+Tomcat + Gradle + Tinker + Walle + 360加固 + fir.im 持续集成,自动构建_第15张图片
      • Extended E-mail Notification
        Jenkins+Tomcat + Gradle + Tinker + Walle + 360加固 + fir.im 持续集成,自动构建_第16张图片
        Jenkins+Tomcat + Gradle + Tinker + Walle + 360加固 + fir.im 持续集成,自动构建_第17张图片
        关于step4的密码解释:qq邮箱-> 设置 -> 账户
        Jenkins+Tomcat + Gradle + Tinker + Walle + 360加固 + fir.im 持续集成,自动构建_第18张图片
      • 邮件模版:
Default Subject 
安卓构建通知:$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!

Default Content 
<hr/>

(本邮件是程序自动下发的,请勿回复!)<br/><hr/>

项目名称:$PROJECT_NAME<br/><hr/>

构建编号:$BUILD_NUMBER<br/><hr/>

GIT COMMIT:${GIT_COMMIT}<br/><hr/>

GIT URL:${GIT_URL}<br/><hr/>

GIT BRANCH:${GIT_BRANCH}<br/><hr/>

构建状态:$BUILD_STATUS<br/><hr/>

触发原因:${CAUSE}<br/><hr/>

构建日志地址:<a href="${BUILD_URL}console">${BUILD_URL}consolea><br/><hr/>

构建地址:<a href="$BUILD_URL">$BUILD_URLa><br/><hr/>

变更集:${JELLY_SCRIPT,template="html"}<br/><hr/>


      • 邮件通知
        Jenkins+Tomcat + Gradle + Tinker + Walle + 360加固 + fir.im 持续集成,自动构建_第19张图片

全部设置完成后点击保存,完成全局的配置

  • 接下来进行项目配置 回到项目 test -> 配置
    • 增加构建后操作步骤 -> Editable Email Notification
      Jenkins+Tomcat + Gradle + Tinker + Walle + 360加固 + fir.im 持续集成,自动构建_第20张图片
    • 都是一些默认设置
      Jenkins+Tomcat + Gradle + Tinker + Walle + 360加固 + fir.im 持续集成,自动构建_第21张图片
      这里面的内容都是我们在全局中定义好的,如果不做更改,默认的邮件格式就是我们定义好的。
    • 点击Advanced Settings
      Jenkins+Tomcat + Gradle + Tinker + Walle + 360加固 + fir.im 持续集成,自动构建_第22张图片
    • 点击高级
      Jenkins+Tomcat + Gradle + Tinker + Walle + 360加固 + fir.im 持续集成,自动构建_第23张图片
      然后保存,邮件的发送就配置好了。

Tinker+Walle+360加固的脚本实现

接下来就解决gradle中,如何解放双手,实现360加固和Walle多渠道分包的脚本实现

360加固

1.首先需要下载360的加固宝
2.然后将下载的文件解压
Jenkins+Tomcat + Gradle + Tinker + Walle + 360加固 + fir.im 持续集成,自动构建_第24张图片
3.然后将解压的文件中的jiagu文件夹放到项目根目录
Jenkins+Tomcat + Gradle + Tinker + Walle + 360加固 + fir.im 持续集成,自动构建_第25张图片
4.在jiagu文件夹中新建jiagu_360.sh文件
首先在jiagu_360.sh文件中定义一些用到的路径、帐号密码等。
Jenkins+Tomcat + Gradle + Tinker + Walle + 360加固 + fir.im 持续集成,自动构建_第26张图片
然后写加固代码

echo "------ jiagu running! ------"

java -jar ${BASE} -version
java -jar ${BASE} -login ${NAME} ${PASSWORD}
#java -jar ${BASE} -importsign ${KEY_PATH} ${KEY_PASSWORD} ${ALIAS} ${ALIAS_PASSWORD}
#java -jar ${BASE} -showsign
#java -jar ${BASE} -importmulpkg ${CHANNEL} #根据自身情况使用
#java -jar ${BASE} -showmulpkg
#java -jar ${BASE} -showconfig
java -jar ${BASE} -jiagu ${APK} ${DEST} #-autosign

echo "------ jiagu finished! ------"

5.app的build.gradle中添加如下代码

afterEvaluate {
    android.applicationVariants.all { variant ->
        variant.assemble.doLast {
            if (variant.buildType.name.contains('release')) {
                def apkPath = variant.outputs.get(0).outputFile as File
                exec {
                    ignoreExitValue true
                    commandLine "sh", "../../jiagu/jiagu_360.sh", apkPath, apkPath.getParent()
                }
            }
        }
    }
}

这样360加固就自动搞定了,你只需要.gradlew assembleRelease就会自动帮你打包并且加固。

接下来就是对加固的应用进行签名,多渠道什么的了。

对齐、签名

在加固的基础上,在sh文件中继续添加如下代码:

echo "------ output file start------"
for file_a in ${DEST}/*; do
    temp_file=`basename $file_a`
    if [[ $temp_file == *"jiagu"*.apk ]];then
        JIAGU_PATH=${DEST}$temp_file
        echo "find it "${JIAGU_PATH}
        echo $temp_file
        break
    fi
    echo $temp_file
done
echo "------ output file finish ------"


echo "------ zipalign running! ------"
${SDK_PATH}/zipalign -v 4 ${JIAGU_PATH} ${ZIP_PATH}
echo "------ zipalign finished! ------"

echo "------ signer running! ------"
${SDK_PATH}/apksigner sign --ks ${KEY_PATH} ${ZIP_PATH} <${KEY_PASSWORD}
EOF
echo "------ signer finished! ------"

Walle多渠道分包

1.首先我们需要两个jar包
关于jar包的获取,可以参考:
Tinker使用过程及注意点(2)-360加固及多渠道分包

2.在jiagu文件夹下新建walle文件夹,然后加入
CheckAndroidV2Signature.jar
walle-cli-all.jar
channel.txt
Jenkins+Tomcat + Gradle + Tinker + Walle + 360加固 + fir.im 持续集成,自动构建_第27张图片

3.在sh文件中添加如下代码:

echo "------ check android v2 signature start ------"
java -jar ${WALLE_PATH}/CheckAndroidV2Signature.jar ${ZIP_PATH}
echo "------ check android v2 signature finish ------"

echo "------ walle channel start ------"
java -jar ${WALLE_PATH}/walle-cli-all.jar batch -f ${WALLE_PATH}/channel.txt ${ZIP_PATH} ${DEST}
echo "------ walle channel finished ------"

如果你或者测试需要一个包?

只需要点一下立即构建,将自动完成
打包,
加固,
多分包,
上传fir.im,
通知相关人员。

Jenkins+Tomcat + Gradle + Tinker + Walle + 360加固 + fir.im 持续集成,自动构建_第28张图片

可能的坑?

1.点击立即构建,可能某一次运行成功了,然后就一直失败。。。
解决办法:
构建 -> Invoke Gradle script -> Use Gradle Wrapper -> 高级
Jenkins+Tomcat + Gradle + Tinker + Walle + 360加固 + fir.im 持续集成,自动构建_第29张图片
不知道为什么jenkins会莫名其秒的在Build File添加一个路径,导致报错,所以删除它,就没问题了。

2.Jenkins自动构建过程中,360加固报错,说文件损坏。
原因:未知。。。
解决办法:找到Jenkins的项目地址:一般在/Users/.Jenkins/workspace
然后将jiagu文件夹从本地拷贝过去,删除workspace目录下原有的jiagu文件夹。即可正常加固。

你可能感兴趣的:(Android干货分享)