前言
Jenkins是一個開源的持續(xù)集成工具袖外,支持各種軟件的持續(xù)集成却特。但是iOS項目的編譯打包依賴于Xcode,不幸的是Linux服務(wù)器無法安裝Xcode玻侥。所以只能通過Jenkins節(jié)點启泣,將一臺Mac作為slave來實現(xiàn)Linux上的iOS項目構(gòu)建涣脚。
環(huán)境
master: Mac OS 10.14.4
slave: Mac OS 10.14.2
Jenkins: 2.17.4
目錄
- Jenkins安裝
- Jenkins環(huán)境配置
- 節(jié)點創(chuàng)建
- 創(chuàng)建配置任務(wù)
- 上傳到蒲公英
- 總結(jié)
一、Jenkins安裝
打開Jenkins官網(wǎng)下載頁寥茫,選擇Mac os X下載pkg安裝包遣蚀。安裝完成之后會自動在瀏覽器打開配置頁面。
首先需要輸入管理員初始密碼纱耻,打開提示的文件 /Users/Shared/Jenkins/Home/secrets/initialAdminPassword
將密碼復制到輸入框芭梯。打開文件可能會報錯沒有權(quán)限,可以右鍵“顯示簡介”修改權(quán)限弄喘。
接下來選擇安裝推薦的插件
輸入管理員賬號信息然后點擊“save and finish"玖喘,Jenkins就安裝好了。
二蘑志、Jenkins環(huán)境配置
1. 安裝插件
進入首頁后進入 系統(tǒng)管理 > 插件管理
-
Xcode Integration
用來編譯Xcode項目及打包 -
Keychains and Provisioning Profiles Management
用于添加管理描述文件和證書及簽名累奈。
因為前面安裝Jenkins時選擇安裝了推薦的插件,所以像Git , Gitlab, SSH Credentials
這些通用的插件都已經(jīng)安裝好了急但。
2. 添加SSH私鑰
因為要從Gitlab拉取源碼澎媒,所以需要將對應(yīng)的SSH key的私鑰添加到Jenkins。SSH的密鑰一般存放在~/.ssh
羊始, 私鑰文件名為id_rsa
旱幼。如果沒有SSH key要先用命令行ssh-keygen -t rsa -C "you_email"
生成一對key 并將公鑰上傳到Gitlab。
ID可以自行輸入一個惟一的名稱突委,如果不輸入Jenkins也會生成一個柏卤。如果生成SSH Key時設(shè)置了密碼需要把密碼填上,沒有則空著匀油,最后點擊確定缘缚。
3. 添加描述文件及證書
進入系統(tǒng)管理頁面
首先上傳登錄鑰匙串,路徑
/Users/xxx/Library/Keychains/login.keychain-db
文件夾敌蚜,由于Jenkins只能上傳.keychain
后綴的文件桥滨,所以要將其文件名改為login.keychain
后再上傳。
上傳后出現(xiàn)如下界面
密碼一般是管理員密碼弛车,然后需要填入證書名稱齐媒,可以從鑰匙串復制過來。如果還需要添加更多的證書可以點擊按鈕"Add Code Signing Identity"
如果構(gòu)建時出現(xiàn)下面的錯誤纷跛,需要去設(shè)置下證書私鑰的訪問權(quán)限鑰匙串 -> 使用的證書的私鑰 -> 右鍵“顯示簡介” -> 訪問控制 -> 允許所有應(yīng)用程序訪問此項目
接著添加描述文件喻括,描述文件的地址一般是 /Users/xxx/Library/MobileDevice/Provisioning Profiles
。Filename為文件名切不可修改贫奠,所以如果想要有可讀性的話可以先修改成自己想要的名字再上傳唬血,例如“project name_distribution”望蜡。只要路徑文件夾里有以對應(yīng)UUID命名的文件就行。
上傳完描述文件需要把MobileDevice
文件夾復制到Jenkins的Library目錄下拷恨,對應(yīng)路徑/Users/Shared/Jenkins/Library/MobileDevice/Provisioning Profiles
脖律。
否則會提示下圖所示的錯誤
如果出現(xiàn)下圖所示的
java.nio.file.AccessDenieException
報錯,一般是因為對應(yīng)的路徑Jenkins沒有讀取權(quán)限所造成的三腕侄、節(jié)點創(chuàng)建
1.配置 MacOS Slave
- 在slave機器上新建一個普通成員權(quán)限的用戶jenkins,然后登錄jenkins用戶小泉。
- 登錄后在
系統(tǒng)偏好設(shè)置 > 共享
中開啟遠程登錄,添加遠程登錄Jenkins用戶
- 還有很重要的一點兜挨,在slave機器上安裝對應(yīng)的證書和描述文件膏孟,因為最終打包是在slave機器上執(zhí)行的,所以也要安裝對應(yīng)的證書和描述文件拌汇。
2.創(chuàng)建節(jié)點
遠程工作目錄:在slave電腦上登錄jenkins后新建一個文件夾柒桑,位置任意,只要有權(quán)限就可以噪舀。
標簽: 填寫一個惟一的字符串
主機: slave機器的ip地址
Credentials: jenkins賬號的賬號密碼魁淳,沒有就添加一個
保存后啟動節(jié)點,看到類似下圖的信息就成功了与倡。
四界逛、任務(wù)創(chuàng)建
任務(wù)創(chuàng)建成功后進入配置
設(shè)置項目在節(jié)點運行,輸入之前創(chuàng)建的節(jié)點的標簽
項目是托管在gitlab的纺座,所以這里選擇Git
輸入倉庫的ssh地址息拜,Credentials選擇之前上傳的SSH Private Key
每隔2分鐘輪詢一次git,如果有更新就開始構(gòu)建净响,也可以添加定時構(gòu)建少欺。
接下來就是最重要的打包腳本了
首先是拉取Cocoapods 和 Carthage的依賴,如果你只用了其中的一種刪掉另外一行代碼就行了馋贤。如果都沒有的話請忽略這一步
- 通過PlistBuddy 從info.plist中獲取版本號和build number赞别,用于ipa的名稱。
- 將ipa的路徑存入文件配乓,等會上傳到蒲公英的時候需要用到仿滔。
- 打包前先clean一下。
- 通過xcodebuild 執(zhí)行archive犹芹,圖中的腳本是集成了cocoapods的腳本崎页。下面是沒有繼承cocoapods的clean和archive腳本:
echo "+++++++++++++++++ clean +++++++++++++++++"
xcodebuild -target "${TARGET_NAME}" -configuration 'Release' clean
echo "+++++++++++++++++ Archive +++++++++++++++++"
xcodebuild -target "${TARGET_NAME}"\
-sdk iphoneos -configuration 'Release'\
CODE_SIGN_IDENTITY="${CODE_SIGNING_IDENTITY}"\
SYMROOT='$(PWD)'\
archive -archivePath ${WORKSPACE}/builds/${IPANAME}/${APP_NAME}.xcarchive
- 最后導出xcarchive文件成ipa包,并輸出到指定的文件夾
到此一個iOS工程的Jenkins打包就配置好了腰埂。
五实昨、添加上傳腳本
現(xiàn)在已經(jīng)有打包后的ipa包了,最后再上傳到蒲公英就可以交付給測試了
1. 先安裝fir-clifir命令行工具
gem install fir-cli
2. 添加上傳腳本
# 蒲公英的User Key
uKey="******"
# 蒲公英的API Key
apiKey="******"
# 要上傳的ipa文件路徑
IPA_PATH=$(cat path.txt)
rm -rf path.txt
# 上傳至蒲公英的命令
echo "++++++++++++++ 上傳至蒲公英... +++++++++++++"
curl -F "file=@${IPA_PATH}" -F "uKey=${uKey}" -F "_api_key=${apiKey}" http://www.pgyer.com/apiv1/app/upload
至此整個iOS項目的自動化打包集成就完成了盐固。
六荒给、總結(jié)
整個流程走通還是不容易,筆者也是踩了不少坑刁卜,花了好幾天的時間才完成整個流程志电。第一次是直接在自己的MacBook上打包,第二次是將一臺iMac作為slave打包蛔趴,兩個流程都走了一遍挑辆,其實走完第一個再來第二次就很容易了。寫這篇文章主要也是記錄下踩坑的過程孝情,方便后面自己回顧鱼蝉,也讓其他的同學可以走的順利一點,可能還是會有其他的問題箫荡,可以參考下面的鏈接魁亦。