Jenkins - iOS Build、Archive荧恍、Upload

Xcode 打包一定需要 蘋果系統(tǒng)的電腦瓷叫,以下均在 Mac 下操作

一、安裝步驟

1. 安裝 jenkins 前往 【官網(wǎng)

2. 選擇 MacOS X 版本進(jìn)行下載【下載連接

3. Jenkins 安裝

  • rew install jenkins-lts

4. 運(yùn)行 Jenkins

  • 終端運(yùn)行 jenkins-lts
  • 瀏覽器打開 http://localhost:8080/

5. 解鎖 Jenkins

  • 前往本地路徑 cat /Users/iosuser/.jenkins/secrets/initialAdminPassword送巡,復(fù)制密碼并粘貼到輸入框摹菠,點(diǎn)擊繼續(xù)按鈕
image.png

6. 安裝 Jenkins 插件

1592568762751-5b2a5b63d53f59bc.png

7. 創(chuàng)建 Jenkins 賬號

1592568788249-0003346ca218ecaf.png

8. 歡迎來到 Jenkins!

1592568815124-9d1d8e1209e3b002.png

二、安裝插件

前往 Manage Jenkins -> Manage Plugins 進(jìn)行插件管理

image.png
  • Git , Gitlab , SVN , SSH Credentials — — 用于授權(quán)后拉取遠(yuǎn)程庫的代碼
  • Keychains and Provisioning Profiles Management — — 證書與描述文件的管理
  • Xcode integration — — Xcode 打包的插件,所以 iOS 的打包只能部署在Mac系統(tǒng)
  • Cocoapods — — 如果項(xiàng)目使用了 Cocoapods 插件 來獲取依賴庫
  • Email Extension Plugin — — 郵件插件
  • Locale — — 語言插件

下載過程中會比較慢骗爆,可以通過修改 default.json 文件提升下載速度

sed -i "" 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json

Manage Jenkins -> Configure System -> 在主目錄下可以看到 Jenkins 路徑次氨,defalut.json 在 Jenkins 根目錄的 ./updates 下


三、SSH 配置

一般會在項(xiàng)目中添加 Credentials摘投,添加步驟如下:

1593313820116-fc7d74a193249262.png

選擇 SSH Username with private key 類型

1593313900430-561700e41b818559.png

配置信息主要填一下幾個(gè)

  • Username(用戶名)
  • Private Key(私鑰)
  • Passphrase(密碼)

我們添加完 Credentials 之后可以在 Jenkins -> Credemtials(憑證)-> System -> Global credentials(unrestricted)編輯配置

四煮寡、簡單執(zhí)行一個(gè)項(xiàng)目

前往 Jenkins -> 新建 Item

1593313755549-99a7008a2ee4094d (1).png

新建完一個(gè)項(xiàng)目后,可以根據(jù)【SSH 配置】犀呼,然后配置完 Repository URLCredentials 進(jìn)行保存

1593314409699-192662958f698587.png

點(diǎn)擊 Build Now 可以開始第一次嘗試構(gòu)建項(xiàng)目

1593314502665-b0931885773f2ce5.png
1593314596710-b9edafaef1942aef.png

在構(gòu)建歷史中幸撕,我們可以看到構(gòu)建進(jìn)度,并且我們可以關(guān)閉此次構(gòu)建圆凰,點(diǎn)擊構(gòu)建序列號可以進(jìn)去查看構(gòu)建詳情

1593314664662-9c1ea35f89ae2339.png

控制臺可以查看詳細(xì)的報(bào)錯(cuò)信息杈帐,有利于我們定位問題

五、構(gòu)建前的參數(shù)選擇及填寫

勾選 GeneralThis project is parameterized,然后開始添加參數(shù)

在下面例子挑童,使用的是 Choice Paramenter(可選參數(shù)), 定義了 ENVIRONMENT 變量累铅,之后可以使用 ${ENVIRONMENT}來引用該變量

1593483810371-2b5bab50f5865047.png

之后在 Build 之前就可以選擇參數(shù) ENVIRONMENT 的變量值

1593483966114-6838ec4f218dcd9f.png

六、Cocoapods

對于使用了 Cocoapods 的項(xiàng)目站叼,但是沒有上傳 Pods 文件夾到倉庫中娃兽,需要在構(gòu)建項(xiàng)目前進(jìn)行 pod install

