iOS Jenkins自動(dòng)構(gòu)建
安裝
下載安裝Jenkins,直接在官網(wǎng)下載安裝,此處不累述,網(wǎng)上很多教程.
可以參考http://www.itdecent.cn/p/41ecb06ae95f
配置
登入Jenkins頁(yè)面
通過(guò)http://localhost:8080打開(kāi)頁(yè)面進(jìn)行配置(如果沒(méi)有另外指定端口,默認(rèn)端口是8080)
如果打不開(kāi)頁(yè)面,可能是java環(huán)境沒(méi)有安裝,需先安裝java環(huán)境。
-
第一次打開(kāi)會(huì)出現(xiàn)下面錯(cuò)誤頁(yè)面
Jenkins打開(kāi)出錯(cuò)
按照提示,找到/Users/Shared/Jenkins/Home/secrets 這個(gè)目錄,這個(gè)目錄雖然是共享目錄,但是有權(quán)限限制的,非Jenkins用戶(hù)沒(méi)有讀寫(xiě)權(quán)限的,需要手動(dòng)需改權(quán)限后才能讀,打開(kāi)initialAdminPassword文件,復(fù)制出密碼,就可以填到網(wǎng)頁(yè)上去重置密碼了。
安裝插件
- 安裝GitLab插件
因?yàn)槲覀冇玫氖荊itLab來(lái)管理源代碼,Jenkins本身并沒(méi)有自帶GitLab插件,所以我們需要依次選擇 系統(tǒng)管理->管理插件,在“可選插件”中選中“GitLab Plugin”和“Gitlab Hook Plugin”這兩項(xiàng),然后安裝。 - 安裝Xcode插件
同安裝GitLab插件的步驟一樣,我們依次選擇系統(tǒng)管理->管理插件,在“可選插件”中選中“Xcode integration”安裝。 - 安裝簽名證書(shū)管理插件
iOS打包內(nèi)測(cè)版時(shí),需要發(fā)布證書(shū)及相關(guān)簽名文件,因此這兩個(gè)插件對(duì)于管理iOS證書(shū)非常方便。還是在系統(tǒng)管理->管理插件,在“可選插件”中選中“Credentials Plugin”和“Keychains and Provisioning Profiles Management”安裝。 - 安裝FTP插件
在系統(tǒng)管理->管理插件,在“可選插件”中選中“Publish over FTP”安裝。如果要進(jìn)行安裝包的統(tǒng)一管理,需要用到此插件,將文件上傳到指定服務(wù)器目錄. - fir-plugin
如果要分發(fā)到fir.rm,可以安裝此插件,但Jenkins插件庫(kù)本身不提供此插件,可以到fir.rm官網(wǎng)現(xiàn)在此插件后再安裝,提供了對(duì)應(yīng)的指導(dǎo)文檔.
其他插件是否需要,主要看實(shí)際需求,這里只列明必要插件及主要需要使用到的插件.
系統(tǒng)配置
-
Keychains and Provisioning Profiles Management配置
系統(tǒng)管理->Keychains and Provisioning Profiles Management,進(jìn)入Keychains and Provisioning Profiles Management頁(yè)面,點(diǎn)擊“瀏覽”按鈕,分別上傳自己的keychain和證書(shū)。
上傳成功后,我們?cè)贋閗eychain指明簽名文件的名稱(chēng)。點(diǎn)擊“Add Code Signing Identity”,最后添加成功后如下圖所示:
Keychains配置
Keychain其實(shí)在/Users/管理員用戶(hù)名/Library/Keychains 目錄下,名字為login.keychain或login.keychain-db(名字的差異跟mac系統(tǒng)版本有關(guān)). 如果上傳login.keychain-db文件提示文件不匹配類(lèi)似錯(cuò)誤時(shí),可以將login.keychain-db名稱(chēng)改為login.keychain后上傳.當(dāng)把這個(gè)Keychain設(shè)置好了之后,需要手動(dòng)做一些拷貝動(dòng)作:將這個(gè)Keychains拷貝到/Users/Shared/Jenkins/Library/Keychains這里,(Library是隱藏文件)。MobileDevice文件也直接拷貝到/Users/Shared/Jenkins/Library/MobileDevice文件目錄下(實(shí)際是拷貝對(duì)應(yīng)目錄下的Provisioning Profiles)。
注意: Provisioning Profiles設(shè)置路徑時(shí)指定/Users/Shared,不要用管理員目錄,編譯時(shí)會(huì)因?yàn)闄?quán)限問(wèn)題不通過(guò).

