Android项目jenkins自动化构建之360加固(一)

Android项目jenkins自动化构建之360加固(一)

最近Jenkins接手一个项目,项目自动化构建都是在jenkins上做的,包括打包构建——360加固——apk签名——邮件发送apk
总共这几步,整个项目构建是用jenkins Jenkinsfile(流水线)操作。我之前大神linux用的牛,各种脚本自动化,本人在此之前都没写过脚本呢,现在迁移项目,自己也边学边做,增长知识。废话不说,现在我们开始自动化构建之旅

jenkins 流水线建立

Jenkins流水线有两种构建方式,流水线和多分支流水线,二者区别很明显,流水线对应你项目单一某个分支,而多分支可对项目所有分支进行管理。
多分支流水线
我项目开发使用的gitflow工作流,每次上线都是一个release分支,使用多分支流水线就不用每次release分支都创建流水线,并且可保留每次发布版本,一目了然,如下图
多分支流水分支截图
用哪种流水线就根据自己情况选择,我这就介绍多分支流水线的了,废话不多说,我们一步步开始

gitlab地址
建立个流水线分支,进入配置如上图,首先配置分支源,现在都是git

  1. Project Repository 配置git http地址
  2. Credentials 配置git证书,简单来说就是你的Git账号密码,点击右边add按钮如下图写账号密码就行创建git证书
    3.Behaviours 这个其实配置一些对分支的管理有许多配置我就不一一解释(主要我也不知道几个,哈哈) 我这而选择的 Discover branches 然后配置了release/* 目的就是只扫描分支为release分支,从本文章第二张图就可看出只有两个release开头的分支(千万看到上图不要以为我只有这两个分支,dev/master都有滴,只是过滤而已,你也可以都显示

配置jenkinsfile脚本路径

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自动化构建之发送邮件


我在整个梳理过程遇到的问题

  1. 360登陆过程一直失败,提示cookie过期,大家可加入360客服群寻求处理。我这儿采取了个取巧办法,360加固工具登陆后会生成个jiagu.db文件。我把这个问价copy到我git的加固工具中了。(方式不友好,大家可以找客服问我呢其他方式)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值