Jenkins自動化打包

本文章主要是記錄在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中就可以看到最終成果:

到此一套Jenkins打包流程就完成了祷膳,此文章演示的在本機上進行的操作陶衅,真正的公司項目肯定是不能打包到自己的Tomcat上的,區(qū)別就是向運維申請專門的IP來加載Jenkins直晨,剩下的就是路徑的不同搀军,其他步驟都是一致的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末勇皇,一起剝皮案震驚了整個濱河市罩句,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌敛摘,老刑警劉巖门烂,帶你破解...
    沈念sama閱讀 222,865評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異兄淫,居然都是意外死亡屯远,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評論 3 399
  • 文/潘曉璐 我一進店門拖叙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來氓润,“玉大人,你說我怎么就攤上這事薯鳍】” “怎么了?”我有些...
    開封第一講書人閱讀 169,631評論 0 364
  • 文/不壞的土叔 我叫張陵挖滤,是天一觀的道長崩溪。 經(jīng)常有香客問我,道長斩松,這世上最難降的妖魔是什么伶唯? 我笑而不...
    開封第一講書人閱讀 60,199評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮惧盹,結(jié)果婚禮上乳幸,老公的妹妹穿的比我還像新娘。我一直安慰自己钧椰,他們只是感情好粹断,可當(dāng)我...
    茶點故事閱讀 69,196評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著嫡霞,像睡著了一般瓶埋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,793評論 1 314
  • 那天养筒,我揣著相機與錄音曾撤,去河邊找鬼。 笑死晕粪,一個胖子當(dāng)著我的面吹牛挤悉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播兵多,決...
    沈念sama閱讀 41,221評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼尖啡,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了剩膘?” 一聲冷哼從身側(cè)響起衅斩,我...
    開封第一講書人閱讀 40,174評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎怠褐,沒想到半個月后畏梆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,699評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡奈懒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,770評論 3 343
  • 正文 我和宋清朗相戀三年奠涌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片磷杏。...
    茶點故事閱讀 40,918評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡溜畅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出极祸,到底是詐尸還是另有隱情慈格,我是刑警寧澤,帶...
    沈念sama閱讀 36,573評論 5 351
  • 正文 年R本政府宣布遥金,位于F島的核電站浴捆,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏稿械。R本人自食惡果不足惜选泻,卻給世界環(huán)境...
    茶點故事閱讀 42,255評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望美莫。 院中可真熱鬧页眯,春花似錦、人聲如沸厢呵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽述吸。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蝌矛,已是汗流浹背道批。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留入撒,地道東北人隆豹。 一個月前我還...
    沈念sama閱讀 49,364評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像茅逮,于是被迫代替她去往敵國和親璃赡。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,926評論 2 361