Jenkins 最詳細(xì)的說明,包含Android與iOS 打包流程

1 Jenkins安裝

1.1 JDK安裝

略。

1.2 Jenkins安裝

1.2.1 下載安裝包

下載地址:(Generic Java package (.war))

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。
image.png
  • 點(diǎn)擊新增JDK枚尼,將項(xiàng)目的jdk版本環(huán)境配置枉阵。本次使用的是jdk1.8.0,別名可以自己取,自己能區(qū)別就行技掏。
image.png
  • 點(diǎn)擊新增Gragle铃将,這里一定要和工程的gradle 一樣。(后面gradle有個(gè)選項(xiàng)會(huì)使用到零截,但是本次項(xiàng)目我是上傳了.gradle文件麸塞,正常是要忽略的,所以沒有用到這個(gè)涧衙;如果項(xiàng)目沒有上傳.gradle文件哪工,這里就得配置和項(xiàng)目一樣的.gradle )
image.png
  • 點(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.弧哎。
image.png
  • 找到全局屬性雁比,點(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.
image.png
  • 點(diǎn)擊保存,重啟jenkins 生效

2.3 工程構(gòu)建

  • 在配置好工具和環(huán)境后程奠,我們現(xiàn)在就可以來構(gòu)建工程了丈牢。
image.png
  • 選擇自由風(fēng)格的項(xiàng)目。
image.png
  • 配置工作空間使其拉取項(xiàng)目到指定文件夾瞄沙。如果這里不配置的話己沛,會(huì)默認(rèn)拉取到j(luò)enkins 的workspace文件夾里面。
image.png
image.png
  • 配置svn項(xiàng)目地址距境,注意:Local module directory面有個(gè)點(diǎn)申尼。沒有點(diǎn)會(huì)拉取到上一次目錄文件夾,導(dǎo)致無法gradle 垫桂。
image.png
  • 打包環(huán)節(jié):點(diǎn)擊增加步驟师幕,選擇Invoke Gradle script
image.png
  • 本次項(xiàng)目我上傳了gradlew文件,所以可以直接選擇Use Gradle Wrapper,勾選Make gradlew executable.

Tasks 操作:
app:clean
app:assemble

  • 如果項(xiàng)目沒有上傳gradlew,可以使用之前工具配置的gradle伪货,注意要和項(xiàng)目一致们衙,最好直接從項(xiàng)目gradle文件夾拷貝出來钾怔。
image.png
  • 點(diǎn)擊save,我們可以來到主頁蒙挑,點(diǎn)擊Build Now,首次build 會(huì)拉取項(xiàng)目宗侦,時(shí)間較長(zhǎng)。
image.png
  • 成功之后忆蚀,apk文件在apk\app\build\outputs\apk里面打的debug 和release里面(具體看工程怎么配置的)矾利。

2.4 配置自定義參數(shù)

  • 目前設(shè)置了一個(gè)版本參數(shù),看自己需要什么馋袜,自己進(jìn)行配置
image.png
  • 配置里面的下面點(diǎn)Advanced…展開Pass all job parameters as Project properties還需要勾選男旗,否則不生效,如圖:
image.png
  • 保存之后可以看到主界面出現(xiàn)了你的配置
image.png

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察皇。
image.png
  • 設(shè)置顯示二維碼
image.png
  • 二維碼默認(rèn)展示位文本,設(shè)置如下可顯示圖片:
image.png
image.png
  • 點(diǎn)擊save .成功展示
image.png

2.6 使用痛點(diǎn)

  • 打包成功泽台,上傳蒲公英失斒踩佟:
image.png

解決方法:打包目錄文件夾設(shè)置準(zhǔn)確,看Android gradle配置怀酷,apk名字要相同稻爬。


image.png
  • 打包成功,上傳蒲公英失斖梢馈:
image.png

解決辦法:選擇api2,api1不行


image.png
  • 項(xiàng)目編譯打包失斘Τ:這個(gè)是遇到最多的坑。
image.png

解決方法:
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ò)問題編譯失敗格嘁,重新編譯即可
image.png
  • 執(zhí)行打包命令失敗
image.png

解決方法: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è)插件下載安裝即可探入。

image.png
image.png

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懂诗。

image.png
image.png

3.2.2鑰匙串插件配置(Keychains and Provisioning Profiles Management****)

  1. 此處需要上傳兩個(gè)文件

    • login.keychain文件蜂嗽,為了獲取鑰匙串的讀取權(quán)限;

    • Provisioning Profiles文件殃恒,為了讀取生成ipa包的描述文件植旧;

  2. 設(shè)置路徑:描述文件的讀取路徑

  3. 生成login.keychain文件:

    • 在終端輸入:cd ~/Library/Keychains,鍵入 ls命令离唐,如下圖
image.png
  • 如何找到login.keychain文件
image.png

注意:macOS10.12以及以后的系統(tǒng)生成的是login.keychain-db文件病附,拷貝出來,去掉-db即可亥鬓。

  1. 開始配置
