iOS 使用 Jenkins 自動化打包

[TOC]

前言:

以前每次給測試人員安裝app的時候都是在Xcode上直接安裝,效率很低,浪費時間,為了提高效率,也是配合公司整個自動化的流程,研究了一下自動化打包的過程,記錄如下;

步驟

安裝 Jenkins

官網下載地址 :

https://jenkins.io/download/

我的電腦是Mac系統,選擇了 Mac OS X

Jenkins下載.png

安裝完成后需要輸入密碼進入

安裝輸入密碼.png

密碼可以點擊連接在服務器上獲取,也可以從本地日志中獲取密碼;

日志文件中獲取密碼.png

后面就是下一步...,都有提示的

安裝相關插件

安裝推薦的插件,可以先安裝推薦的插件,然后再搜索插件自定義安裝;

安裝插件.png

搜索插件并安裝: Jenkins首頁 -- 系統管理 -- 插件管理

Jenkins插件管理位置.png
搜索插件安裝.png

需要的有:

  • Keychains and Provisioning Profiles Management : 證書管理
  • Xcode integration : 持續集成,buildarchive 的一些配置信息

配置Jenkins和相關的插件信息

我這邊使用的是gitlab管理源代碼,所以需要配置ssh。(注意:不能使用http配置否則會報錯)

配置 JenkinsGitLab 相關信息

配置訪問token

GitLab_Private_Token.png

配置ssh

ssh生成和獲取可以點擊鏈接查看怎么獲取,或者百度一下

GitLab_SSH.png

Jekins配置GitLab賬號

Jenkins -- 系統設置 -- 系統設置 -- 配置 -- GitLab 中進行配置

Jenkins配置GitLab.png

host URL只需要寫gitlab的域名就好了,不需要具體的項目地址

配置訪問GitLab的證書: 選擇 GitLab API Token,把前面獲取到的填入即可

Jenkins配置GitLab_Credentials.png

配置相關插件

配置證書插件

需要的是:

  • Keychains : 路徑 /Users/{用戶名}/Library/Keychains
  • MobileDevice : 路徑 /Users/{用戶名}/Library/MobileDevice

如下圖

證書路徑.png

把這兩個文件夾的內容復制Jenkins用戶下:(Jenkins是新建了一個用戶)

Jenkins證書路徑.png

下面開始配置鑰匙串訪問和簽名證書

配置鑰匙串訪問和簽名證書.png

這里需要把Xcode證書改為手動管理,如下

Xcode簽名手動處理.png

新建工程

點擊 Jenkins -- 新建任務 開始構建任務

Jenkins新建任務.png

配置工程

我這邊用的是GitLab,下面以GitLab作為講解

General

general.png

對應需要多個配置變量的,可以使用參數化構建過程

源碼管理

配置項目地址

源碼管理1.png

配置項目的訪問憑證

源碼管理2.png

構建觸發器

這里可以定時,也可以自定義

構建觸發器.png

構建環境

構建環境.png

構建

更新 pod

現在項目都是使用了 pod 進行第三方庫的管理,需要需要更新pod,否則項目運行不起來

這里選擇 shell 執行,代碼參考如下

#bin/bsah - l
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
cd $WORKSPACE/項目名稱
/usr/local/bin/pod update --verbose --no-repo-update

說明:

  • cd $WORKSPACE/項目名稱 : 這句代碼和我們從終端更新pod的操作時一樣,這里需要注意路徑的問題,項目名稱.xcworkspace或者項目名稱.xcodeproj的上一級目錄
  • /usr/local/bin/pod update --verbose --no-repo-update : 更新pod,這里前面是pod的絕對路徑,直接使用pod update 可能會報錯pod: command not found,所以這里使用pod的絕對路徑來執行,見下面pod路徑

pod的路徑

pod絕對路徑.png

Jenkins用戶的項目路徑為 /Users/Shared/Jenkins/Home/workspace

Jenkins項目路徑.png

配置 buildarchive 配置

添加構建步驟 - Xcode

注意:在Xcode 9之后,使用Jenkins的插件Xcode integration 在導出ipa文件的時候會報錯,因為需要pp文件和一些其他的配置plist文件;索引這里我只archive使用了插件Xcode integration,但是導出ipa包使用腳本文件shell執行,具體如下

General build settings

一、

General build settings1.png

二、

General build settings2.png

注意,這里執行build archive命令,得到的是.xcarchive 文件,需要我們簽名才能變成.ipa文件

Code signing & OS X keychain options
Code signing & OS X keychain options.png

這里需要解鎖鑰匙串,否則會報錯

Command /usr/bin/codesign failed with exit code 1
Advanced Xcode build options

簽名、獲取 ipa 文件

因為Xcode 9之后簽名需要pp文件,自帶的插件不支持,所以使用了腳本執行shell

命令如下:

xcodebuild -exportArchive -archivePath "{.xcarchive文件路徑}" -exportPath "{輸入目錄,一般是build目錄}" -exportOptionsPlist '{導致配置參數的plist文件路徑}' -allowProvisioningUpdates

參考腳本shell如下:(PROJECT_NAME是自己添加的參數化構建)