1593764664726-439b3b3ce0e1e710.png
  • 這里用到 WORKSPACE 環(huán)境變量,使用變量用 ${} 將變量名括起來尽楔,為了防止變量名中存在空格執(zhí)行有誤投储,可以用 "" 雙引號括起來
  • 如何查看 Jenkins 已有的環(huán)境變量
    前往 [JENKINS_URL]/env-vars.html/ 網(wǎng)頁查看

如果跑 Jenkins 出現(xiàn) pod install 慢,有可能是在向 Github 源項(xiàng)目進(jìn)行 Clone阔馋,Cocoapods Cache (/Users/[USER]/Library/Caches/CocoaPods/Pods/Release) 沒有緩存玛荞,這種情況需要開啟代理,添加 git config --global呕寝,詳細(xì)見上代碼


七勋眯、郵件發(fā)送

系統(tǒng)有一個(gè)自帶的郵件插件,可以用來測試郵件配置下梢,前往 Jenkins -> Configure System -> 郵件通知

1593502023203-0f0dd84402d6e177.png
  1. 填寫和勾選客蹋,以下幾個(gè)選項(xiàng) — — 填寫 SMTP 服務(wù)器 / 用戶默認(rèn)郵件后綴 / 使用 SMTP 認(rèn)證 / 用戶名 / 密碼 / 使用 SSL 認(rèn)證 / SMTP 端口
  2. 發(fā)送郵件測試 — — 勾選通過發(fā)送測試郵件測試配置,然后填寫 Test e-mail recipient(接收者郵件), 點(diǎn)擊 Test configuration 測試郵件功能

安裝 Email Extension Plugin 插件

Q: 在構(gòu)建項(xiàng)目中添加發(fā)送郵件的任務(wù) ?

安裝完插件之后孽江,在 Jenkins -> Configure System

image.png

添加構(gòu)建后發(fā)送郵郵件組件

image.png

新增觸發(fā)器讶坯、填寫收件人、發(fā)送內(nèi)容岗屏、主題

1593505168477-8874684336c2f92a.png

八辆琅、構(gòu)建腳本

主要涉及到的 api

  • build 并導(dǎo)出 xcarchive — — xcodebuild -workspace xxx.xcworkspace -destination 'generic/platform=iOS' -scheme xxxx -configuration xxxx -archivePath xxxx.xcarchive archive build -allowProvisioningUpdates

  • xcarchive 導(dǎo) ipa — — xcodebuild -exportArchive -archivePath xxxx.xcarchive -exportOptionsPlist xxxx.plist -exportPath xxxx

plist 文件主要為以下內(nèi)容,填入 bundle_id担汤、profile_name涎跨、method(打包方法)

<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 <plist version="1.0">
   <dict>
    <key>provisioningProfiles</key>
    <dict>
    <key>${BUNDLE_ID}</key>
    <string>${PROFILE_NAME}</string>
    </dict>
    <key>method</key>
    <string>${METHOD}</string>
   </dict>
 </plist>
  • ipa 校驗(yàn) — — xcrun altool --validate-app -f xxxx.ipa -t ios --apiKey xxxx --apiIssuer xxxx --verbose
  • ipa 上傳 — — xcrun altool --upload-app -f xxxx.ipa -t ios --apiKey xxxx -apiIssuer xxxx --verbose
  • 登陸 fir — — fir login xxxx
  • 上傳 ipa 到 fir — — fir publish xxxx.ipa -c xxxx

Jenkins 已有可用的環(huán)境變量

