本文系统环境:centos7
持续集成,操作代码主要分两部分,一、环境准备;二、jenkinsfile脚本编写;其它的一些细节基本上没有什么复杂的,多调试一下,应该就可以了。
一、环境准备
环境包括:1、android sdk环境;2、gradle环境安装;3、360加固助手(这一步根据自己项目情况参考或跳过)。
1、android sdk安装
下载android sdk linux版本,如下页面:
https://developer.android.com/studio/index.html,

安装android sdk脚本如:
mkdir -p /temp/ && cd /temp/
wget https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip
mkdir -p /usr/local/android/android-sdk-linux/
unzip sdk-tools-linux-*-zip -d /usr/local/android/android-sdk-linux/
export ANDROID_HOME=/usr/local/android/android-sdk-linux
export PATH=$PATH:$ANDROID_HOME
## 安装版本
./tools/android update sdk -u -a -t 20
## 安装全部版本(如果只需要一种,且成功了,就不要执行这个了)
./tools/android update sdk --no-ui
## 安装 32 位 lib 库及libstdc++,Android SDK需要32位的lib才可以运行(一般服务器都是64位的)。
yum install glibc.i686
yum install zlib.i686
2、准备local.properties文件(编译的时候,需要用到):
在/usr/local/android/目录下,新建文件local.properties,内容如下:
sdk.dir=/usr/local/android/android-sdk-linux
3、gradle安装,下载
mkdir -p /temp/ && cd /temp/
## 根据自己项目,选择合适的版本
wget https://downloads.gradle.org/distributions/gradle-5.5-rc-3-all.zip
unzip gradle-5.5-rc-3-all.zip
mkdir -p /usr/local/gradle/
mv gradle-5.5-rc-3/* /usr/local/gradle/ -f
export GRADLE_HOME=/usr/local/gradle/
export PATH=$PATH:$GRADLE_HOME/bin
export GRADLE_HOME PATH
## (最后好像不需要安装。。。啊,在逗我?)
4、安装360加固保工具
mkdir -p /temp/ /temp/jiagu_temp && cd /temp/
wget http://down.360safe.com/360Jiagu/360jiagubao_linux_64.zip
mkdir -p /temp/jiagu_temp && rm -rf /temp/jiagu_temp/
unzip 360jiagubao_linux_64.zip -d jiagu_temp
mkdir -p /usr/local/android/360jiagu/
mv ./jiagu_temp/jiagu/* /usr/local/android/360jiagu/
## 上传keystore签名证书
上传证书appkey.jks到:/usr/local/android/360jiagu/
## 登录360加固保(第一次执行即可,可用本地登录后的jiagu.db文件替换服务器上jiagu.db文件,跳过这一步)
java -jar /usr/local/android/360jiagu/jiagu.jar -login <username> <password>
## 导入签名 keystore 信息(第一次执行即可)
java -jar /usr/local/android/360jiagu/jiagu.jar -importsign /usr/local/android/360jiagu/appkey.jks <keystore_password> <alias> <alias_password>
## 加固测试
java -jar /usr/local/android/360jiagu/jiagu.jar -jiagu ./app-release.apk ./output -autosign - automulpkg
二、jenkinsfile脚本编写
这里我使用的是jenkins流水线。所以,这里把jenkinsfile脚本记录一下,别的都很简单,就不记录了。
其中,有部分参数是从jenkins传递而来,根据项目情况调整一下就好。最后发布部分,用的的release.sh脚本文件,就是用新版本替换就版本的过程。这里没有往app版本服务添加升级记录的内容,使用的时候大家可以结合自身环境补充。
以下是jenkinsfile的内容:
node {
def transHost="mytestserver.com"
def transPort="22"
def JOB_NAME = ${env.JOB_NAME}
def JOB_VERSION = ${env.JOB_VERSION}
def RELEASE = ${env.RELEASE}"
def repo="git@github.com:app/android_myapp.git"
def branch="developer"
def jiaguPath="/usr/local/android/360jiagu/jiagu.jar"
stage("拉取代码") {
deleteDir()
git credentialsId: "cicd",branch: "${branch}", url: """${repo}"""
}
stage('编译打包') {
sh """sudo chmod +x gradlew"""
sh """cp /usr/local/android/local.properties ./ """
sh """./gradlew assemble"""
}
stage('加固签名') {
sh "mkdir -p sign-out-dir && rm sign-out-dir/* -f"
sh "java -jar $jiaguPath -jiagu ./app/build/outputs/apk/myapp/release/app-myapp-release.apk ./sign-out-dir -autosign - automulpkg"
sh """tar zcf ${env.JOB_NAME}.tar.gz sign-out-dir/*.apk"""
}
stage("远程传输") {
sh """ssh -o StrictHostKeyChecking=no -p $transPort root@$transHost "mkdir -p /app/jenkins/update/${JOB_NAME}/${JOB_VERSION}" """
sh """rsync -avuP -e "ssh -o StrictHostKeyChecking=no -p $transPort" ${env.JOB_NAME}.tar.gz root@$transHost:/app/jenkins/update/${JOB_NAME}/${JOB_VERSION}"""
}
stage("发布") {
sh """ssh -o StrictHostKeyChecking=no -p $transPort root@$transHost "bash /app/jenkins/scripts/release.sh ${JOB_NAME} ${JOB_VERSION} ${RELEASE}" """
}
stage("清理工作空间") {
cleanWs cleanWhenAborted: false, cleanWhenFailure: false, cleanWhenNotBuilt: false, cleanWhenUnstable: false
}
}
网友评论