本文章主要是記錄在Mac端集成Jenkins打包流程卧斟,包含了Tomcat搭建、Jenkins搭建厉斟、shell腳本編寫三大塊。其中生成下載二維碼强衡、集入第三方加固擦秽、修改apk包名等額外操作都是在shell腳本中完成的。
Tomcat搭建
1.安裝
Tomcat官網(wǎng)鏈接:http://tomcat.apache.org 漩勤,Mac電腦要下載tar.gz包感挥。
解壓后更改文件夾名并放到合適的目錄,比如改名為Tomcat越败,然后放置用戶目錄下(cd ~)
2.終端開啟服務(wù)
打開終端触幼,進入Tomcat的bin目錄,cd ~/Tomcat/bin
授權(quán): chmod 755 *.sh
開啟服務(wù): ./startup.sh
關(guān)閉服務(wù): ./shutdown.sh
3.驗證
瀏覽器訪問“l(fā)ocalhost:8080”究飞,看到Tomcat界面置谦,說明成功了
Jenkins搭建
一堂鲤、安裝
Jenkins官網(wǎng)下載鏈接:https://jenkins.io/download/
注意:下載.war包
下載完成后,將war包放到Tomcat的webapp下媒峡,然后啟動Tomcat就會自動生成一個跟war包名稱一樣的文件夾瘟栖,這里默認是jenkins。之后在瀏覽器訪問localhost:8080/jenkins就可以訪問jenkins了谅阿。
第一次訪問jenkins的時候會開啟安裝流程
1.輸入密碼半哟,此密碼的文件路徑已提供,在終端中cat此路徑就能看到签餐。
2.點擊推薦安裝镜沽,之后會自動安裝插件
3.進入創(chuàng)建jenkins用戶的界面,如果不想填可以使用admin默認賬號贱田。
4.安裝完成就進入jenkins主頁了缅茉。
二、完善Jenkins配置
1.進入系統(tǒng)設(shè)置男摧,在環(huán)境變量里添加SDK和Python3蔬墩。(我這里添加Python3是因為shell腳本中用到了python)
2.進入全局工具配置,配置JDK耗拓、Git拇颅、Gradle
3.進入插件管理,安裝一些必要的插件:
Build Name Setter: 修改build名稱
description setter plugin: 設(shè)置build的描述
Git Parameter Plug-In: 添加顯示選擇git分支的界面的插件
安裝完成后重啟下jenkins就能使用了乔询。
三樟插、開始創(chuàng)建項目
輸入名稱
開始參數(shù)化構(gòu)建
參數(shù)化構(gòu)建后
配置git源碼管理,輸入倉庫URL和ssh憑據(jù)
創(chuàng)建ssh憑據(jù)竿刁,ssh密鑰使用項目git中配置的黄锤,這里需要注意的是,使用的ssh不能設(shè)置密碼食拜,否則jenkins添加的時候會報權(quán)限異常鸵熟。
接著在構(gòu)建環(huán)境中設(shè)置build后的名稱
下面就是核心的構(gòu)建配置了,首先選擇gradle版本负甸,然后輸入需要執(zhí)行的gradlew命令
gradlew命令可以在Android Studio中看到流强,我們每次編譯運行項目就是調(diào)用了這些命令
最后一塊是構(gòu)建后操作,主要是為了自定義顯示Build后的信息呻待,包括打包的分支號打月、環(huán)境、二維碼下載等蚕捉。
Description展開內(nèi)容:
<img src="${JENKINS_URL}download/${JOB_NAME}/output/${BUILD_NUMBER}/${JOB_NAME}_${BUILD_NUMBER}.jpg"
width=180 height=180 alt="apk install package qrcode" />
<br/>
<a href="${JENKINS_URL}download/${JOB_NAME}/output/${BUILD_NUMBER}/${JOB_NAME}_${BUILD_NUMBER}.apk">
download apk
</a>
<br/>
<a href="${JENKINS_URL}download/${JOB_NAME}/output/${BUILD_NUMBER}/${JOB_NAME}_${BUILD_NUMBER}_tinker_backup.zip">
download tinker backup zip file
</a>
標(biāo)簽展示的效果如下圖:
我們在寫上面的Description和后面編寫shell腳本的時候需要用到很多環(huán)境變量奏篙,我們可以在增加構(gòu)建步驟中選擇執(zhí)行shell,然后看到j(luò)enkins為我們提供了完善了環(huán)境變量表:
到這里鱼冀,我們就完成了最基本的jenkins構(gòu)建打包功能报破。但是我們使用jenkins的目的肯定不是為了單純地構(gòu)建打包悠就,而是將整個發(fā)包流程在jenkins中一鍵完成,來解脫繁瑣的重復(fù)操作充易。下面就是通過編寫shell腳本來執(zhí)行生成二維碼梗脾、保存bakApk文件、第三方加固盹靴、apk包重命名等操作炸茧。
shell腳本編寫
1.生成二維碼
創(chuàng)建新目錄,并將打好的包移到這里
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的目錄結(jié)構(gòu)稿静,通過命令cd .jenkins/進入jenkins目錄梭冠,ls查看文件夾,找到workspace改备。jenkins構(gòu)建的項目都在這里控漠,apk在app/build/outputs/${BUILD_TYPE}/中,這里的BUILD_TYPE即debug或release悬钳。
在知道apk的位置后我們需要將apk移到workspace/output目錄盐捷,在移動前我們先創(chuàng)建一級文件夾用來區(qū)分每次的構(gòu)建,文件夾名可以使用BUILD_NUMBER默勾。
安裝qrcode庫
qrcode庫可以方便的將apk轉(zhuǎn)換為二維碼碉渡,安裝方式和使用方式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文件
此動作是為了熱修復(fù)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目錄滞诺,壓縮并移動文件至之前創(chuàng)建保存apk的那個文件夾。
3.使用360第三方加固
360官網(wǎng)有命令行示例环疼,以下是示例
# 使用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
# 導(dǎo)入簽名信息
java -jar jiagu.jar -importsign keystore文件的路徑 storePassword keyAlias keyPassword
# 導(dǎo)入渠道信息
java -jar jiagu.jar -importmulpkg 渠道文件
# 開始加固
java -jar jiagu.jar -jiagu apk文件路徑 加固后輸出路徑 -autosign -automulpkg
echo "360 reinforce finish"
fi
REINFORCE_WITH_360參數(shù)是在參數(shù)化構(gòu)建過程中添加一個布爾值參數(shù)設(shè)置的名稱习霹。
到此,我們就完成了360加固秦爆,包括分渠道和簽名的操作序愚。之后我們還可以寫個重命名的python腳本來方便改名稱,最后將所有apk包壓縮放至上面的保存apk的那個文件夾統(tǒng)一管理等限。
我們的shell腳本基本就完成了,在jenkins構(gòu)建的時候就會自動執(zhí)行shell腳本芬膝。
這時我們再來回顧下構(gòu)建后操作Description中的標(biāo)簽望门,就會明朗很多:
<img src="${JENKINS_URL}download/${JOB_NAME}/output/${BUILD_NUMBER}/${JOB_NAME}_${BUILD_NUMBER}.jpg"
width=180 height=180 alt="apk install package qrcode" />
<br/>
<a href="${JENKINS_URL}download/${JOB_NAME}/output/${BUILD_NUMBER}/${JOB_NAME}_${BUILD_NUMBER}.apk">
download apk
</a>
<br/>
<a href="${JENKINS_URL}download/${JOB_NAME}/output/${BUILD_NUMBER}/${JOB_NAME}_${BUILD_NUMBER}_tinker_backup.zip">
download tinker backup zip file
</a>
<br/>
<a href="${JENKINS_URL}download/${JOB_NAME}/output/${BUILD_NUMBER}/${JOB_NAME}_${BUILD_NUMBER}_protected.zip">
download protected apk zip file
</a>
這里有兩點需要補充下,
一是要正確顯示html標(biāo)簽需要去jenkins的全局安全配置中設(shè)置標(biāo)記格式器锰霜,見下圖
二是我們生成的${JENKINS_URL}download需要在Tomcat中的server文件中配置下筹误。打開Tomcat/conf/server.xml文件,在Host標(biāo)簽中加入:
<Context reloadable="false"
docBase="/Users/XXX/.jenkins/workspace/"
crossContext="true"
path="/jenkins/download"/>
這樣我們就將整個構(gòu)建過程中的產(chǎn)出放到download下癣缅,例如二維碼圖片文件厨剪、原始apk哄酝、bakApk文件以及加固后的渠道包等。然后通過我們在Description自定義標(biāo)簽后在build history中就可以看到最終成果: