Jenkins+fastlane在iOS開發(fā)中的基礎使用

Jenkins是一個基于Java的開源持續(xù)集成工具位他。

本文采用是fastlane的腳本構建方式踊赠。

關于Xcode integration插件的構建方式园蝠。

Jenkins基礎環(huán)境搭建

注意事項:開發(fā)軟件的環(huán)境搭建應盡量按照官方的步驟添瓷。有的開發(fā)者梅屉,學習一樣新東西,直接網(wǎng)上一搜鳞贷,找一個第三方教程來走坯汤,結果遇見更多問題。

Jenkins的官方Guided Tour搀愧。

Guided Tour
  • 安裝Java8惰聂,使用終端安裝
  1. 檢查java版本

~java -version
No Java runtime present, requesting install.
表示未安裝Java疆偿。

  1. 安裝java8

~brew cask install java8
java8,必須帶8搓幌,不然就會安裝java最新版本java9杆故。
如果未安裝brew,請先安裝brew溉愁。

Error: Cask 'java8' is unavailable: No Cask with this name exists.
出現(xiàn)此錯誤处铛,使用下面命令解決。
~brew tap caskroom/versions

Java 安裝

安裝期間會要求輸入管理員密碼拐揭。


輸入密碼

安裝完成

再查詢版本


查詢版本
  • 安裝Jenkins撤蟆,從官網(wǎng)下載安裝。
    有長期支持的穩(wěn)定版投队,每周發(fā)布的開發(fā)版,以下是以穩(wěn)定版2.89.2為例爵川。
    下載pkg安裝

安裝完畢后敷鸦,瀏覽器自動打開解鎖界面。


Unlock Jenkins

拷貝上面的地址

~ vim /Users/lazy-ios2/.jenkins/secrets/initialAdminPassword
使用vim打開寝贡。

password

上面紅框里的就是password扒披,拷貝粘貼后,Continue圃泡。

安裝推薦插件

選左邊安裝推薦插件碟案,耐心等待。

設置管理員賬戶

首次進入Jenkins颇蜡,先進去系統(tǒng)管理价说,設置好管理員權限。

Jenkins不會默認設置當前管理員用戶的管理員權限风秤。
導致登錄失效后鳖目,就無法登錄此賬戶了,真麻煩~

  1. 進入全局安全配置缤弦。


    系統(tǒng)管理
  2. 修改授權策略為安全矩陣领迈,添加用戶iostest(剛剛注冊現(xiàn)在登錄的用戶)。


    授權策略
  3. 設置管理員用戶為管理員權限碍沐,保存狸捅。


    完成權限修改
  • 添加用戶
  1. 系統(tǒng)管理->管理用戶->新建用戶


    創(chuàng)建用戶

    例如為測試人員創(chuàng)建只讀和運行權限的用戶。

  2. 系統(tǒng)管理->全局安全配置->授權策略


    配置權限

    Overall選擇Read累提,其他權限選項按需選擇尘喝。

還有其他授權策略,如項目矩陣授權策略斋陪,基于項目的授權方式瞧省,相對安全矩陣配置更靈活宜咒,當然配置也相對復雜,沒有很多的實踐經驗额嘿,在這里不贅述愧哟。

Jenkins創(chuàng)建任務(job)

細心的童鞋會發(fā)現(xiàn),Jenkins的Use-cases沒有iOS橡淑。
只能自己找第三方教程和摸索构拳,真麻煩~


Use-cases

使用構建一個自由風格軟件項目為例。


自由風格的軟件項目
  1. 項目的基礎設置梁棠,按需設置吧置森,不明白點擊后面的問好,有相關說明符糊。


    image.png
  2. 源碼管理
    正常來說凫海,公司都有自己的代碼倉庫,這里以git為例男娄。
    輸入git地址行贪,發(fā)現(xiàn)沒有權限。
    點擊圖中的add進行添加私鑰模闲。
    git管理

    進入.ssh目錄
    rsa私鑰

    vim打開對應的rsa私鑰文件建瘫,選中全部,拷貝尸折。
    rsa

    回到Jenkins啰脚,點擊add添加私鑰,選則Jenkins实夹。
    添加私鑰

    選擇ssh類型橄浓。有賬戶密碼的話,要在Username和Passphrase輸入賬戶密碼亮航。本例中未設置贮配,故無需輸入。
    ssh

    選擇創(chuàng)建的Credentials塞赂,成功后紅色錯誤提示消失泪勒。
    選擇Credentials

    最后別忘了選擇構建的branch。
    超時時間

    首次拉去代碼時間較長宴猾,建議設置30分鐘超時時間圆存。
  3. 構建觸發(fā)器


    構建觸發(fā)器

    可以設置觸發(fā)構建的事件,當前沒有這種需求仇哆,當測試人員有需要的時候沦辙,再由測試人員去手動構建。 觸發(fā)事件本身還是很有用的讹剔,尤其是Poll SCM油讯,可以設置固定時間點構建详民。

  4. 構建環(huán)境


    構建環(huán)境

    由于使用fastlane打包,不用設置陌兑,直接跳過沈跨。

  5. 構建 (Execute shell,添加Shell腳本構建)
    Jenkins是在Jenkins用戶環(huán)境下構建的兔综,必須將構建需要的東西同步到Jenkins用戶環(huán)境饿凛。
    所以這里有兩個腳本,一個同步Keychain和Provisioning Profiles软驰。
    一個fastlane構建涧窒。
第一個同步腳本如下:
#!/usr/bin/expect

set timeout 10
spawn su - test -c "sudo rm -rf /Users/Shared/Jenkins/Library/MobileDevice/'Provisioning Profiles'"
expect "Password:"
send "123456\r"
expect "Password:"
send "123456\r"
expect eof
wait

set timeout 10
spawn su - test -c "sudo mkdir -p /Users/Shared/Jenkins/Library/MobileDevice/'Provisioning Profiles'"
expect "Password:"
send "123456\r"
expect "Password:"
send "123456\r"
expect eof
wait

set timeout 10
spawn su - test -c "sudo cp -r /Users/test/Library/MobileDevice/'Provisioning Profiles' /Users/Shared/Jenkins/Library/MobileDevice"
expect "Password:"
send "123456\r"
expect "Password:"
send "123456\r"
expect eof
wait

set timeout 10
spawn su - test -c "sudo rm -rf /Users/Shared/Jenkins/Library/Keychains"
expect "Password:"
send "123456\r"
expect "Password:"
send "123456\r"
expect eof
wait

set timeout 10
spawn su - test -c "sudo mkdir -p /Users/Shared/Jenkins/Library/Keychains"
expect "Password:"
send "123456\r"
expect "Password:"
send "123456\r"
expect eof
wait

set timeout 10
spawn su - test -c "sudo cp -r /Users/test/Library/Keychains /Users/Shared/Jenkins/Library"
expect "Password:"
send "123456\r"
expect "Password:"
send "123456\r"
expect eof
wait

set timeout 10
spawn sudo security set-key-partition-list -S apple-tool:,apple: -s -k 123456 /Users/Shared/Jenkins/Library/Keychains/login.keychain-db
expect "Password:"
send "123456\r"
expect eof
wait

由于Jenkins用戶權限問題,需要使用管理員賬戶來執(zhí)行同步命令锭亏。
使用管理員賬戶自然會詢問密碼纠吴,所以要使用expect。
最后一個解鎖keychain慧瘤,讓Jenkins用戶能夠讀取并使用keychain中的證書來進行簽名CodeSign戴已,所有使用Jenkins用戶來執(zhí)行改命令。

第二個打包腳本
#!/usr/bin/env bash

export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
export FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT=120

rm -rf /Users/Shared/Jenkins/Library/Developer/Xcode/DerivedData
******隱藏代碼******
fastlane gym -w ${buildProjectDir}lazyaudio.xcworkspace --clean -o ${buildDir} -s lazyaudio -n "${buildIpaName}.ipa" -q ${buildConfigStr} --export_method ${exportMethod} -a
******隱藏代碼******

lftp << EOF
open ftp://xxxxxx:xxxxx@xxx.xxx.x.xxx
mkdir ${ftpPath}
cd ${ftpPath}
lcd ${ftpIpaPath}
mput *
close
bye
EOF

打包腳本和項目本身的配置聯(lián)系緊密碑隆。
為了避免干擾恭陡,打包腳本只截取部分通用代碼蹬音。
前3個export是必須的上煤,好像是有中文的原因,否則Jenkins不認腳本著淆。
第4個是設置超時時間劫狠,fastlane的默認配置,容易超時導致構建失敗永部,強烈建議加上独泞。
然后就是配置fastlane,以及fastlane打包部分苔埋。


環(huán)境變量

編寫腳本前懦砂,必須了解環(huán)境變量,這里就不贅述了组橄。
最后ftp上傳構建的ipa等荞膘,使用的是lftp。新macOS把ftp默認從系統(tǒng)中移除玉工,如需要自己安裝羽资。

測試構建

  • 構建前,必須確保在管理員賬戶(這里是test賬戶)下遵班,可以正常使用fastlane打包屠升。
  • 構建失敗潮改,fastlane not found。
    Jenkins找不到fastlane命令腹暖,要為Jenkins設置PATH汇在,讓它用上fastlane。

PATH

在終端輸入echo $PATH微服,打印PATH趾疚,拷貝。
全局屬性

系統(tǒng)管理->系統(tǒng)設置->全局屬性->環(huán)境變量以蕴,輸入鍵PATH糙麦,值就是剛剛拷貝的字符串。

  • 構建失敗丛肮, codesign failure赡磅。
    簽名失敗,通常是keychain解鎖失敗導致宝与。因為創(chuàng)建Jenkins用戶焚廊,默認并沒有為它設置密碼,導致它無法請求管理員權限來解鎖keychain习劫。


    設置Jenkins用戶密碼

    使用sudo passwd jenkins來設置Jenkins用戶密碼咆瘟。

  • 構建失敗,cannot find xxx scheme
    xcode command line找不到scheme诽里,需要在Xcode設置scheme為shared袒餐,commit相關變更,push代碼谤狡。


    shared scheme

    scheme的生成是依賴Xcode GUI灸眼,僅靠xcode command line不能生成scheme來構建。

  • 兩個構建并行執(zhí)行墓懂,構建速度慢
    系統(tǒng)管理->系統(tǒng)設置->執(zhí)行者數(shù)量 設置為1焰宣,就不會同時進行多個構建。


    執(zhí)行者數(shù)量
  • 讓其他用戶訪問Jenkins


    IP地址

    鎖死本機的IP地址捕仔,其他用戶可以通多訪問192.168.x.xxx:8080來使用Jenkins匕积。


    配置IP

    系統(tǒng)管理->系統(tǒng)設置->Jenkins Location
    配置好地址,管理員郵件地址榜跌。在下面的郵件通知用得上闪唆。

郵件通知

  • 系統(tǒng)管理->系統(tǒng)設置->郵件通知


    Jenkins自帶郵件通知

    配置發(fā)郵件的郵箱,建議新建一個Jenkins專用的郵箱斜做,圖中是騰訊的企業(yè)郵箱為例苞氮。配置好通過發(fā)送郵件測試郵件測試配置。

  • 系統(tǒng)管理->系統(tǒng)設置->Extended E-mail Notification(這個是建議插件中的一個瓤逼,比Jenkins自帶的郵件通知要強大)笼吟。


    Extended E-mail Notification

    將Jenkins自帶郵件通知測試通過的配置库物,填入上面。
    然后設置默認收件人贷帮,多個用空格隔開戚揭。

構建后操作

回到任務配置中,最后一個構建后的操作撵枢。

  • 收件人列表設置


    Editable Email Notification

    默認收件人

    除了默認收件人民晒,可以添加其他需要被通知到的收件人,多個用空格隔開锄禽。

  • 回復人設置


    回復列表

    回復列表潜必,是指,如果有人回復了Jenkins發(fā)的郵件沃但,直接回給哪些人(郵件)磁滚,而不是Jenkins本身郵箱,Jenkins郵箱只有發(fā)郵件的功能宵晚。
    當然也可以在系統(tǒng)設置中設置默認回復列表垂攘。


    回復列表的作用
  • 內容設置


    構建后郵件設置

    Default Subject和Default Content也是類似的,按需要設置淤刃。
    可以查看Content Token Reference來具體設置晒他。

  • Advance setting郵件發(fā)送觸發(fā)配置。


    失敗設置

    默認只有失敗才發(fā)送逸贾。


    觸發(fā)設置

    各自按需設置陨仅,根據(jù)觸發(fā)條件不同,又能單獨配置收件人列表耕陷,回復人列表以及內容掂名。很強大有木有据沈?

卸載Jenkins

在自己電腦實踐Jenkins夠了哟沫,想刪除了。
使用Jenkins自帶Uninstall.command來刪除锌介。
路徑/Library/Application Support/Jenkins/Uninstall.command

卸載Jenkins

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末嗜诀,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子孔祸,更是在濱河造成了極大的恐慌隆敢,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件崔慧,死亡現(xiàn)場離奇詭異拂蝎,居然都是意外死亡,警方通過查閱死者的電腦和手機惶室,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門温自,熙熙樓的掌柜王于貴愁眉苦臉地迎上來玄货,“玉大人,你說我怎么就攤上這事悼泌∷勺剑” “怎么了?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵馆里,是天一觀的道長隘世。 經常有香客問我,道長鸠踪,這世上最難降的妖魔是什么丙者? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮营密,結果婚禮上蔓钟,老公的妹妹穿的比我還像新娘。我一直安慰自己卵贱,他們只是感情好滥沫,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著键俱,像睡著了一般兰绣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上编振,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天缀辩,我揣著相機與錄音,去河邊找鬼踪央。 笑死臀玄,一個胖子當著我的面吹牛,可吹牛的內容都是我干的畅蹂。 我是一名探鬼主播健无,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼液斜!你這毒婦竟也來了累贤?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤少漆,失蹤者是張志新(化名)和其女友劉穎臼膏,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體示损,經...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡渗磅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片始鱼。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡论巍,死狀恐怖,靈堂內的尸體忽然破棺而出风响,到底是詐尸還是另有隱情嘉汰,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布状勤,位于F島的核電站鞋怀,受9級特大地震影響,放射性物質發(fā)生泄漏持搜。R本人自食惡果不足惜密似,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望葫盼。 院中可真熱鬧残腌,春花似錦、人聲如沸贫导。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽孩灯。三九已至闺金,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間峰档,已是汗流浹背败匹。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留讥巡,地道東北人掀亩。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像欢顷,于是被迫代替她去往敵國和親槽棍。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350