image.png
image.png

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)建工程

  1. 沒有工程情況
image.png
  1. 存在工程情況
image.png
  1. 新建工程
image.png

3.3.2配置工程

  1. General
image.png
  1. 源碼管理

源碼管理一般有本地源碼嵌戈、git覆积、SVN三種選擇

以本項(xiàng)目為例,選擇SVN

image.png

添加SVN賬號(hào)

image.png
image.png
  1. 構(gòu)建觸發(fā)器

出發(fā)器可以定制Jenkins定時(shí)為項(xiàng)目自動(dòng)打包咕别,本項(xiàng)目需求是按需手動(dòng)選擇打包技健,此處可以不設(shè)置觸發(fā)器內(nèi)容。

image.png
  1. 構(gòu)建環(huán)境

環(huán)境構(gòu)建主要涉及兩個(gè)步驟:

  • 配置 Keychains and Code Signing Identities惰拱,主要是用于Jenkins打包時(shí)雌贱,獲取訪問鑰匙串的權(quán)限,拿到相應(yīng)打包的證書偿短;
image.png

注意:Variables不用手動(dòng)輸入欣孤,選擇好證書之后,保存昔逗,再次打開時(shí)會(huì)自動(dòng)填充降传。

  • 配置Mobile Provisioning Profiles,主要是配置正在打包所需的描述文件勾怒。
image.png

注意:Variables不用手動(dòng)輸入婆排,選擇好證書之后,保存笔链,再次打開時(shí)會(huì)自動(dòng)填充段只。

  1. 構(gòu)建

5.1、增加構(gòu)建步驟鉴扫,選擇Xcode

image.png

5.2赞枕、配置General build settings

下列選項(xiàng)必須配置,其他選項(xiàng)默認(rèn)即可。

5.2.1炕婶、選擇Development Team

image.png

5.2.2姐赡、設(shè)置Configuration:確定打出包的類型:Release或Debug

5.2.3、填寫Xcode Schema File:一般是工程名稱(TARGETS下所需要打包的工程名)

image.png

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

image.png

5.3、配置Code signing & OS X keychain options

5.3.1傻谁、選擇Manual signing選項(xiàng)孝治,填寫Provisioning Profiles中的Bundle ID和Provisioning profile UUID。

image.png

那么這兩個(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。

image.png

5.3.2瘩蚪、選擇Unlock Keychain?選項(xiàng)泉懦,填寫鑰匙串訪問路徑及登錄密碼

image.png

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

image.png
  1. 保存

保存后,自動(dòng)返回項(xiàng)目首頁。

image.png

3.3.3 build

3.3.2步驟配置了一系列參數(shù)缨睡,總算撥云見日鸟悴,到了該收獲的時(shí)刻,開始build奖年。點(diǎn)擊Build Now细诸,開始build,等待結(jié)果陋守。

image.png

打包成功后的.ipa在哪里呢震贵?請(qǐng)看圖示:

image.png

注意:.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)

image.png
image.png

3.4.3配置自動(dòng)上傳fir平臺(tái)

插件上傳成功之后闹伪,再次打開需要打包的項(xiàng)目頁面:Jenkins -> 項(xiàng)目 -> 配置 -> 構(gòu)建后操作沪铭。

image.png
image.png
image.png
image.png

完成build之后,fir平臺(tái)上會(huì)有新的版本上傳祭往。

上傳到fir平臺(tái)的打包流程到此結(jié)束伦意。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市硼补,隨后出現(xiàn)的幾起案子驮肉,更是在濱河造成了極大的恐慌,老刑警劉巖已骇,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件离钝,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡褪储,警方通過查閱死者的電腦和手機(jī)卵渴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鲤竹,“玉大人浪读,你說我怎么就攤上這事。” “怎么了碘橘?”我有些...
    開封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵互订,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我痘拆,道長(zhǎng)仰禽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任纺蛆,我火速辦了婚禮吐葵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘桥氏。我一直安慰自己温峭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開白布识颊。 她就那樣靜靜地躺著诚镰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪祥款。 梳的紋絲不亂的頭發(fā)上清笨,一...
    開封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音刃跛,去河邊找鬼抠艾。 笑死,一個(gè)胖子當(dāng)著我的面吹牛桨昙,可吹牛的內(nèi)容都是我干的检号。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼蛙酪,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼齐苛!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起桂塞,我...
    開封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤凹蜂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后阁危,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體玛痊,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年狂打,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了擂煞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡趴乡,死狀恐怖对省,靈堂內(nèi)的尸體忽然破棺而出蝗拿,到底是詐尸還是另有隱情,我是刑警寧澤官辽,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布蛹磺,位于F島的核電站,受9級(jí)特大地震影響同仆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜裙品,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一俗批、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧市怎,春花似錦岁忘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至驰弄,卻和暖如春麻汰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背戚篙。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工五鲫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人岔擂。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓位喂,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親乱灵。 傳聞我的和親對(duì)象是個(gè)殘疾皇子塑崖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350