版本記錄
版本號 | 時間 |
---|---|
V1.0 | 2019.04.30 星期二 |
前言
我們在做App開發(fā)的時候导狡,開發(fā)人員開發(fā)完成以后就要交給QA進行測試了筹燕,有幾種方式,一種就是將QA的測試機加到賬號里面的Device里面密任,這個有個數(shù)限制(每種硬件類型不能超過100臺,即使刪除設備也不會重置)偷俭,然后利用三方平臺比如說蒲公英進行分發(fā)浪讳,還有一種方法就是使用TestFlight進行測試,這個專題就主要說一下App分發(fā)測試相關的內容涌萤。感興趣的看上面幾篇驻债。
1. App的分發(fā)測試(一) —— 淺談蒲公英平臺分發(fā)測試的使用(一)
2. App的分發(fā)測試(二) —— TestFlight集成和分發(fā)測試(一)
3. App的分發(fā)測試(三) —— fastlane自動化打包并上傳(一)
4. App的分發(fā)測試(四) —— fastlane自動化打包(一)
5. App的分發(fā)測試(五) —— GitHub, Fastlane & Jenkins集成(一)
Doing CI With Jenkins
Travis CI
是一種即時感覺良好的體驗乳规,為什么你會看到其他地方? 好吧合呐,也許是因為您需要私有存儲庫的CI
- 請查看Travis CI Plans & Pricing暮的。 或者,如果您的團隊或公司已經維護或租用服務器淌实,那么安裝Jenkins
可能更具成本效益冻辩。
1. Installing Jenkins
Jenkins Docker
圖像存在,但在Docker
容器中運行的Jenkins
將無法運行xcodebuild
拆祈,因此您將直接在Mac
上安裝Jenkins
恨闪。 訪問the Jenkins download page并單擊Mac OS X
,下載安裝程序放坏。
安裝程序下載時咙咽,請檢查是否安裝了適當?shù)?code>Java。 您需要Java 1.8
才能安裝Jenkins
淤年。 Mojave
沒有預安裝Java
钧敞,但如果您不確定,請輸入此命令以查看您是否已擁有它:
java -version
如果輸出不包含java version “1.8 …”
麸粮,則需要安裝它溉苛。 雖然您可以從Oracle
網站下載它,但使用Homebrew(一種流行的macOS
包管理器)安裝它會更簡單弄诲。 如果您尚未安裝Homebrew
愚战,請在終端中輸入以下命令:
/usr/bin/ruby -e \
"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
如果有提示,請輸入密碼齐遵。 完成后寂玲,您應該看到Installation Successful
。
要安裝Java
梗摇,請在終端中輸入以下命令:
brew cask install homebrew/cask-versions/java8
再次拓哟,如果出現(xiàn)提示,請輸入密碼留美。
安裝Java 1.8
后,運行Jenkins
安裝程序伸刃,該安裝程序現(xiàn)在應該已經完成下載谎砾。 安裝程序完成后,應該在瀏覽器中打開localhost:8080
- 它需要一個密碼:
查找初始管理員密碼(initial admin password)
的最簡單方法是查看日志 - 輸入以下命令:
cat /var/log/jenkins/jenkins.log
此日志中有很多內容捧颅,但您只需從底部向上滾動一下即可查看兩行三行星號之間的密碼:
*************************************************************
*************************************************************
*************************************************************
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:
<your initial admin password>
This may also be found at: /Users/Shared/Jenkins/Home/secrets/initialAdminPassword
*************************************************************
*************************************************************
*************************************************************
復制密碼并將其粘貼到管理員密碼(Administrator password)
輸入框中景图。 單擊Continue
以加載Customize Jenkins
頁面:
注意:如果您獲得的頁面指示您的代理服務器配置不正確,而不是自定義
Jenkins
頁面碉哑,您就會遇到Jenkins
組織的Web
證書問題挚币。 要解決此問題亮蒋,請在終端中輸入以下命令:sudo nano /Users/Shared/Jenkins/Home/hudson.model.UpdateCenter.xml
這將在簡單的文本編輯器中打開違規(guī)配置文件。 找到
https
并將其更改為http
妆毕。 要退出編輯器并保存文件慎玖,請按Control-C
,然后按Y
笛粘,最后按Enter
鍵趁怔。 現(xiàn)在,在瀏覽器中刷新頁面薪前,您應該看到正確的頁面润努。
選擇Install suggested plugins
,然后去散步 - 這需要幾分鐘示括。
啊铺浇,你回來了! 現(xiàn)在創(chuàng)建您的管理員帳戶 - 為用戶名和密碼輸入admin
:
在Instance Configuration
頁面上垛膝,只需單擊Not now
:
在下一頁上鳍侣,單擊使用Jenkins
開始:
2. Your First Jenkins Build
接下來,您將看到一個歡迎頁面繁涂,提示您create new jobs
:
點擊該鏈接拱她,您需要登錄:
只需使用您的admin/admin
帳戶,然后選中Keep me signed in
扔罪。
在下一頁上秉沼,輸入Numero
作為項目名稱(item name)
,然后選擇Freestyle project
:
這是你的新項目頁面矿酵! 從側面菜單中選擇Configure
以真正開始唬复! 當然,如果Jenkins
沒有自動帶你進入配置頁面全肮!
項目配置頁面有幾個選項卡敞咧。 從第一個開始 - General
- 您需要做的就是檢查GitHub project
,然后將您的存儲庫URL粘貼到出現(xiàn)的Project url
字段中辜腺。 為簡單起見休建,請確保使用HTTPS
而不是對GitHub
的SSH
訪問。
接下來评疗,向下滾動或單擊Source Code Management
:選擇Git
并再次粘貼您的Repository URL
测砂。
注意:您不需要為本教程輸入
Credentials
,但是您可以提供這些憑據以授予Jenkins
對私有存儲庫的訪問權限百匆。 另外砌些,請注意要構建的分支(Branches to build)
部分 - 您不會在本教程中使用它,但它對您自己的項目很方便。
向下滾動構建觸發(fā)器(Build Triggers )
- 稍后您將返回此選項卡存璃。
下一節(jié)是構建環(huán)境(Build Environment)
:有時構建會繼續(xù)進行仑荐,即使在控制臺日志顯示已完成之后,因此纵东,請檢查Abort the build if it’s stuck
并選擇No Activity
作為超時策略(Time-out strategy)
粘招。 如果您想知道事情何時發(fā)生,還要檢查添加時間戳到控制臺輸出(Add timestamps to the Console Output)
篮迎。
最后男图,構建部分就是進行工作的一切! 在Add build step
步驟菜單中甜橱,選擇Execute shell
:
在出現(xiàn)的Command
字段中逊笆,粘貼此shell
命令:
xcodebuild -scheme Numero -configuration Debug build test \
-destination 'platform=iOS Simulator,name=iPhone 8'
單擊Save
按鈕返回項目頁面,然后從側邊菜單中選擇Build Now
:
在Build History
部分開始發(fā)生一些事情 - 你的第一個版本出現(xiàn)了岂傲! 將光標懸停在#1
上以顯示菜單按鈕难裆,然后從菜單中選擇Console Output
:
以下是我的控制臺日志中的一些亮點:
16:46:07 Test Suite 'ConverterTests' started at 2019-02-18 16:46:07.264
16:46:07 Test Case '-[NumeroTests.ConverterTests testConversionForOne]' started.
16:46:07 Test Case '-[NumeroTests.ConverterTests testConversionForOne]' passed (0.004 seconds).
...
16:46:07 Test session results and logs:
16:46:07 /Users/Shared/Jenkins/Library/Developer/Xcode/DerivedData/Numero-bhnpnysdndqcwobwddhndhxectdi/Logs/Test/Run-Numero-2019.02.18_16-45-19-+1100.xcresult
...
16:46:07 ** TEST SUCCEEDED **
16:46:07
16:46:14 Testing started on 'iPhone 8'
16:46:16 Finished: SUCCESS
確實成功!
3. Notifying Jenkins With GitHub Webhook
太棒了镊掖,Jenkins
拉了你的項目乃戈,建立它并運行測試。 但你必須告訴它Build Now
- 這不是很自動化亩进。 一旦你按照Travis CI
的方式推送GitHub
症虑,你就希望Jenkins
能夠拉動你的項目。 事實證明归薛,Travis CI
自動與GitHub做了一些事情谍憔,你現(xiàn)在必須手動完成。
您需要創(chuàng)建一個GitHub webhook
主籍,以便在您推送新提交時通知Jenkins
服務器习贫。 webhook
是一種GitHub
機制,用于在GitHub
存儲庫中發(fā)生特定事件時將通知發(fā)布到webhook的URL
- 例如千元,每當您推送提交時苫昌。
首先,設置Jenkins
項目以期待來自GitHub的通知:使用Numero
菜單返回到Configure
:
選擇Build Triggers
選項卡并選中GitHub hook trigger for GITScm polling
:
滾動到底部幸海,然后按Save
祟身。
現(xiàn)在轉到GitHub頁面設置webhook
。
如果您想在存儲庫中禁用Travis-CI
以避免在兩個位置都運行構建物独,則需要從存儲庫中卸載Travis
袜硫。 這是可選的;看下面以顯示說明议纯。 或者父款,讓它保持運行并跳過為Jenkins
創(chuàng)建webhook
溢谤。
在
Numero
存儲庫頁面上瞻凤,單擊Settings
憨攒,選擇Integrations & Services
,然后單擊Travis CI
行中的Configure
阀参。滾動到底部肝集,然后單擊
Uninstall
。 單擊OK
蛛壳,GitHub將安排工作以刪除Travis
杏瞻。
要為Jenkins
服務器添加webhook
,請轉到Numero
存儲庫頁面衙荐,然后單擊Settings
捞挥。 從側邊菜單中選擇Webhooks
,然后單擊Add webhook
:
您需要的第一件事是Payload URL
- Jenkins
服務器的URL忧吟。 但是砌函,除非您使用適當?shù)耐獠縐RL設置Jenkins
,否則返回Instance Configuration
步驟溜族,您將在使用本教程時使用localhost
讹俊。 但GitHub
需要一個真實的URL來發(fā)送通知 - 該怎么辦?
ngrok可以幫助你煌抒! 這是一個免費的應用程序仍劈,它使用安全隧道將localhost
暴露給互聯(lián)網。GitHub’s webhooks tutorial使用它寡壮,所以一定是OK贩疙。 繼續(xù)download ngrok for Mac OS X:
在終端,cd
到ngrok
所在的位置诬像,然后運行以下命令:
./ngrok http 8080
您的輸出看起來類似于:
ngrok by @inconshreveable (Ctrl+C to quit)
Session Status online
Session Expires 7 hours, 59 minutes
Version 2.2.8
Region United States (us)
Web Interface http://127.0.0.1:4040
Forwarding http://4c94cdf1.ngrok.io -> localhost:8080
Forwarding https://4c94cdf1.ngrok.io -> localhost:8080
Connections ttl opn rt1 rt5 p50 p90
0 0 0.00 0.00 0.00 0.00
復制你的轉發(fā)網址(Forwarding URL)
- 我的是http://4c94cdf1.ngrok.io
屋群,接下來將近8個小時。
返回GitHub Add webhook
頁面坏挠,將此URL粘貼到Payload URL
字段中芍躏,并將/ github-webhook /
添加到URL的末尾。 這是Jenkins
服務器上的端點降狠,它響應來自GitHub的推送:
注意:默認事件設置是
Just the push event
对竣。 您可以隨時更改訂閱的事件列表。 可用事件的完整列表位于Webhooks documentation中榜配。
單擊Add Webhook
否纬。 GitHub向URL發(fā)送測試POST
請求,該請求以302 Found
響應蛋褥,這意味著URL已被重定向临燃。 不要擔心GitHub會將此標記為失敗。
現(xiàn)在,在ConverterTests.swift
中將這個新的單元測試添加到Numero
膜廊,所以你可以推送到GitHub
乏沸,它會通知你的Jenkins
服務器:
func testConversionForTwo() {
let result = converter.convert(2)
XCTAssertEqual(result, "II", "Conversion for 2 is incorrect")
}
注意:我們回到了
TDD
的紅色步驟,所以這個測試將失敗 -convert(_:)
返回“I”
爪瓜,而不是“II”
蹬跃。
提交并推送到GitHub,然后檢查你的Jenkins
頁面 - Numero
的菜單現(xiàn)在有一個項目GitHub Hook Log
铆铆!
選擇GitHub Hook Log
:來自您的ngrok URL
的事件導致Jenkins
輪詢您的GitHub存儲庫以查找更改蝶缀,它發(fā)現(xiàn):
你對GitHub
的推動觸發(fā)了構建#2
- 它的亮度為紅色,因為單元測試失敗了薄货。 使用彈出菜單查看構建#2
的Console Output
:
完全向下滾動以查看測試結果:
13:48:12 Test Suite 'All tests' started at 2019-02-19 13:48:12.227
13:48:12 Test Suite 'NumeroTests.xctest' started at 2019-02-19 13:48:12.228
13:48:12 Test Suite 'ConverterTests' started at 2019-02-19 13:48:12.228
13:48:12 Test Case '-[NumeroTests.ConverterTests testConversionForOne]' started.
13:48:12 Test Case '-[NumeroTests.ConverterTests testConversionForOne]' passed (0.002 seconds).
13:48:12 Test Case '-[NumeroTests.ConverterTests testConversionForTwo]' started.
13:48:12 /Users/Shared/Jenkins/Home/workspace/Numero/NumeroTests/ConverterTests.swift:32: error: -[NumeroTests.ConverterTests testConversionForTwo] : XCTAssertEqual failed: ("I") is not equal to ("II") - Conversion for 2 is incorrect
...
13:48:15 Failing tests:
13:48:15 ConverterTests.testConversionForTwo()
13:48:15 ** TEST FAILED **
13:48:15
13:48:21 Testing started on 'iPhone 8'
13:48:21 Build step 'Execute shell' marked build as failure
13:48:21 Finished: FAILURE
祝賀你自己 - 你已經建立了從GitHub
到Jenkins
的溝通翁都! Travis CI
為您自動神奇地做了些什么。 好吧谅猾,Travis CI
有一個固定的URL荐吵,因此更容易 - 不需要ngrok
。
Travis CI
還有另一個有用的默認行為:它發(fā)送電子郵件通知您構建結果赊瞬。 您可以設置Jenkins
來執(zhí)行此操作先煎,但您必須做一些工作。
4. Emailing From Jenkins
首先巧涧,您需要一個SMTP(簡單郵件傳輸協(xié)議)服務器(SMTP (Simple Mail Transfer Protocol) server)
悄但。 您可以使用Postfix
配置一個漆改,但本教程使用smtp.gmail.com
- 您需要一個Google
帳戶才能跟進。
這一次,您必須配置項目和Jenkins
系統(tǒng)栗恩。
Configuring Your Project
從項目開始:使用Numero
菜單返回Configure
蕴纳,然后選擇Post-build Actions
選項卡爵卒。
從Add post-build action
菜單中锌仅,選擇Editable Email Notification
:
在顯示的表單中,您不必編輯任何內容瞎抛,但請注意項目收件人列表的值為$ DEFAULT_RECIPIENTS
- 您需要確保在找到該字段時編輯該字段艺演。
在此表單下方,單擊Advanced Settings…
以查看更多選項:默認觸發(fā)器是Failure – Any
桐臊,因此您無需執(zhí)行任何操作來阻止成功發(fā)送電子郵件胎撤。
要復制Travis CI
的默認行為,請從Add Trigger
菜單中選擇Always
:
單擊Always
部分中的Advanced…
并將您的電子郵件地址添加到Recipient List
:
注意:這只是保險断凶,以確保收件人列表不為空伤提。
單擊Save
返回項目頁面。
Configuring Your Jenkins System
現(xiàn)在配置Jenkins
系統(tǒng):使用Jenkins
菜單選擇Manage Jenkins ? Configure System
:
向下滾動到擴展電子郵件通知并安頓下來進行大量填寫表格认烁!
- 1) 對于
SMTP
服務器肿男,鍵入smtp.gmail.com
介汹,然后單擊Advanced…
。 - 2) 選中
Use SMTP Authentication
舶沛,然后鍵入您的Google
用戶名和密碼痴昧。 - 3) 選中使用
SSL
。 - 4) 對于
SMTP
端口冠王,請鍵入465
。 - 5) 對于默認收件人
(Default Recipients)
(ahaI嘞狻)柱彻,請鍵入您的電子郵件地址。 - 6) 單擊
Apply
以保存您的條目餐胀,但請保留在此頁面上哟楷。
完全向下滾動到(普通舊的)E-mail Notification
,然后單擊Advanced…
:您的所有電子郵件設置應該已經在這里否灾;如果沒有卖擅,請再次輸入。
在底部墨技,選中Test configuration by sending test e-mail
惩阶,然后填寫您的電子郵件地址。
在單擊Test configuration
之前扣汪,還需要做一件事断楷。 由于Google
已加強安全性,請轉到Less secure app access并將開關彈至ON
:
現(xiàn)在返回Jenkins
并單擊Test configuration
崭别。 稍等一下冬筒,您應該看到“Email was successfully sent”
。 查看您的電子郵件茅主,找到:
注意:如果收到有關
Username and Password not accepted
的錯誤消息舞痰,請在兩個位置檢查SMTP驗證用戶名(SMTP Authentication User Name)
和密碼。 同時將安全應用程序訪問權限關閉然后打開诀姚,可能不止一次响牛。
Pushing to GitHub
現(xiàn)在編輯Converter.swift
中的代碼,使您的第二個單元測試通過赫段。 編輯convert(_ :)
方法娃善,使其返回一個String
,其中包含正確數(shù)量的“I”
字符:
func convert(_ number: Int) -> String {
return String(repeating: "I", count: number)
}
提交并推送到GitHub
瑞佩,然后觀察您的構建的控制臺日志 - 它應以“2 tests, with 0 failures”
結束聚磺,并將電子郵件發(fā)送到您的電子郵件地址:
20:54:28 Test Suite 'ConverterTests' passed at 2019-02-19 20:54:28.700.
20:54:28 Executed 2 tests, with 0 failures (0 unexpected) in 0.002 (0.003) seconds
20:54:28 Test Suite 'NumeroTests.xctest' passed at 2019-02-19 20:54:28.701.
20:54:28 Executed 2 tests, with 0 failures (0 unexpected) in 0.002 (0.003) seconds
20:54:28 Test Suite 'All tests' passed at 2019-02-19 20:54:28.701.
20:54:28 Executed 2 tests, with 0 failures (0 unexpected) in 0.002 (0.004) seconds
20:54:29
20:54:29
20:54:29 Test session results and logs:
20:54:29 /Users/Shared/Jenkins/Library/Developer/Xcode/DerivedData/Numero-bhnpnysdndqcwobwddhndhxectdi/Logs/Test/Run-Numero-2019.02.19_20-54-23-+1100.xcresult
20:54:29
20:54:29 2019-02-19 20:54:29.034 xcodebuild[49013:36278327] [MT] IDETestOperationsObserverDebug: 1.783 elapsed -- Testing started completed.
20:54:29 2019-02-19 20:54:29.034 xcodebuild[49013:36278327] [MT] IDETestOperationsObserverDebug: 0.000 sec, +0.000 sec -- start
20:54:29 2019-02-19 20:54:29.034 xcodebuild[49013:36278327] [MT] IDETestOperationsObserverDebug: 1.783 sec, +1.783 sec -- end
20:54:29 ** TEST SUCCEEDED **
20:54:29
20:54:29 Testing started on 'iPhone 8'
20:54:29 Email was triggered for: Always
20:54:29 Sending email for trigger: Always
20:54:29 Sending email to: audrey.tam@xxxxxxx
20:54:33 Finished: SUCCESS
還有電子郵件:
呼! 這比Travis CI
花費的時間要長一些炬丸,但你已經完成了基本的CI
工作流程瘫寝,推動了GitHub
觸發(fā)Jenkins
構建蜒蕾,觸發(fā)了電子郵件通知。 休息一下吧焕阿!
注意:請務必關閉
Gmail
帳戶中安全性較低的應用訪問權限(Less secure app access)
咪啡。
5. Using fastlane With Jenkins
要使用帶有Jenkins
的fastlane
,你需要在你的Mac上安裝它暮屡。輸入ruby -v
檢查你有Ruby 2.0
和xcode-select --install
以確保你有Xcode命令行 工具(CLT)(Xcode Command Line Tools (CLT))
撤摸,然后輸入此命令在/ usr / local / bin
中安裝fastlane
:
sudo gem install -n /usr/local/bin fastlane --verbose
安裝fastlane
時,在Jenkins
項目的Build?Command
字段中褒纲,將xcodebuild
命令替換為:
fastlane scan
安裝fastlane
后准夷,cd
到Numero
的根目錄,然后輸入以下命令:
fastlane init
當fastlane
詢問“What would you like to use fastlane for?”
時莺掠,請選擇4. Manual setup
衫嵌。 這只是將Gemfile
和fastlane
文件夾添加到您的項目中。 提交并推送到GitHub彻秆,開始下一個構建楔绞。
注意:如果Jenkins說它不知道
fastlane
的位置,請在Command
字段中指定完整路徑唇兑。 您可以在終端Terminal
找到完整路徑酒朵,使用哪個快速通道(which fastlane)
。
6. Cleaning Up
Jenkins
作為啟動守護程序運行扎附,因此它可以在您退出甚至終止進程后重新啟動耻讽。 要停止Jenkins,請在終端中運行此命令:
sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist
重啟Mac時帕棉,啟動守護程序會重新啟動针肥,只有當您嘗試在localhost:8080
上公開其他服務并發(fā)現(xiàn)它已在使用時才會發(fā)現(xiàn)! 要完全卸載Jenkins
香伴,請運行以下命令:
/Library/Application Support/Jenkins/Uninstall.command
檢查這是否已刪除Applications / Jenkins
和/ Users / Shared / Jenkins
慰枕,以及System Preferences ? Users & Groups
中的未命名標準用戶 - 當您重新啟動Mac時,您不應該看到以Jenkins
身份登錄的選項即纲。
在本教程中具帮,您開始使用Travis CI
和Jenkins
。 Travis CI
是開始使用CI
的超級簡單途徑低斋,所以不再有任何借口蜂厅! Jenkins
需要更多的努力來建立,但私人存儲庫沒有額外的成本膊畴,而且它比Travis CI
更靈活掘猿。
以下是Travis CI,Jenkins
和fastlane
的一些有用的參考資料:
- Travis CI documentation
- Travis CI Core Concepts for Beginners
- Jenkins User Documentation
- fastlane documentation
還有許多其他CI
服務或產品唇跨。 fastlane
文檔包括與fastlane
集成的簡短列表short list稠通。
除了CI
就是CD
:Continuous Delivery
衬衬,您可以自動執(zhí)行發(fā)布流程,以便隨時準備將更改部署到用戶改橘,以及持續(xù)部署(Continuous Delivery
)滋尉,您可以自動部署每個更改。您可以使用Jenkins
管道和fastlane
的組合轉移到CD
飞主∈ㄏВ或者您可能會發(fā)現(xiàn)Travis CI
的部署(deploy)
命令已足夠 - 例如,自動部署到Heroku( deploy to Heroku)碌识。
后記
本篇主要講述了GitHub, Fastlane & Jenkins集成碾篡,感興趣的給個贊或者關注~~~