iOS Jenkins CI 集成上傳fir、AppStore

iOS Jenkins CI 集成上傳fir渣触、AppStore

背景:由于我司的App比較多嗅钻,為了方便測試人員測試养篓,所以配置Jenkins去自動打包柳弄。

集成步驟

下載dmg

在Jenkin官網下載Jenkins的安裝包 Jenkin官網下載

選擇相應系統下的安裝包

安裝

采用Jenkins安裝包的方式安裝就比較傻瓜式了碧注,只需要點擊繼續(xù)就可以了

點擊繼續(xù)
點擊同意
點擊安裝
輸入用戶登錄密碼并點擊安裝軟件開始安裝Jenkins
正在安裝
安裝成功
這時候會多了一個jenkins用戶

等Jenkins啟動成功后會看到下面這個頁面, 去到 '/Users/Shared/Jenkins/Home/secrets' 目錄下

如果沒有權限打開這個文件夾船万,就打開secrets的簡介耿导,修改這個文件夾的屬性舱呻。

修改secrets文件夾的屬性后就可一看到這些文件,打開終端執(zhí)行 sudo more /Users/Shared/Jenkins/Home/secrets/initialAdminPassword命令(也可以直接在編輯器中打開文件)

執(zhí)行命令結束后會拿到一串密碼復制后粘貼在瀏覽器中點擊continue就可以了

建議選擇左側的選項芥驳,安裝jenkins推薦的插件就可以了

開始安裝插件
創(chuàng)建管理員賬戶

至此 Jenkins 安裝已經結束下面我們開始配置我們的 Jenkins

Jenkins 配置

在配置 Jenkins 時假抄,我們首先要做的就是安裝關于 iOS 的插件宿饱,在我們使用
xcode 打包的時候需要配置證書和描述文件谬以,所以 Jenkins 用戶需要一個和電腦用戶中間的一個媒介來管理證書我描述文件为黎。我們需要安裝 Keychains and Provisioning Profiles Management 插件碍舍。

選擇系統管理然后選擇插件管理
在可選插件中選擇Keychains and Provisioning Profiles Management插件點擊直接安裝

新建任務

Jenkins 首頁的右上角選擇新建 -> 輸入項目的名稱(推薦選擇 構建一個自由風格的軟件項目選項 )-> 保存后會到項目的配置頁面

在源碼選項下有 NoneGit捧书、Subversion 三個選項经瓷。由于我司的代碼是在
git 下托管的舆吮,所以我配置的也是 git色冀。不相同的同學簡單配置下锋恬,步驟應該差不多与学。

說明:這里遇到一個小坑索守,在輸入代碼的URL會有一個上面所示的紅色錯誤卵佛,是講沒有權限連接遠程倉庫级遭,我就把自己電腦上的git私鑰添加到Jenkins上(圖中點擊Credentials選項后面的add按鈕挫鸽,不會的同學下面會有圖文教程)丢郊。當我把私鑰添加到git服務器上后枫匾,事實告訴我然并卵干茉。


解決辦法:因為在構建的時候是 Jenkins 去構建角虫,所以應該是在 Jenkins 用戶下去生成 git 的公鑰和私鑰。那么:

// 1.首先我們要為 Jenkins 用戶設置一個登陸密碼(初始密碼就是之前的那一串很長的密碼)
$ sudo dscl . passwd /Users/jenkins passWord---(同學均驶,不要全部復制好嗎password是要設置的密碼)
// 2.登陸Jenkins用戶
$ sudo su jenkins ----之后輸入剛才設置的Jenkins的登陸密碼
// 3.生成Jenkins的git公鑰和私鑰
$ ssh-keygen -t rsa -C "你的郵箱標識" -f ~/.ssh/jenkins

公鑰和私鑰生成

公鑰和私鑰就生成完畢

至此Jenkins用戶下的 git 公鑰和私鑰就生成完畢,去到/Users/Shared/Jenkins 修改.ssh文件的權限(不會的同學腾它,看下面的圖)

修改目前登陸用戶的權限

這時打開.ssh文件就可以看到剛才生成的公鑰和私鑰

