Android项目jenkins自动化构建之360加固(一)
最近Jenkins接手一个项目,项目自动化构建都是在jenkins上做的,包括打包构建——360加固——apk签名——邮件发送apk
总共这几步,整个项目构建是用jenkins Jenkinsfile(流水线)操作。我之前大神linux用的牛,各种脚本自动化,本人在此之前都没写过脚本呢,现在迁移项目,自己也边学边做,增长知识。废话不说,现在我们开始自动化构建之旅
jenkins 流水线建立
Jenkins流水线有两种构建方式,流水线和多分支流水线,二者区别很明显,流水线对应你项目单一某个分支,而多分支可对项目所有分支进行管理。
我项目开发使用的gitflow工作流,每次上线都是一个release分支,使用多分支流水线就不用每次release分支都创建流水线,并且可保留每次发布版本,一目了然,如下图
用哪种流水线就根据自己情况选择,我这就介绍多分支流水线的了,废话不多说,我们一步步开始
建立个流水线分支,进入配置如上图,首先配置分支源,现在都是git
- Project Repository 配置git http地址
- Credentials 配置git证书,简单来说就是你的Git账号密码,点击右边add按钮如下图写账号密码就行
3.Behaviours 这个其实配置一些对分支的管理有许多配置我就不一一解释(主要我也不知道几个,哈哈) 我这而选择的 Discover branches 然后配置了release/* 目的就是只扫描分支为release分支,从本文章第二张图就可看出只有两个release开头的分支(千万看到上图不要以为我只有这两个分支,dev/master都有滴,只是过滤而已,你也可以都显示)
配置jenkinsfile脚本路径
上图配置脚本路径,这很简单,我的就放在项目根目录下,所以直接写脚本文件名字Jenkinsfile就行
现在一个简单流水线分支就完成
此时就该写Jenkinsfile脚本了,脚本书写我就不说的,大家百度学习下(实话说吧。。。本人还有些不明白,等整明白再单独写篇)。下面贴出我项目中关于加固的部分代码
pipeline {
agent {
label '这儿配置Jenkins镜像'
}
options {
timeout(time: 1, unit: 'HOURS')
}
stages {
stage ('Enhance') {
when {
expression { BRANCH_NAME ==~ /release\/.*/ }
}
steps {
sh "./buildsystem/jiagu.sh"
}
}
}
}
上面脚本当分支名以release开头就执行加固脚本
重点到了,本文章的重头,360加固脚本
好了先上代码,实现都在注释中写好了
#!/bin/bash
# 先确定当前路径
cd `dirname $0`/../
projectDir=`pwd`
buildDir="$projectDir/build"
# 以下构建release apk
cd $buildDir
# 记录当前时间文件
touch timestampFile
echo "Build release official apk"
cd $projectDir
# invoke gradlew to build the apk
./gradlew release || exit 1
# 寻找构建完成的apk 并且对比时间,表明是此次最新构建apk
targetApk=`find $projectDir/release -name "*.apk" -newer $buildDir/timestampFile`
if [ ! -n "$targetApk" ]; then
echo "Apk is not changed. Exit"
exit 0
fi
# 以下为下载360加固工具包
cd ~/
jgCacheDir=".android/jiagu"
jgVersion="2.0"
jgFolder=360-jiagu-$jgVersion
jgZipName=$jgFolder.zip
if [ ! -d "$jgCacheDir" ]; then
mkdir -p ${jgCacheDir}
fi
cd $jgCacheDir
if test -e "$jgZipName"; then
zflag=" -z $jgZipName"
else
zflag=""
fi
# 360加固我上传到gitHub 各位可配置下面路径下载
# GitHub项目地址 https://github.com/smallTrong/360jiagu 这里面解释了1.0与2.0区别,各位选择下载
curl -L -e ";auto" -o $jgZipName https://github.com/smallTrong/360jiagu/archive/2.0.zip
# 以下开始解压下载包
cd $buildDir
echo "Extract jiagu.zip"
unzip -oq ~/$jgCacheDir/$jgFolder -d .
if [ ! -d "jiagu" ]; then
mv 360* jiagu
else
cp -rf $jgFolder/* jiagu/
fi
cd $buildDir/jiagu
cd ..
chmod -R 777 jiagu
cd jiagu
# 360加固登陆并且开始加固(未作签名) 以下java命令为360加固官网提供,大家可以去查阅,有许多功能
java -jar jiagu.jar -login 用户名 密码
# remove unnecessary service config
java -jar jiagu.jar -config -
# process
mkdir -p output
for file in `find output -name "*.apk"`; do
rm $file;
done
echo "Start process $targetApk"
java -jar jiagu.jar -jiagu $targetApk output || exit 1
enhancedApk=`find output -name "*.apk"`
#至此加固包已出 但是此包未签名,大家可自行写签名脚本进行签名,或者在360官网查阅签名配置,可以在上面加固时直接签名
至此加固包已出 但是此包未签名,大家可自行写签名脚本进行签名,或者在360官网查阅签名配置,可以在上面加固时直接签名。也可查阅我这篇博,有签名脚本
Android项目jenkins多分支流水脚本线构建总结(三)
下面该发送邮件了,请关注下篇
Android Jenkins自动化构建之发送邮件
我在整个梳理过程遇到的问题
- 360登陆过程一直失败,提示cookie过期,大家可加入360客服群寻求处理。我这儿采取了个取巧办法,360加固工具登陆后会生成个jiagu.db文件。我把这个问价copy到我git的加固工具中了。(方式不友好,大家可以找客服问我呢其他方式)