iOS+Jenkins自動(dòng)構(gòu)建

iOS Jenkins自動(dòng)構(gòu)建

安裝

下載安裝Jenkins,直接在官網(wǎng)下載安裝,此處不累述,網(wǎng)上很多教程.
可以參考http://www.itdecent.cn/p/41ecb06ae95f

配置

登入Jenkins頁(yè)面

  1. 通過(guò)http://localhost:8080打開(kāi)頁(yè)面進(jìn)行配置(如果沒(méi)有另外指定端口,默認(rèn)端口是8080)

  2. 如果打不開(kāi)頁(yè)面,可能是java環(huán)境沒(méi)有安裝,需先安裝java環(huán)境。

  3. 第一次打開(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è)上去重置密碼了。

安裝插件

  1. 安裝GitLab插件
    因?yàn)槲覀冇玫氖荊itLab來(lái)管理源代碼,Jenkins本身并沒(méi)有自帶GitLab插件,所以我們需要依次選擇 系統(tǒng)管理->管理插件,在“可選插件”中選中“GitLab Plugin”和“Gitlab Hook Plugin”這兩項(xiàng),然后安裝。
  2. 安裝Xcode插件
    同安裝GitLab插件的步驟一樣,我們依次選擇系統(tǒng)管理->管理插件,在“可選插件”中選中“Xcode integration”安裝。
  3. 安裝簽名證書(shū)管理插件
    iOS打包內(nèi)測(cè)版時(shí),需要發(fā)布證書(shū)及相關(guān)簽名文件,因此這兩個(gè)插件對(duì)于管理iOS證書(shū)非常方便。還是在系統(tǒng)管理->管理插件,在“可選插件”中選中“Credentials Plugin”和“Keychains and Provisioning Profiles Management”安裝。
  4. 安裝FTP插件
    在系統(tǒng)管理->管理插件,在“可選插件”中選中“Publish over FTP”安裝。如果要進(jìn)行安裝包的統(tǒng)一管理,需要用到此插件,將文件上傳到指定服務(wù)器目錄.
  5. fir-plugin
    如果要分發(fā)到fir.rm,可以安裝此插件,但Jenkins插件庫(kù)本身不提供此插件,可以到fir.rm官網(wǎng)現(xiàn)在此插件后再安裝,提供了對(duì)應(yīng)的指導(dǎo)文檔.

其他插件是否需要,主要看實(shí)際需求,這里只列明必要插件及主要需要使用到的插件.

系統(tǒng)配置

  1. 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ò).

profiles設(shè)置
  1. Xcode Builder設(shè)置
    系統(tǒng)管理->系統(tǒng)設(shè)置

    其中Keychain path設(shè)置 ${HOME}/Library/Keychains/login.keychain
    Keychain password為開(kāi)機(jī)密碼


  2. 如果用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è)置

  1. 勾選"Keychains and Code Signing Identities",下拉框選擇之前設(shè)置好的keychain及簽名.


  2. 勾選"Mobile Provisioning Profiles",注意Provisioning profile需和所選的證書(shū)一一對(duì)應(yīng)


構(gòu)建設(shè)置

  1. 如果項(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
  1. pod命令不識(shí)別


解決方案:在系統(tǒng)管理->系統(tǒng)設(shè)置 頁(yè)面設(shè)置PATH的值,獲取用戶(hù)目錄下的PATH值并在這里設(shè)置


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


這里的Development Team ID給證書(shū)的一致,Keychain通過(guò)下拉框選擇.

如果*.xcworkspace不在Jenkins的job目錄下,需要制定路徑.


構(gòu)建過(guò)程中出現(xiàn)的一些問(wèn)題總結(jié)

  1. Jenkins xcodebuild There are no schemes in workspace



    解決:

    • xcode中manage schemess


    • 勾選Shared選項(xiàng)


  1. 報(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)目錄

  2. 報(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的描述文件夾

  3. 文件夾中不包含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。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容