1 Jenkins安裝
1.1 JDK安裝
略。
1.2 Jenkins安裝
1.2.1 下載安裝包
1.2.2 編寫運(yùn)行腳本
#! /bin/sh
# chkconfig: 2345 10 90
# description: jenkins ....
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
# prefix=/Users/madp/Public/env/jenkins
# @auth: Joe
JENKINS_ROOT=/Users/teana/Public/self/env/jenkins
JENKINSFILENAME=jenkins.war
#停止方法
stop(){
echo "Stoping $JENKINSFILENAME "
ps -ef|grep $JENKINSFILENAME |awk '{print $2}'|while read pid
do
kill -9 $pid
echo " $pid kill"
done
}
mecho(){
words="啟,動(dòng),中,.,.,."
array=(`echo $words | tr ',' ' '`)
for word in ${array[@]}
do
echo "$word\c"
sleep 1
done
}
case "$1" in
start)
echo "Starting $JENKINSFILENAME "
nohup java -jar $JENKINS_ROOT/$JENKINSFILENAME --httpPort=8080 >> $JENKINS_ROOT/jenkins.log 2>&1 &
mecho
open 'http://127.0.0.1:8080'
tail -f $JENKINS_ROOT/jenkins.log
;;
stop)
stop
;;
restart)
stop
start
;;
status)
ps -ef|grep $JENKINSFILENAME
;;
*)
printf 'Usage: %s {start|stop|restart|status}\n' "$prog"
exit 1
;;
Esac
注意事項(xiàng):
注意替換[JENKINS_ROOT]****變量想幻,(即:****jenkins.war****的位置)
啟動(dòng):sh jenkins.sh start
停止:sh jenkins.sh stop
重啟:sh jenkins.sh restart
檢查:sh jenkins.sh status
2Android配置
2.1 工具設(shè)置
- 點(diǎn)擊Manage Jenkins,點(diǎn)擊第四項(xiàng)Global Tool Configuration,本次項(xiàng)目這個(gè)里面會(huì)配置JDK和GRADLE。
- 點(diǎn)擊新增JDK枚尼,將項(xiàng)目的jdk版本環(huán)境配置枉阵。本次使用的是jdk1.8.0,別名可以自己取,自己能區(qū)別就行技掏。
- 點(diǎn)擊新增Gragle铃将,這里一定要和工程的gradle 一樣。(后面gradle有個(gè)選項(xiàng)會(huì)使用到零截,但是本次項(xiàng)目我是上傳了.gradle文件麸塞,正常是要忽略的,所以沒有用到這個(gè)涧衙;如果項(xiàng)目沒有上傳.gradle文件哪工,這里就得配置和項(xiàng)目一樣的.gradle )
- 點(diǎn)擊保存,重啟jenkins 生效
2.2 環(huán)境配置
- 點(diǎn)擊Manage Jenkins,點(diǎn)擊第一項(xiàng)Configure System,本次項(xiàng)目這個(gè)里面會(huì)配置ANDROID_HOME, ANDROID_NDK_HOME, GRADLE_USER_HOME.弧哎。
- 找到全局屬性雁比,點(diǎn)擊Environment variables,會(huì)彈出新增按鈕,點(diǎn)擊新增按鈕撤嫩,配置3個(gè)鍵值對(duì)偎捎。配置SDK,NDK(本次項(xiàng)目有使用到NDK,項(xiàng)目沒有用到可以不配),Gradle(這個(gè)必須配置序攘,否則打包會(huì)報(bào)資源錯(cuò)誤)茴她;鍵名分別是ANDROID_HOME, ANDROID_NDK_HOME, GRADLE_USER_HOME.
- 點(diǎn)擊保存,重啟jenkins 生效
2.3 工程構(gòu)建
- 在配置好工具和環(huán)境后程奠,我們現(xiàn)在就可以來構(gòu)建工程了丈牢。
- 選擇自由風(fēng)格的項(xiàng)目。
- 配置工作空間使其拉取項(xiàng)目到指定文件夾瞄沙。如果這里不配置的話己沛,會(huì)默認(rèn)拉取到j(luò)enkins 的workspace文件夾里面。
- 配置svn項(xiàng)目地址距境,注意:Local module directory面有個(gè)點(diǎn)申尼。沒有點(diǎn)會(huì)拉取到上一次目錄文件夾,導(dǎo)致無法gradle 垫桂。
- 打包環(huán)節(jié):點(diǎn)擊增加步驟师幕,選擇Invoke Gradle script
- 本次項(xiàng)目我上傳了gradlew文件,所以可以直接選擇Use Gradle Wrapper,勾選Make gradlew executable.
Tasks 操作:
app:clean
app:assemble
- 如果項(xiàng)目沒有上傳gradlew,可以使用之前工具配置的gradle伪货,注意要和項(xiàng)目一致们衙,最好直接從項(xiàng)目gradle文件夾拷貝出來钾怔。
- 點(diǎn)擊save,我們可以來到主頁蒙挑,點(diǎn)擊Build Now,首次build 會(huì)拉取項(xiàng)目宗侦,時(shí)間較長(zhǎng)。
- 成功之后忆蚀,apk文件在apk\app\build\outputs\apk里面打的debug 和release里面(具體看工程怎么配置的)矾利。
2.4 配置自定義參數(shù)
- 目前設(shè)置了一個(gè)版本參數(shù),看自己需要什么馋袜,自己進(jìn)行配置
- 配置里面的下面點(diǎn)Advanced…展開Pass all job parameters as Project properties還需要勾選男旗,否則不生效,如圖:
- 保存之后可以看到主界面出現(xiàn)了你的配置
2.5 自動(dòng)上傳蒲公英并生成二維碼
- 安裝upload to pyger欣鳖,在Post-build Actions里面選擇Upload to pgyer with apiV2,填寫api_key,api_key 獲取key地址:https://www.pgyer.com/doc/api察皇。
- 設(shè)置顯示二維碼
- 二維碼默認(rèn)展示位文本,設(shè)置如下可顯示圖片:
- 點(diǎn)擊save .成功展示
2.6 使用痛點(diǎn)
- 打包成功泽台,上傳蒲公英失斒踩佟:
解決方法:打包目錄文件夾設(shè)置準(zhǔn)確,看Android gradle配置怀酷,apk名字要相同稻爬。
- 打包成功,上傳蒲公英失斖梢馈:
解決辦法:選擇api2,api1不行
- 項(xiàng)目編譯打包失斘Τ:這個(gè)是遇到最多的坑。
解決方法:
gradle 地址配置錯(cuò)誤样眠。
gradle 全局環(huán)境沒有配置友瘤,詳情見3.7.2環(huán)境配置中的GRADLE_USER_HOME。
gradle 與項(xiàng)目不一致檐束。
網(wǎng)絡(luò)錯(cuò)誤商佑。
目標(biāo)文件目錄包含中文
有時(shí)目標(biāo)文件夾目錄過長(zhǎng)也會(huì)引發(fā)這個(gè)問題
- 編譯出來的項(xiàng)目沒有二維碼,只顯示標(biāo)簽:
解決方法:只需要在Jenkins系統(tǒng)設(shè)置里Configure Global Security的標(biāo)記格式器由Plain text改為Safe HTML把顯示修改下即可厢塘,切記:重啟jenkins.
- 二維碼圖片顯示空白,沒有邊框肌幽,沒有圖片
解決方法:原因:【Upload to pgyer with apiV2】的選項(xiàng)默認(rèn)在【Set build desription】之后了晚碾,把這兩選項(xiàng)順序?qū)Q一下即可,因?yàn)椤維et build desription里的appQRCodeURL值依賴【Upload to pgyer with apiV2】的執(zhí)行結(jié)果喂急。
- 網(wǎng)絡(luò)問題編譯失敗格嘁,重新編譯即可
- 執(zhí)行打包命令失敗
解決方法:Local module directory面有個(gè)點(diǎn)。詳情見2.3.
3iOS配置
iOS基于Jenkins的自動(dòng)打包配置廊移。
3.1必要插件下載
3.1.1證書管理插件
Keychains and Provisioning Profiles Management
3.1.2 Xcode構(gòu)建插件
Xcode integration
3.1.3插件下載管理圖示
進(jìn)入Jenkins主界面:打開Manage Jenkins -> Manage Plugins糕簿,搜索上述兩個(gè)插件下載安裝即可探入。
3.2系統(tǒng)及插件配置
3.2.1系統(tǒng)配置
系統(tǒng)需要配置開發(fā)者信息:開發(fā)者團(tuán)隊(duì)名稱和開發(fā)者團(tuán)隊(duì)ID(具體名稱和ID見蘋果開發(fā)者網(wǎng)站內(nèi)開發(fā)者信息查看)。
管理Jenkins -> Configure System -> Xcode Builder懂诗。
3.2.2鑰匙串插件配置(Keychains and Provisioning Profiles Management****)
-
此處需要上傳兩個(gè)文件
login.keychain文件蜂嗽,為了獲取鑰匙串的讀取權(quán)限;
Provisioning Profiles文件殃恒,為了讀取生成ipa包的描述文件植旧;
設(shè)置路徑:描述文件的讀取路徑
-
生成login.keychain文件:
- 在終端輸入:cd ~/Library/Keychains,鍵入 ls命令离唐,如下圖
- 如何找到login.keychain文件
注意:macOS10.12以及以后的系統(tǒng)生成的是login.keychain-db文件病附,拷貝出來,去掉-db即可亥鬓。
- 開始配置
Provisioning Profiles Directory Path 這 項(xiàng) 填寫 /Users/用戶名/Library/ MobileDevice/Provisioning Profiles
自此系統(tǒng)和鑰匙串插件已配置好完沪,開始構(gòu)建iOS自動(dòng)打包工程。
3.3工程構(gòu)建
3.3.1創(chuàng)建工程
- 沒有工程情況
- 存在工程情況
- 新建工程
3.3.2配置工程
- General
- 源碼管理
源碼管理一般有本地源碼嵌戈、git覆积、SVN三種選擇
以本項(xiàng)目為例,選擇SVN
添加SVN賬號(hào)
- 構(gòu)建觸發(fā)器
出發(fā)器可以定制Jenkins定時(shí)為項(xiàng)目自動(dòng)打包咕别,本項(xiàng)目需求是按需手動(dòng)選擇打包技健,此處可以不設(shè)置觸發(fā)器內(nèi)容。
- 構(gòu)建環(huán)境
環(huán)境構(gòu)建主要涉及兩個(gè)步驟:
- 配置 Keychains and Code Signing Identities惰拱,主要是用于Jenkins打包時(shí)雌贱,獲取訪問鑰匙串的權(quán)限,拿到相應(yīng)打包的證書偿短;
注意:Variables不用手動(dòng)輸入欣孤,選擇好證書之后,保存昔逗,再次打開時(shí)會(huì)自動(dòng)填充降传。
- 配置Mobile Provisioning Profiles,主要是配置正在打包所需的描述文件勾怒。
注意:Variables不用手動(dòng)輸入婆排,選擇好證書之后,保存笔链,再次打開時(shí)會(huì)自動(dòng)填充段只。
- 構(gòu)建
5.1、增加構(gòu)建步驟鉴扫,選擇Xcode
5.2赞枕、配置General build settings
下列選項(xiàng)必須配置,其他選項(xiàng)默認(rèn)即可。
5.2.1炕婶、選擇Development Team
5.2.2姐赡、設(shè)置Configuration:確定打出包的類型:Release或Debug
5.2.3、填寫Xcode Schema File:一般是工程名稱(TARGETS下所需要打包的工程名)
5.2.4柠掂、選擇Pack application, build and sign .ipa?
5.2.4.1项滑、配置Export method:即導(dǎo)出包方式,development陪踩、ad-hoc杖们、enterprise、或者app-store
5.2.4.2肩狂、填寫.ipa filename pattern:即導(dǎo)出.ipa包的名稱摘完,如XXX.ipa
5.3、配置Code signing & OS X keychain options
5.3.1傻谁、選擇Manual signing選項(xiàng)孝治,填寫Provisioning Profiles中的Bundle ID和Provisioning profile UUID。
那么這兩個(gè)值如何設(shè)置呢审磁?請(qǐng)看下列步驟:
正常使用Xcode打包時(shí)谈飒,生成一個(gè)打包文件,里面包含:DistributionSummary.plist态蒂、ExportOptions.plist杭措、Packaging.log和XXXXX.ipa。
此時(shí)打開ExportOptions.plist钾恢,點(diǎn)開provisioningProfiles選項(xiàng)手素,里面分別就是Bundle ID和Provisioning profile UUID。
5.3.2瘩蚪、選擇Unlock Keychain?選項(xiàng)泉懦,填寫鑰匙串訪問路徑及登錄密碼
5.4、配置Advanced Xcode build options
5.4.1疹瘦、勾選Clean test reports?
5.4.2崩哩、填寫Xcode Workspace File(針對(duì)使用了pod導(dǎo)入三方庫(kù)的工程)或者Xcode Project Directory(針對(duì)普通工程,即未使用pod導(dǎo)入三方庫(kù)的工程)路徑言沐,一般是Jenkins分配的工作空間路徑:如${WORKSPACE}/XXXXX/XXXXX邓嘹,XXXXX是工程的名稱,根據(jù)具體工具替換即可险胰。
5.4.3吴超、填寫B(tài)uild output directory路徑,即打完包后.ipa導(dǎo)出路徑鸯乃,一般默認(rèn)Jenkins分配的工作空間路徑:${WORKSPACE}/build
- 保存
保存后,自動(dòng)返回項(xiàng)目首頁。
3.3.3 build
3.3.2步驟配置了一系列參數(shù)缨睡,總算撥云見日鸟悴,到了該收獲的時(shí)刻,開始build奖年。點(diǎn)擊Build Now细诸,開始build,等待結(jié)果陋守。
打包成功后的.ipa在哪里呢震贵?請(qǐng)看圖示:
注意:.jenkins是隱藏文件,記得打開查看隱藏文件權(quán)限水评。
恭喜你猩系,到此Jenkins對(duì)iOS打包就此結(jié)束。
3.4自動(dòng)上傳fir移動(dòng)發(fā)布平臺(tái)
上述步驟結(jié)束之后中燥,可以獲取.ipa包寇甸,可以一般需要將.ipa包發(fā)布到應(yīng)用發(fā)布平臺(tái),供測(cè)試人員下載測(cè)試疗涉。Jenkins也提供了自動(dòng)上傳至蒲公英拿霉、fir等平臺(tái)的功能,只需到相關(guān)平臺(tái)下載插件咱扣,配置好相關(guān)參數(shù)即可绽淘。下列以fir平臺(tái)為例,演示Jenkins如何將生成的.ipa包發(fā)布到fir平臺(tái)上.
3.4.1下載fir插件
下載地址及使用方法見:http://blog.fir.im/jenkins/
3.4.2上傳fir插件到Jenkins插件平臺(tái)
3.4.3配置自動(dòng)上傳fir平臺(tái)
插件上傳成功之后闹伪,再次打開需要打包的項(xiàng)目頁面:Jenkins -> 項(xiàng)目 -> 配置 -> 構(gòu)建后操作沪铭。
完成build之后,fir平臺(tái)上會(huì)有新的版本上傳祭往。
上傳到fir平臺(tái)的打包流程到此結(jié)束伦意。