問(wèn)題和思路
目前存在的問(wèn)題
打包操作由開發(fā)人員完成,這樣開發(fā)進(jìn)度容易被打斷。
解決問(wèn)題的思路
將打包操作交測(cè)試/產(chǎn)品/開發(fā)人員來(lái)完成,主要是測(cè)試/開發(fā)。
按照以上的思路,那么Jenkins+Gradle的解決方案是比較經(jīng)濟(jì)的,實(shí)現(xiàn)起來(lái)難度不大,下面我們?cè)敿?xì)介紹一下搭建過(guò)程。
搭建過(guò)程
服務(wù)器的準(zhǔn)備
-
普通配置PC一臺(tái)
-
安裝ubuntu20.04(或者vmware虛擬ubuntu也可以)
-
可配置上網(wǎng)、關(guān)閉防火墻、開啟ssh服務(wù)
docker安裝Jenkins
在ubuntu下安裝dokcer。使用下面的命令拉取Jenkins的docker鏡像,這里我用的是lts的長(zhǎng)期支持版本,你可以到Jenkins官網(wǎng)自由選擇其他版本。
sudo docker pull jenkins/jenkins:lts
配置宿主機(jī)映射到容器的目錄,之后jenkins的一些配置文件都將會(huì)存儲(chǔ)到該目錄下,這個(gè)目錄可以自己定,但是我建議遵守我這樣的規(guī)范,便于日后查找和管理。
sudo mkdir /home/jenkins_home # 創(chuàng)建jenkins_home目錄
sudo chown zhq:zhq /home/jenkins_home #設(shè)置該目錄的所有者和所屬的組(zhq是常用登錄到機(jī)器的賬號(hào))
ps:zhq是常用登錄到機(jī)器的賬號(hào),這樣為了避免一些有關(guān)操作權(quán)限的問(wèn)題。
啟動(dòng)Jenkins的docker鏡像,并設(shè)置相關(guān)參數(shù),參數(shù)解釋:
-
-d 表示以后臺(tái)模式運(yùn)行
-
--name 為容器定義一個(gè)名字(后面可以代替容器id使用)
-
-p 表示映射容器的端口到宿主機(jī)的端口
-
-v 表示映射宿主機(jī)的目錄到容器的目錄
-
-u zhq 使用zhq用戶運(yùn)行,與登錄到ubuntu的賬號(hào)一致,避免后面出現(xiàn)的一些執(zhí)行權(quán)限問(wèn)題
-
-v /home/jenkins_home:/var/jenkins_home 映射jenkins_home,將數(shù)據(jù)存儲(chǔ)到宿主機(jī),這樣配置就不會(huì)隨容器丟失
-
-v /var/run/docker.sock:/var/run/docker.sock 與 -v /usr/bin/docker:/usr/bin/docker 把宿主機(jī)docker 映射到容器內(nèi),可以直接在容器內(nèi)使用宿主機(jī)docker
-
-v /usr/lib/x86_64-linux-gnu/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7 \ 容器內(nèi)docker運(yùn)行需要的庫(kù)文件
-
-v /opt:/opt \ 自主安裝的一些運(yùn)行時(shí)軟件(如java/maven/git...)
-
-v /etc/timezone:/etc/timezone映射時(shí)區(qū)文件,保證容器的時(shí)區(qū)和宿主機(jī)相同(官網(wǎng)的Jenkins容器時(shí)區(qū)不是中國(guó)的時(shí)區(qū))
最后的jenkins/jenkins:lts是要啟動(dòng)的鏡像。
sudo docker run -d --name jenkins -p 8080:8080 -p 50000:50000 -u $(id -u) \
-v /home/jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker \
-v /usr/lib/x86_64-linux-gnu/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7 \
-v /opt:/opt \
-v /etc/timezone:/etc/timezone jenkins/jenkins:lts
ps:可使用以下命令查看container是否運(yùn)行成功:
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3c20dfcbb16e jenkins/jenkins:lts "/sbin/tini -- /usr/…" 2 minutes ago Up 2 minutes 0.0.0.0:8080->8080/tcp, 0.0.0.0:50000->50000/tcp jenkins
容器啟動(dòng)后,就可以訪問(wèn)ip:8080看到Jenkins首次運(yùn)行的首頁(yè)了,然后通過(guò)下面命令查看初始密碼,填入之后跳轉(zhuǎn)到安裝插件的頁(yè)面,選擇第一個(gè)就好,會(huì)默認(rèn)安裝一些插件。
sudo cat /home/jenkins_home/secrets/initialAdminPassword
ps: 上面路徑與在瀏覽器中訪問(wèn)Jenkins提示的地址不一樣哦,那個(gè)是container中的地址,我們要查宿主機(jī)中映射的地址,見上面的命令,不要搞錯(cuò)。
插件安裝很慢,所以我們要設(shè)置的插件的國(guó)內(nèi)鏡像url進(jìn)行提速,具體自行尋找參考文章。
替換完成后,需要執(zhí)行以下命令,重啟容器:
sudo docker ps # 獲取container 的id
sudo docker container restart 獲取的container_id
再次訪問(wèn)Jenkins頁(yè)面可以發(fā)現(xiàn)插件安裝飛快。
創(chuàng)建一個(gè)自由風(fēng)格的項(xiàng)目:
-
在項(xiàng)目配置中,添加git地址、分支名稱
-
保存退出,回到項(xiàng)目列表,點(diǎn)擊右側(cè)的構(gòu)建按鈕
-
校驗(yàn)代碼是否拉取成功
cd /home/jenkins_home/workspace
ls -l
drwxr-xr-x 12 zhq zhq 18 4月 21 16:28 HelloWorld # 如果展示了項(xiàng)目名稱,代表拉取代碼成功
-
暫停當(dāng)前操作,我們先在本地使用Gradle打包,然后再和Jenkins進(jìn)行結(jié)合
Gradle打本地包
下載解壓java SDK、Android SDK和gradle。
~$ mkdir soft
~$ cd soft
~$ wget ftp://biguser:www.jb51.net@big.gxkjbg.com:8021/201704/tools/jdk-linux-x64.tar.gz
~$ wget http://dl.google.com/android/android-sdk_r24.4.1-linux.tgz
~$ wget https://services.gradle.org/distributions/gradle-5.4.1-all.zip
~$ tar -zxvf jdk-linux-x64.tar.gz -C /opt/java/
~$ tar -zxvf android-sdk_r24.4.1-linux.tgz
~$ unzip gradle-5.4.1-all.zip
配置Java、Android環(huán)境變量。
~$ sudo vim /etc/profile
在文件底部添加以下內(nèi)容:
export JAVA_HOME=/opt/java/jdk1.8.0_131
export PATH=${JAVA_HOME}/bin:${PATH}
export ANDROID_HOME=/home/zhq/soft/android-sdk-linux
保存退出后,導(dǎo)入新的配置:
~$ source /etc/profile
現(xiàn)在來(lái)驗(yàn)證一下。以我們當(dāng)前項(xiàng)目做例子,可執(zhí)行下面命令:
~$ ./soft/gradle-5.4.1/bin/gradle --parallel -b /home/jenkins_home/workspace/HelloWorld/build.gradle assemble_test
其中:
-
/home/jenkins_home/workspace/是文中Jenkins用來(lái)存放項(xiàng)目代碼的目錄;
-
/HelloWorld/build.gradle我們項(xiàng)目build.gradle所在目錄,如果打包其他項(xiàng)目應(yīng)做響應(yīng)替換;
-
assemble_test是項(xiàng)目的buildType,一般都會(huì)有assembleDebug和assembleRelease,項(xiàng)目不同可能會(huì)有其他類型,比如我們用到的assemble_test。
以上操作,有錯(cuò)誤產(chǎn)生,和當(dāng)前所使用的Android SDK沒有升級(jí)相關(guān)版本有關(guān)系,由于下載的Android SDK無(wú)法啟動(dòng)Android SDK manger,所以我安裝了Android Studio,在啟動(dòng)的時(shí)候提示指定SDK路徑,啟動(dòng)已經(jīng)下載了的項(xiàng)目,按照提示更新SDK即可。
Android Studio在ubuntu下安裝比較容易,在此不做詳細(xì)說(shuō)明了。
把Jenkins和Gradle進(jìn)行結(jié)合
把打包命令寫成一個(gè)腳本test.sh。
#!/bin/bash +x
. /etc/profile
~/soft/gradle-5.4.1/bin/gradle --parallel -b /home/jenkins_home/workspace/HelloWorld/build.gradle
保存退出后,增加執(zhí)行權(quán)限:
chmod +x test.sh
在Jenkins項(xiàng)目中添加構(gòu)建shell,把剛才文件的絕對(duì)路徑添加進(jìn)去,下面我們就準(zhǔn)確掉坑里了。
執(zhí)行項(xiàng)目構(gòu)建發(fā)現(xiàn)構(gòu)建失敗,提示test.sh沒有找到,這是因?yàn)镴enkins執(zhí)行的時(shí)候,是在容器中進(jìn)行的,我們剛才那個(gè)路徑在容器中不存在,我們需要把宿主機(jī)當(dāng)作一臺(tái)遠(yuǎn)程機(jī)器ssh到機(jī)器上執(zhí)行腳本:
-
給Jenkins安裝SSH插件
-
在系統(tǒng)管理-->系統(tǒng)配置中按照填寫宿主機(jī)ip/端口/憑證(登錄賬號(hào)密碼)如下圖:
-
保存退出,重新構(gòu)建
至此,這臺(tái)機(jī)器已經(jīng)可以成功打包了。
掃尾工作
安裝存放到指定位置。對(duì)于上面提到的test.sh可以進(jìn)行修改,把a(bǔ)pk放到指定位置,代碼修改如下:
#!/bin/sh +x
. /etc/profile
~/soft/gradle-5.4.1/bin/gradle --parallel -b /home/jenkins_home/workspace/Hellworld/build.gradle assemble_test
app_path='/home/jenkins_home/workspace/{項(xiàng)目apk存放的位置,根據(jù)項(xiàng)目不同進(jìn)行修改替換}'
target_path='/home/zhq/webroot/apks/' # 此處是自定義存放位置
if [ "`ls -A ${app_path}`" = "" ];
then
echo "${app_path} is empty"
else
mv $app_path/*.apk $target_path
rm -rf $app_path/*
fi
把列表發(fā)布到網(wǎng)絡(luò),可以通過(guò)瀏覽器訪問(wèn):
-
使用docker安裝lnmp服務(wù)器
-
映射apk存放目錄到nignx服務(wù)器
以上內(nèi)容不是很難,略掉了哈。
最后:?下方這份完整的軟件測(cè)試視頻學(xué)習(xí)教程已經(jīng)整理上傳完成,朋友們?nèi)绻枰梢宰孕忻赓M(fèi)領(lǐng)取【保證100%免費(fèi)】
?這些資料,對(duì)于【軟件測(cè)試】的朋友來(lái)說(shuō)應(yīng)該是最全面最完整的備戰(zhàn)倉(cāng)庫(kù),這個(gè)倉(cāng)庫(kù)也陪伴上萬(wàn)個(gè)測(cè)試工程師們走過(guò)最艱難的路程,希望也能幫助到你!
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-779938.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-779938.html
到了這里,關(guān)于利用Jenkins完成Android項(xiàng)目打包的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!