前往 [JENKINS_URL]/env-vars.html/ 網(wǎng)頁查看

  • BRANCH_NAME — — 對于多分支項(xiàng)目,這將被設(shè)置為正在構(gòu)建的分支的名稱崭歧,例如,如果您希望從master部署到生產(chǎn)環(huán)境而不是從feature分支部署撞牢;如果對應(yīng)某種更改請求率碾,則該名稱通常是任意的(請參閱下面的CHANGE_ID和CHANGE_TARGET);

  • CHANGE_ID — — 對于與某種更改請求相對應(yīng)的多分支項(xiàng)目屋彪,這將被設(shè)置為更改ID所宰,例如拉取請求編號(如果支持);其他未設(shè)置;

  • CHANGE_URL — — 對于與某種更改請求相對應(yīng)的多分支項(xiàng)目畜挥,這將被設(shè)置為更改URL(如果支持)仔粥;其他未設(shè)置;

  • CHANGE_TITLE — — 對于與某種更改請求相對應(yīng)的多分支項(xiàng)目,這將被設(shè)置為更改的標(biāo)題(如果支持);其他未設(shè)置躯泰;

  • CHANGE_AUTHOR — — 對于與某種更改請求相對應(yīng)的多分支項(xiàng)目谭羔,這將被設(shè)置為建議更改的作者的用戶名(如果支持);其他未設(shè)置;

  • CHANGE_AUTHOR_DISPLAY_NAME — — 對于與某種更改請求相對應(yīng)的多分支項(xiàng)目麦向,這將被設(shè)置為建議更改的作者的人名(如果支持);其他未設(shè)置瘟裸;

  • CHANGE_AUTHOR_EMAIL — — 對于與某種更改請求相對應(yīng)的多分支項(xiàng)目,這將被設(shè)置為建議更改的作者的Email地址(如果支持);其他未設(shè)置诵竭;

  • CHANGE_TARGET — — 對于與某種更改請求相對應(yīng)的多分支項(xiàng)目话告,這將被設(shè)置為合并到的目標(biāo)或者基礎(chǔ)分支(如果支持);其他未設(shè)置;

  • BUILD_NUMBER — — 當(dāng)前構(gòu)建的編號卵慰,例如“4674”等

  • BUILD_ID — — 當(dāng)前構(gòu)建的版本ID沙郭,與構(gòu)建的BUILD_NUMBER相同

  • BUILD_DISPLAY_NAME — — 當(dāng)前版本的顯示名稱,默認(rèn)為“# 4674”裳朋,即BUILD_NUMBER病线。

  • JOB_NAME — — 即此版本的項(xiàng)目名稱,例如“foo”或“foo / bar”再扭。

  • JOB_BASE_NAME — — 此構(gòu)建的項(xiàng)目的短名稱剝離文件夾路徑氧苍,例如“bar / foo”的“foo”。

  • BUILD_TAG — — {BUILD_NUMBER}”的字符串泛范。 JOB_NAME中的所有正斜杠(/)都用破折號( - )替換让虐。方便地放入資源文件,jar文件等罢荡,以便于識別赡突。

  • EXECUTOR_NUMBER — — 唯一編號,用于標(biāo)識執(zhí)行此構(gòu)建的當(dāng)前執(zhí)行程序(在同一臺計(jì)算機(jī)的執(zhí)行程序中)区赵。這是您在“構(gòu)建執(zhí)行程序狀態(tài)”中看到的數(shù)字惭缰,但數(shù)字從0開始,而不是從1開始笼才。

  • NODE_NAME — — 如果構(gòu)建在代理上漱受,則代理的名稱; 如果在主版本上運(yùn)行,則為“MASTER”骡送;

  • NODE_LABELS — — 節(jié)點(diǎn)分配的空白分隔的標(biāo)簽列表昂羡。

  • WORKSPACE — — 作為工作空間分配給構(gòu)建的目錄的絕對路徑。

  • JENKINS_HOME — — Jenkins用于存儲數(shù)據(jù)的主節(jié)點(diǎn)上分配的目錄的絕對路徑摔踱。

  • JENKINS_URL — — Jenkins的完整URL虐先,如http:// server:port / jenkins /(注意:僅在系統(tǒng)配置中設(shè)置Jenkins URL時(shí)可用)

  • BUILD_URL — — 此版本的完整URL,例如http:// server:port / jenkins / job / foo / 15 /(必須設(shè)置Jenkins URL)

  • JOB_URL — — 該作業(yè)的完整URL派敷,例如http:// server:port / jenkins / job / foo /(必須設(shè)置Jenkins URL)

  • GIT_COMMIT — — The commit hash being checked out.

  • GIT_PREVIOUS_COMMIT — — The hash of the commit last built on this branch, if any.

  • GIT_PREVIOUS_SUCCESSFUL_COMMIT — — The hash of the commit last successfully built on this branch, if any.

  • GIT_BRANCH — — 遠(yuǎn)程分支名稱蛹批,如果有的話撰洗。

  • GIT_LOCAL_BRANCH — — 本地分支名稱,如果有的話腐芍。

  • GIT_URL — — 遠(yuǎn)程git倉庫的URL差导。如果有多個(gè),將會是GIT_URL_1甸赃,GIT_URL_2等柿汛。

  • GIT_COMMITTER_NAME — — 配置的Git提交者名稱(如果有的話)。

  • GIT_AUTHOR_NAME — — 配置的Git作者姓名(如果有的話)埠对。

  • GIT_COMMITTER_EMAIL — — 配置的Git提交者電子郵件(如果有的話)络断。

  • GIT_AUTHOR_EMAIL — — 已配置的Git作者電子郵件(如果有)。

  • SVN_REVISION — — 當(dāng)前工作區(qū)的Subversion版本號项玛,例如“12345”

  • SVN_URL — — 當(dāng)前工作區(qū)的Subversion版本號貌笨,例如“12345”