公鑰和私鑰
//  修改權限后打開終端運行 
$ sudo more /Users/Shared/Jenkins/.ssh/jenkins.pub

// 將公鑰上傳到 `git` 服務器
// 同上運行,查看公鑰
$ sudo more /Users/Shared/Jenkins/.ssh/jenkins 

// 得到 Jenkins 的 git 私鑰如下圖:
Jenkins 的 git 私鑰
  • 添加私鑰


    粘貼進來后點擊下方的add即可

這時剛才的錯誤已經不見了仅颇,恭喜老鐵

如果打包的時候只需要打某一個分支的ipa忘瓦,只需要修改branches to build 選項中的分支名即可搁廓。

點擊立即構建,這時我們需要等待幾分鐘耕皮。累了的同學可以下去抽支煙

幾分鐘后我們會看到:

這時代碼已經拉取到我們Jenkins目錄下境蜕,有興趣的同學可以去看一下

這時我們的Jenkins配置基本上結束了,下面就是進行打包的配置凌停。


針對iOS自動化打包的配置

1.上傳鑰匙串粱年。選擇 系統管理 -> `Keychains and Provisioning Profiles Management

點擊上傳login.keychain

login.keychain在 /Users/用戶名/Library/Keychains/login.keychain 目錄下,選中 login.keychain 點擊 upload 即可罚拟,而 Provisioning Profiles Directory Path 就是本機安裝的描述文件的目錄是在 /Users/用戶名/Library/MobileDevice 目錄下的台诗。配置結束后點擊 Save 按鈕即可

說明:當點擊 upload 按鈕后在 /Users/Shared/Jenkins/Home/kpp_upload 目錄下的 login.keychain 就是剛剛上傳的 鑰匙串 。如果在 /Users/Shared/Jenkins/Library/MobileDevice 目錄下沒有 Provisioning Profiles 文件赐俗,就從 /Users/admin/Library/MobileDevice 目錄下拷貝一份放過去拉队。不然就會打包失敗, 失敗的日志如下圖:


打包前xcode中項目配置

achieve項目配置如下圖:

屏幕快照 2017-07-10 上午9.45.52.png

說明:因為我們要去腳本中指定證書,所以在xcode中我們不做任何證書方面的處理
補充:在 xcode 的菜單欄選中 product -> Scheme -> Manage Schemes 查看對要打包的 scheme 后面的shared 勾有沒有打上阻逮,不然打包的時候會報 scheme not found 的錯誤導致打包失敗

export ipa 項目配置:
我們需要在項目中配置一個plist來告訴xcodebuild下面的信息
metmod : 常用的值 development粱快、app-storead-hoc
teamID: 就是打包證書名稱括號里的那一串字符串拷貝一下就可以了
compileBitcode: Boolean 值叔扼, 推薦使用 yes, 這樣打出來的包體積計較小
附exportPlist配置圖:


打包腳本

JENKINS_USERS=root
APP_NAME=""
CONFIGURATION="Debug"
Scheme=""
#描述文件udid
PROVISIONING_PROFILE_SPECIFIER="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx" 
#打包證書名稱
CODE_SIGN_DISTRIBUTION=""
#exportplist的路徑
EXPORTPLIST_PATH=""
#讀取項項目的信息
project_infoplist_path="./${APP_NAME}/Info.plist"
bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${project_infoplist_path}")
bundleVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" "${project_infoplist_path}")
DATE="$(date +%Y%m%d)"
IPANAME="${APP_NAME}_V${bundleShortVersion}_${DATE}.ipa"
IPA_PATH="$HOME/${IPANAME}"
security unlock-keychain -p "這里寫上用戶登錄密碼 解鎖鑰匙串" "${HOME}/Home/kpp_upload/login.keychain" || failed "unlock-keygen"
#沒有使用cocoapod的打包方式
scheme "${APP_NAME}"  -configuration '{$CONFIGURATION}' clean
xcodebuild archive -project "${APP_NAME}.project" -configuration "${Configuration}" -scheme "${Scheme}" -archivePath "$HOME/${APP_NAME}_V${bundleShortVersion}_${DATE}" CODE_SIGN_IDENTITY="${CODE_SIGN_DISTRIBUTION}" PROVISIONING_PROFILE_SPECIFIER="${PROVISIONING_PROFILE_SPECIFIER}"
xcodebuild -exportArchive -archivePath "$HOME/${APP_NAME}_V${bundleShortVersion}_${DATE}.xcarchive" -exportOptionsPlist "${EXPORTPLIST_PATH}" -exportPath "${HOME}"
#使用cocoapod的打包方式
xcodebuild -workspace "${APP_NAME}.xcworkspace" -scheme "${APP_NAME}"  -configuration '{$CONFIGURATION}' clean
xcodebuild archive -workspace "${APP_NAME}.xcworkspace" -configuration "${Configuration}" -scheme "${Scheme}" -archivePath "$HOME/${APP_NAME}_V${bundleShortVersion}_${DATE}" CODE_SIGN_IDENTITY="${CODE_SIGN_DISTRIBUTION}" PROVISIONING_PROFILE_SPECIFIER="${PROVISIONING_PROFILE_SPECIFIER}"
xcodebuild -exportArchive -archivePath "$HOME/${APP_NAME}_V${bundleShortVersion}_${DATE}.xcarchive" -exportOptionsPlist "${EXPORTPLIST_PATH}" -exportPath "${HOME}"

if [ CONFIGURATION=="Debug" ]
then
#上傳至fir.im 日志可以看到內測app的鏈接
fir publish 這里是打包結束的ipa的路徑 -T這里是fir.im上的token -c "${commit_msg}"

else if [ CONFIGURATION=="Release" ] 
then
#上傳appStore
altoolPath="/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool"
"${altoolPath}" --validate-app -f "${IPA_PATH}/"${APP_NAME}".ipa" -u 開發(fā)者賬號 -p 賬號密碼 -t ios --output-format xml
"${altoolPath}" --upload-app -f "${IPA_PATH}/"${APP_NAME}".ipa" -u xxf@開發(fā)者賬號 -p 賬號密碼 -t ios --output-format xml
fi

補充:上傳 ipaappStore 的時候報說 altool file not found ,需要給 altool 建立軟鏈接 打開終端執(zhí)行

ln -s /Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/itms /usr/local/itms

至此皆尔,iOS端的jenkins自動化集成就配置基本結束了,剛開始配的時候也踩了不少坑币励,也請教了很多大牛慷蠕。所以小白整理了一下,有不正確的地方歡迎大牛們指正食呻,感謝~~~~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末流炕,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子仅胞,更是在濱河造成了極大的恐慌每辟,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件干旧,死亡現場離奇詭異渠欺,居然都是意外死亡,警方通過查閱死者的電腦和手機椎眯,發(fā)現死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門挠将,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胳岂,“玉大人,你說我怎么就攤上這事舔稀∪榉幔” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵内贮,是天一觀的道長产园。 經常有香客問我,道長夜郁,這世上最難降的妖魔是什么什燕? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮竞端,結果婚禮上屎即,老公的妹妹穿的比我還像新娘。我一直安慰自己婶熬,他們只是感情好剑勾,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著赵颅,像睡著了一般虽另。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上饺谬,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天捂刺,我揣著相機與錄音,去河邊找鬼募寨。 笑死族展,一個胖子當著我的面吹牛,可吹牛的內容都是我干的拔鹰。 我是一名探鬼主播仪缸,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼列肢!你這毒婦竟也來了恰画?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤瓷马,失蹤者是張志新(化名)和其女友劉穎拴还,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體欧聘,經...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡片林,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片费封。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡焕妙,死狀恐怖,靈堂內的尸體忽然破棺而出孝偎,到底是詐尸還是另有隱情访敌,我是刑警寧澤凉敲,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布衣盾,位于F島的核電站,受9級特大地震影響爷抓,放射性物質發(fā)生泄漏势决。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一蓝撇、第九天 我趴在偏房一處隱蔽的房頂上張望果复。 院中可真熱鬧,春花似錦渤昌、人聲如沸虽抄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽迈窟。三九已至,卻和暖如春忌栅,著一層夾襖步出監(jiān)牢的瞬間车酣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工索绪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留湖员,地道東北人。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓瑞驱,卻偏偏與公主長得像娘摔,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子唤反,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內容