-
Xcode Builder設(shè)置
系統(tǒng)管理->系統(tǒng)設(shè)置
圖
其中Keychain path設(shè)置 ${HOME}/Library/Keychains/login.keychain
Keychain password為開(kāi)機(jī)密碼
如果用git下載代碼,配置private key.
舉例中是用的碼云管理代碼.
- sudo su - jenkins //切換到j(luò)enkins用戶(hù)
- mkdir .ssh
-
ssh-keygen -t rsa //生成 ssh key,復(fù)制 xxx.pub 公鑰到 git 服務(wù)器上即可
碼云添加公鑰
在Jenkins管理頁(yè)面,選擇“Credentials”,然后選擇“Global credentials (unrestricted)”,點(diǎn)擊“Add Credentials”,如下圖所示,我們填寫(xiě)自己的SSH信息,Private Key選擇第三個(gè)"From the Jenkins master ~/.ssh",然后點(diǎn)擊“Save”,這樣就把SSH添加到Jenkins的全局域中去了。

完成以上步驟,就基本完成了Jenkins的設(shè)置,接下來(lái)就是創(chuàng)建工程了.
創(chuàng)建工程
工程創(chuàng)建跟普通Jenkins工程一致,這里主要提出需要特別注意的點(diǎn).
git代碼庫(kù)位置設(shè)置
填寫(xiě)git下載地址及在以上步驟中添加的用戶(hù)

構(gòu)建環(huán)境設(shè)置
-
勾選"Keychains and Code Signing Identities",下拉框選擇之前設(shè)置好的keychain及簽名.
-
勾選"Mobile Provisioning Profiles",注意Provisioning profile需和所選的證書(shū)一一對(duì)應(yīng)
構(gòu)建設(shè)置
-
如果項(xiàng)目中用到cocoapads,需要在構(gòu)建之前進(jìn)行安裝.
如果沒(méi)有安裝,編譯時(shí)會(huì)報(bào)如下錯(cuò)誤.
選在構(gòu)建步驟中增加執(zhí)行如下shell腳本的運(yùn)行.
#/bin/bash -l
export LANG=en_US.UTF-8
cd ${JENKINS_HOME}/workspace/${JOB_NAME}/KOOCAN-PortalCore
/usr/local/bin/pod install
-
pod命令不識(shí)別
解決方案:在系統(tǒng)管理->系統(tǒng)設(shè)置 頁(yè)面設(shè)置PATH的值,獲取用戶(hù)目錄下的PATH值并在這里設(shè)置

-
構(gòu)建步驟增加xcode


這里的Development Team ID給證書(shū)的一致,Keychain通過(guò)下拉框選擇.
如果*.xcworkspace不在Jenkins的job目錄下,需要制定路徑.

構(gòu)建過(guò)程中出現(xiàn)的一些問(wèn)題總結(jié)
-
Jenkins xcodebuild There are no schemes in workspace
解決:
-
xcode中manage schemess
-
勾選Shared選項(xiàng)
-
報(bào)錯(cuò): No signing certificate "iOS Development" found: No "iOS Development" signing certificate matching team ID "28SDX923G4" with a private key was found.
解決:https://stackoverflow.com/questions/41617743/jenkins-error-no-signing- certificate 將鑰匙串的開(kāi)發(fā)證書(shū)從登陸拷貝到系統(tǒng)目錄報(bào)錯(cuò):No profiles for 'com.sowell-tech.ShareSDKDemo.HelloWord' were found: Xcode couldn't find a provisioning profile matching 'com.sowell-tech.ShareSDKDemo.HelloWord'.
解決:1.保證teamID填寫(xiě)正確 2.將工程本身的描述文件復(fù)制到Jenkins的描述文件夾文件夾中不包含project 或 workspace文件
報(bào)錯(cuò):xcodebuild: error: The directory /Users/Shared/Jenkins/Home/workspace/Demo1 does not contain an Xcode project or workspace.
解決:在構(gòu)建步驟,Advanced Xcode build options設(shè)置Xcode Workspace File的值,值為 *.xcodeproj的絕對(duì)路徑,不需要后綴.
重命名打包文件+版本號(hào)
#/bin/bash -l
export LANG=en_US.UTF-8
# app重命名
plist=${JENKINS_HOME}/workspace/${JOB_NAME}/KOOCAN-PortalCore/KOOCAN-PortalCore/Info.plist
buildver=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "${plist}")
date=`date +"%Y%m%d"`
# 上傳到蒲公英
cd ${WORKSPACE}/build
mv `find . -name *_Release.ipa |awk -F '/' '{print $2}'` `find . -name *_Release.ipa | awk -F '/' '{print $2}' | awk '{print substr($0,0,length-12)}'`_${buildver}_${date}_Release.ipa
APPNAME=`find . -name *_Release.ipa`
echo "APPNAME=${APPNAME}"
curl -F "file=@${APPNAME}" -F "uKey=*" -F "_api_key=*" https://qiniu-storage.pgyer.com/apiv1/app/upload
jenkins管理員用戶(hù)忘記密碼
打開(kāi)JENKINS_HOME/config.xml文件,修改<useSecurity>true</useSecurity>的值為false,然后重新啟動(dòng)Jenkins.
命令如下:
停止Jenkins:sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist
啟動(dòng)Jenkins: sudo launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist
重新啟動(dòng)后不需要賬號(hào)密碼可以登陸Jenkins。