Keychains and Provisioning Profiles Management

Step 1

Find Keychain 并上傳到 后臺 鑰匙串有

  • 登錄(login.keychain)
    前往 /用戶/${User}/資源庫/Keychains/ 該路徑下只有 login.keychain-db,在網(wǎng)上找了其他文章襟沮,說是復(fù)制 login.keychain-db 修改名字為 login.keychain 并上傳
  • 系統(tǒng) (system.chain)
    存放的路徑 /Library/Keychains/System.keychain

Step 2:

打開「鑰匙串」 App锥惋,并點(diǎn)擊上傳對應(yīng)的 keychain,找到對應(yīng)的證書开伏,復(fù)制名字后粘貼到 Code Signing identify

使用 login.keychain 之后膀跌,復(fù)制 Code Signing identify 之后無法在項(xiàng)目中選擇,后面將證書復(fù)制到 「系統(tǒng)」中固灵,并上傳 system.keychain捅伤,將證書名字復(fù)制到 system.keychain ??,之后解決了問題

Provisioning Profile

目前還未嘗試使用 Jenkins 的 Provisioning Profile 去構(gòu)建項(xiàng)目巫玻,只是添加 Profile Name 在命令行里面構(gòu)建

Mac 存放的路徑在 /用戶/${User}/Library/MobileDevice/Provisioning Profiles

由于 Provisioning Profile 均以 ${UUID}.mobileprovision 很難辨別我們需要的 profile 是哪個(gè)丛忆,建議從 AppDevelop 后臺直接下載我們需要的 profile,然后直接上傳到 jenkins 后臺

本地服務(wù)器映射到外網(wǎng)

默認(rèn)端口號 8080仍秤,運(yùn)行 Jenkins 可指定端口號 jenkins-lts --httpPort=8080

  • 前往 ngrok 下載可執(zhí)行文件 exec 官網(wǎng)

  • 前往 ngrok 下載所在路徑熄诡,執(zhí)行 ./ngrok http localhost:80(也可直接將 exec 文件放在 /usr/local/bin 下然后直接 ngrok http localhost:80

    image.png

  • 執(zhí)行結(jié)果 Forwording 那一行的地址就可以供外部訪問

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市诗力,隨后出現(xiàn)的幾起案子凰浮,更是在濱河造成了極大的恐慌,老刑警劉巖苇本,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件导坟,死亡現(xiàn)場離奇詭異,居然都是意外死亡圈澈,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門尘惧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來康栈,“玉大人,你說我怎么就攤上這事∩睹矗” “怎么了登舞?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長悬荣。 經(jīng)常有香客問我菠秒,道長,這世上最難降的妖魔是什么氯迂? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任践叠,我火速辦了婚禮,結(jié)果婚禮上嚼蚀,老公的妹妹穿的比我還像新娘禁灼。我一直安慰自己,他們只是感情好轿曙,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布弄捕。 她就那樣靜靜地躺著,像睡著了一般导帝。 火紅的嫁衣襯著肌膚如雪守谓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天您单,我揣著相機(jī)與錄音斋荞,去河邊找鬼。 笑死睹限,一個(gè)胖子當(dāng)著我的面吹牛譬猫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播羡疗,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼染服,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了叨恨?” 一聲冷哼從身側(cè)響起柳刮,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎痒钝,沒想到半個(gè)月后秉颗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡送矩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年蚕甥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片栋荸。...
    茶點(diǎn)故事閱讀 40,096評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡菇怀,死狀恐怖凭舶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情爱沟,我是刑警寧澤帅霜,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站呼伸,受9級特大地震影響身冀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜括享,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一搂根、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧奶浦,春花似錦兄墅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽成洗。三九已至五督,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瓶殃,已是汗流浹背遥椿。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工家浇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人舔株。 一個(gè)月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像咕缎,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子晒杈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評論 2 355