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ù)按鈕
6. 安裝 Jenkins 插件
7. 創(chuàng)建 Jenkins 賬號
8. 歡迎來到 Jenkins!
二、安裝插件
前往 Manage Jenkins -> Manage Plugins 進(jìn)行插件管理
- 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摘投,添加步驟如下:
選擇 SSH Username with private key 類型
配置信息主要填一下幾個(gè)
- Username(用戶名)
- Private Key(私鑰)
- Passphrase(密碼)
我們添加完 Credentials 之后可以在 Jenkins -> Credemtials(憑證)-> System -> Global credentials(unrestricted)編輯配置
四煮寡、簡單執(zhí)行一個(gè)項(xiàng)目
前往 Jenkins -> 新建 Item
新建完一個(gè)項(xiàng)目后,可以根據(jù)【SSH 配置】犀呼,然后配置完 Repository URL 和 Credentials 進(jìn)行保存
點(diǎn)擊 Build Now 可以開始第一次嘗試構(gòu)建項(xiàng)目
在構(gòu)建歷史中幸撕,我們可以看到構(gòu)建進(jìn)度,并且我們可以關(guān)閉此次構(gòu)建圆凰,點(diǎn)擊構(gòu)建序列號可以進(jìn)去查看構(gòu)建詳情
控制臺可以查看詳細(xì)的報(bào)錯(cuò)信息杈帐,有利于我們定位問題
五、構(gòu)建前的參數(shù)選擇及填寫
勾選 General 的 This project is parameterized
,然后開始添加參數(shù)
在下面例子挑童,使用的是 Choice Paramenter(可選參數(shù)), 定義了 ENVIRONMENT
變量累铅,之后可以使用 ${ENVIRONMENT}
來引用該變量
之后在 Build 之前就可以選擇參數(shù) ENVIRONMENT
的變量值
六、Cocoapods
對于使用了 Cocoapods 的項(xiàng)目站叼,但是沒有上傳 Pods 文件夾到倉庫中娃兽,需要在構(gòu)建項(xiàng)目前進(jìn)行 pod install
- 這里用到
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 -> 郵件通知
- 填寫和勾選客蹋,以下幾個(gè)選項(xiàng) — — 填寫 SMTP 服務(wù)器 / 用戶默認(rèn)郵件后綴 / 使用 SMTP 認(rèn)證 / 用戶名 / 密碼 / 使用 SSL 認(rèn)證 / SMTP 端口
- 發(fā)送郵件測試 — — 勾選通過發(fā)送測試郵件測試配置,然后填寫 Test e-mail recipient(接收者郵件), 點(diǎn)擊 Test configuration 測試郵件功能
安裝 Email Extension Plugin 插件
Q: 在構(gòu)建項(xiàng)目中添加發(fā)送郵件的任務(wù) ?
安裝完插件之后孽江,在 Jenkins -> Configure System
添加構(gòu)建后發(fā)送郵郵件組件
新增觸發(fā)器讶坯、填寫收件人、發(fā)送內(nèi)容岗屏、主題
八辆琅、構(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 那一行的地址就可以供外部訪問