echo exportArchive parameters begin ---- 
echo $JOB_BASE_NAME
echo $JOB_NAME

build_dir="$WORKSPACE/build"
project_name="${PROJECT_NAME}"
archivePath="$build_dir/$project_name.xcarchive"
exportPath=$build_dir
exportOptionsPlist="$WORKSPACE/ExportOptions_Debug.plist"

echo $archivePath
echo $exportPath
echo $exportOptionsPlist
echo exportArchive parameters end ---- 

xcodebuild -exportArchive -archivePath "$archivePath" -exportPath "$exportPath" -exportOptionsPlist "$exportOptionsPlist" -allowProvisioningUpdates

一些其他處理

更改文件名稱

打包出來的文件名稱格式不符合要求,所以自己加了一段腳本更改ipa文件名稱

echo "ipa文件改名開始 ----- "

project_name="${PROJECT_NAME}"
echo $project_name

plistPath="$WORKSPACE/$project_name/$project_name/Info.plist"
echo $plistPath

versionString=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" $plistPath)
echo $versionString

formattedDate=$(date "+%Y%m%d%H%M%S")
echo $formattedDate

oldName="$project_name.ipa"
newName="app_parent-$versionString-$formattedDate-debug.ipa"

cd "$WORKSPACE/build"
$(mv $oldName $newName)

echo "ipa文件改名結束 -----"

注意:這里更改文件名稱使用的是mv命令,rename命令在mac系統下面默認是沒有的

構建后操作

構建完成后,可以上傳ipa文件到相應的平臺,(蒲公英之類的)

過程中遇到的錯誤以及處理

git拉去代碼出錯

ERROR: Timeout after 10 minutes
ERROR: Error cloning remote repo 'origin'

原因:一開始在源碼管理這一塊使用的是http連接、設置了賬號和密碼,就一直報錯;
解決:使用ssh連接源碼管理,具體步驟參照上面的步驟;

2018-12-11更新:
后面又嘗試了 URL 使用httpgit開始,密碼使用賬號和密碼和使用ssh登錄,好像也都可以,總之這地方多試一試吧

pod 命令

pod: command not found

找不到pod命令;

原因:Jenkins是新開了一個用戶的;pod命令的位置找不到;
解決:使用pod的絕對路徑進行命令操作;

#bin/bsah - l
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
cd $WORKSPACE/項目名稱
/usr/local/bin/pod update --verbose --no-repo-update

證書簽名問題

== Certificates available for the Codesign
[HaiZiGuoParents] $ /usr/bin/security find-identity -p codesigning -v
     0 valid identities found
No global development team or local team ID was configured, back to default automatic signing

---------

check dependencies
Code Signing Error: There are no accounts registered with Xcode. Add your developer account to Xcode
Code Signing Error: No profiles for '.......' were found:  Xcode couldn't find any iOS App Development provisioning profiles matching '........'.

原因:證書配置出錯了;
解決:參考上面的步驟,重新配置證書;

注意:把相應的證書文件復制到Jenkins用戶目錄下的Library文件下面


Command /usr/bin/codesign failed with exit code 1

The following build commands failed:
    CodeSign /Users/Shared/Jenkins/Library/Developer/Xcode/DerivedData/......-alyncnqklycsyacghgezqybbpyae/Build/Intermediates.noindex/ArchiveIntermediates/......./InstallationBuildProductsLocation/Applications/HaiZiGuoParents.app

試試在 Code signing & OS X keychain options 添加 Unlock Keychain? 這個選項,就是解鎖鑰匙串訪問的權限;


Check dependencies
Code Signing Error: "Test" requires a provisioning profile with the Push Notifications feature. Select a provisioning profile for the "Release" build configuration in the project editor.
warning: no rule to process file

原因: Xcode中沒有配置證書;

解決:不要使用自動管理證書,使用手動管理證書,并配置相關證書文件,參考上面響應的步驟;

簽名ipa問題

error: exportArchive: "Test.app" requires a provisioning profile with the Push Notifications feature.

Error Domain=IDEProvisioningErrorDomain Code=9 ""Test.app" requires a provisioning profile with the Push Notifications feature." UserInfo={NSLocalizedDescription="Test.app" requires a provisioning profile with the Push Notifications feature., NSLocalizedRecoverySuggestion=Add a profile to the "provisioningProfiles" dictionary in your Export Options property list.}

** EXPORT FAILED **

導出失?。?/p>

原因:Xcode 9之后導出ipa文件需要一些配置信息,(可以手動導出一遍,看看系統的配置信息ExportOptions.plist

解決:使用腳本shell簽名ipa,參考上面響應的步驟;

參考文章

http://www.lxweimin.com/p/7a2efc7c69fe

http://www.lxweimin.com/p/ce36997919b4

https://blog.csdn.net/u013602835/article/details/54632843

http://www.lxweimin.com/p/faf879b3d182

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,197評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,415評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,104評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,884評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,647評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,130評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,208評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,366評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,887評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,737評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,939評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,478評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,174評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,586評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,827評論 1 283
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,608評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,914評論 2 372

推薦閱讀更多精彩內容