Jenkins自動化ipa打包

Jenkins是個比較方便持續(xù)集成的工具苦蒿,簡單記錄一下利用Jenkin拉取SVN的iOS代碼殴胧,并且打包上傳到蒲公英(fir.im類似)的過程。安卓只需要安裝對應的插件就可以佩迟⊥爬模可以實現(xiàn)定時打包發(fā)布任務,方便自動化管理报强【逆ⅲ考慮到現(xiàn)在代碼基本往Git上遷移,在第八步給出快捷遷移SVN代碼到Git的方法秉溉。

一力惯、安裝Jenkins
安裝Jenkins.png

下載pkg文件

安裝后會自動打開http://localhost:8080
第一次的初始密碼在initialAdminPassword文件中
/Users/Shared/Jenkins/Home/secrets/initialAdminPassword

initialAdminPassword.png

也可以使用Homebrew安裝
brew install jenkins

image.png

$ brew update && brew outdated jenkins
$ brew cask install java
$ ln -sfv /usr/local/opt/jenkins/*.plist ~/Library/LaunchAgents
$ sudo cp -fv /usr/local/opt/jenkins/*.plist /Library/LaunchDaemons
$ sudo chown `whoami` /Library/LaunchDaemons/homebrew.mxcl.jenkins.plist

參考installing-jenkins-os-x-homebrew

二、選擇安裝插件
安裝插件.png
2.1 需要安裝的插件:
  1. Xcode integration
  2. Keychains and Provisioning Profiles Management

安裝完成后我們重啟下jenkins召嘶,重新加載下插件父晶。可以滑到最底下勾選重啟弄跌,或者也可以在地址欄輸入http://localhost:8080/restart
重啟之后應該要輸入用戶名和密碼甲喝,把剛剛注冊的用戶名密碼輸入進去。還有一個重要的步驟碟绑,我們先給Jenkins用戶管理員的權限俺猿,避免后續(xù)的訪問問題茎匠。系統(tǒng)偏好設置->用戶與群組->點開鎖,然后在Jenkins用戶下勾選“允許用戶管理這臺電腦”押袍。到這步最好給Jenkins用戶設置一個密碼诵冒,便于后期檢查是否Jenkins配置錯誤或者是檢查代碼錯誤。

三谊惭、創(chuàng)建一個item
創(chuàng)建Item.png
四汽馋、設置基本配置
基本配置.png
五、配置SVN
配置SVN.png
5.1 連接SVN代碼庫
連接SVN.png
六圈盔、設置打包的簽名

這里需要打開 Keychains插件
Keychains and Provisioning Profiles Management
上傳login.keychain文件豹芯,證書和對應的profile文件
login.keychain文件路徑:

~/Library/Keychains

其中l(wèi)ogin.keychain-db可以改成login.keychain,然后上傳


image.png

如果是用Pod管理的驱敲,需要打開Scheme共享:


image.png

沒有打開共享的路徑:
$ /Users/developer/Library/Keychains/login.keychain
我這邊是用Pod管理的铁蹈,打開Scheme共享的路徑:
$ /Users/Shared/Jenkins/Library/Keychains/login.keychain

login.keychain文件路徑.png

在Jenkins的Xcode模板配置如下:
通用路徑:
${HOME}/Library/Keychains/login.keychain

image.png

image.png
Keychains.png
構(gòu)建環(huán)境..png
6.1 證書

Keychain password對應的密碼可以在鑰匙串中查看:

password對應的密碼.png
6.2 描述文件Profiles

Provisioning Profiles文件放到Jenkins/Library/MobileDeviece/Provision Profiles文件夾中

Provision Profiles.png

然后配置簽名和鑰匙串的選項

簽名和鑰匙串.png
6.3 設置Xcode integration面板
Xcode integration.png
七、上傳到蒲公英

腳本代碼:

curl -F "file=@${WORKSPACE}/build/ipa/${JOB_NAME}@${VERSION}@${BUILD_DATE}.ipa"
 -F "uKey=uKey" -F "_api_key=_api_key" https://www.pgyer.com/apiv1/app/upload

注:對于Cocoapods項目众眨,需要設置schemesShared握牧,不然可能因為找不到scheme報錯

Scheme_Error.png

share.png

注意點

1、Jenkins 安裝成功后,會創(chuàng)建一個Jenkins用戶娩梨,而Jenkins的工作區(qū)間默認是在/用戶/共享/Jenkins/Home/jobs目錄下沿腰,可以用Finder-->前往進入。
2狈定、Jenkins目錄下的文件夾的讀寫權限只對Jenkins用戶開放颂龙,所以后面apple證書等必須在Jenkins用戶下安裝,項目的ipa導出也得在Jenkins用戶下操作纽什。(或者用管理員權限修改該目錄針對用戶的權限)
3措嵌、Jenkins的使用是每一個用戶都可以使用,所以有可能導致構(gòu)建版本的時候報錯稿湿,還是老老實實在Jenkins用戶下操作吧铅匹。


常用命令
1)我們先把jenkins停掉押赊,執(zhí)行:
sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist
3.第三個坑:打包iOS有pod的項目饺藤,shell執(zhí)行pod install時,提示pod command not found流礁,這個需要在shell第一行加上 bin/bash -l 就行了涕俗,所以最終是這樣:

!/bin/bash -l
export LANG=en_US.UTF-8
pod install --verbose --no-repo-update
  1. 第四個坑:有pod的項目可能提示schema找不到的問題,需要用xcode打開一次.xcworkspace就好了神帅,或者在shell pod install之后下加上 open x.xcworkspace

常見錯誤

1.Cocoapods打包問題Jenkins:”ResourceRules.plist: cannot read resources” error after Xcode 6.1

error: /usr/bin/codesign --force --preserve-metadata=identifier,entitlements, 
resource-rules --sign iPhone Distribution: Certificate--resource-rules=/var/folders/ph/2y4lb27j1zx6lcp3htvhnlbm000087/T/ctBXHIqC3V/Payload/ProjectName
.app/ResourceRules.plist --entitlements 

/var/folders/ph/2y4lb27j1zx6lcp3htvhnlbm000087/T/ctBXHIqC3V/entitlements_plistUx80j3Iz 
/var/folders/ph/2y4lb27j1zx6lcp3htvhnlbm000087/T/ctBXHIqC3V/Payload/ProjectName.app failed with error 1.
 Output: Warning: usage of --preserve-metadata with option "resource-rules" (deprecated in Mac OS X >= 10.10)!
Warning: --resource-rules has been deprecated in Mac OS X >= 10.10!
/var/folders/ph/2y4lb27j1zx6lcp3htvhnlbm000087/T/ctBXHIqC3V/Payload/ProjectName.app/ResourceRules.plist: cannot read resources

解決方法:
Custom xcodebuild arguments處填入:
CODE_SIGN_RESOURCE_RULES_PATH=$(SDKROOT)/ResourceRules.plist

ResourceRules.jpg

錯誤2 :
Code Sign error: No matching provisioning profile found: Your build settings specify a provisioning profile with the UUID “dc5a6f0d-5d0e-4680-9d07-248d78b4d576”, however, no such provisioning profile was found.

Profile_Error.png

解決方法:
檢查后發(fā)現(xiàn)SVN上的Code Sign配置并沒有和本地的一致再姑,確認后,提交SVN后解決

錯誤3 :Cocoapods打包

error: /usr/bin/codesign --force --preserve-metadata=identifier,entitlements,resource-rules --sign iPhone Distribution: Certificate--resource-rules=/var/folders/ph/2y4lb27j1zx6lcp3htvhnlbm000087/T/vDWiCo9Pi6/Payload/ProjectName.app/ResourceRules.plist 
--entitlements /var/folders/ph/2y4lb27j1zx6lcp3htvhnlbm000087/T/vDWiCo9Pi6/entitlements_plistUcV_4_yn /var/folders/ph/2y4lb27j1zx6lcp3htvhnlbm000087/T/vDWiCo9Pi6/Payload/ProjectName.app failed with error 1. Output: Warning: usage of
 --preserve-metadata with option "resource-rules" (deprecated in Mac OS X >= 10.10)!

解決方法:
步驟1
nomadshenzhen

Snip20170120_7.png

步驟2
--resource-rules has been deprecated in mac os x >= 10.10

在Xcode Building Setting的Code Signing Resource Rules Path 中添加
$(SDKROOT)/ResourceRules.plist

ResourceRules.png

錯誤4: xcodebuild: error: 'APP.xcworkspace' does not exist
Choose Product > Scheme > Manage Schemes.
Share your scheme:

  1. 缺少scheme

xcodebuild: error: The project named “Foo” does not contain a scheme named “Bar”. The “-list” option can be used to find the names of the schemes in the project.

解決辦法:
The root cause is that the default behavior of Schemes is to keep schemes ‘private’ until they are specifically marked as shared. In the case of a command-line initiated build, the Xcode UI never runs and the xcoderun tool doesn’t have its own cache of Schemes to work with.
To your schema be visible for command-line build you must mark it as a shared scheme.

Choose Scheme > Manage Schemes (from the Product Menu).
Ensure the ‘Shared’ box is checked for that scheme
A new .xcscheme file has been created in your project at
WorkspaceName.xcworkspace/xcshareddata/xcschemes.
Commit this file to your repository

八找御、SVN代碼遷移到GIt

方法:
使用Git命令,把SVN上的代碼和提交記錄clone到本地元镀,然后提交到Git上绍填。

主要命令

git svn clone svn://xxxxxxx/${ProjectName}
 --authors-file=user.txt --no-metadata ${ProjectName}
git svn clone svn://xxxxxxx/xxxxxx/xxxxx/trunk/xxxxxx 
--authors-file=user.txt --no-metadata ProjectName
8.1 建立User更換表

格式:
SVN賬戶名 = Git賬戶名<Git郵箱名>
最后,在Git建立項目倉庫, push代碼到Git倉庫

九栖疑、卸載Jenkins

在終端中執(zhí)行:

'/Library/Application Support/Jenkins/Uninstall.command'

如果老版本命令無效

sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist
sudo rm /Library/LaunchDaemons/org.jenkins-ci.plist
sudo rm -rf /Applications/Jenkins "/Library/Application Support/Jenkins" /Library/Documentation/Jenkins

如果需要刪除已經(jīng)編譯的任務:

sudo rm -rf /Users/Shared/Jenkins

注意

jenkins是由jar啟動的讨永,需要java的最新版本
Mac: 通過系統(tǒng)設置中的java圖標啟動java面板,查看java的版本遇革,

image.png

需要升級java環(huán)境

image.png

———————— 2017-08-07 ——————

今天重新安裝Jenkins時卿闹,在官網(wǎng)下載的Jenkins2.60,安裝后發(fā)現(xiàn)一直訪問不了默認的http://localhost:8080萝快,后面發(fā)現(xiàn)Jenkins2.60需要Java8環(huán)境锻霎,本地mac還是Java7,但是在jav設置面板升級到8后,貌似制定位置還是7揪漩,一直訪問不了旋恼,后面干脆用Homebrew安裝JenkinsJava8,然后制定端口8080
brew cask install java
brew install jenkins
java -jar jenkins.war --httpPort=8080

使用Homebrew安裝Jenkins

在終端輸入jenkins restart就可以啟動jenkins訪問8080了奄容。

參考

  1. 手把手教你利用Jenkins持續(xù)集成iOS項目
  2. Mac下Jenkins+SVN+Xcode構(gòu)建持續(xù)導出環(huán)境
  3. mac jenkins iOS持續(xù)集成中的坑
  4. nomadshenzhen
  5. Jenkins:”ResourceRules.plist: cannot read resources” error after Xcode 6.1
  6. --resource-rules has been deprecated in mac os x >= 10.10
  7. installing-jenkins-os-x-homebrew
  8. IOS 自動化部署 - 最新Jenkins + git +cocoapods + fir - 簡書
  9. macos - How to uninstall Jenkins? - Stack Overflow
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蚌铜,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子嫩海,更是在濱河造成了極大的恐慌冬殃,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叁怪,死亡現(xiàn)場離奇詭異审葬,居然都是意外死亡,警方通過查閱死者的電腦和手機奕谭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門涣觉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人血柳,你說我怎么就攤上這事官册。” “怎么了难捌?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵膝宁,是天一觀的道長。 經(jīng)常有香客問我根吁,道長员淫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任击敌,我火速辦了婚禮介返,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己圣蝎,他們只是感情好刃宵,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著徘公,像睡著了一般组去。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上步淹,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天从隆,我揣著相機與錄音,去河邊找鬼缭裆。 笑死键闺,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的澈驼。 我是一名探鬼主播辛燥,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼缝其!你這毒婦竟也來了挎塌?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤内边,失蹤者是張志新(化名)和其女友劉穎榴都,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體漠其,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡嘴高,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年和屎,在試婚紗的時候發(fā)現(xiàn)自己被綠了拴驮。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡套啤,死狀恐怖止潮,靈堂內(nèi)的尸體忽然破棺而出钞楼,到底是詐尸還是另有隱情,我是刑警寧澤燃乍,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站宛琅,受9級特大地震影響刻蟹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嘿辟,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一舆瘪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧红伦,春花似錦英古、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蛮浑,卻和暖如春唠叛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背沮稚。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工艺沼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蕴掏。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓澳厢,卻偏偏與公主長得像,于是被迫代替她去往敵國和親囚似。 傳聞我的和親對象是個殘疾皇子剩拢,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容