Gitlab-Ci
配置Xcode
Xcode唯一需要配置的就是要將你運行的scheme
設(shè)置成Shared
狰腌。
- 打開Xcode項目
- 選擇Product > Scheme > Manage Schemes
- 將對應(yīng)的scheme勾選上Shared
安裝 配置 GitLab Runner
下載runner到本地
sudo curl --output /usr/local/bin/gitlab-ci-multi-runner https://gitlab-ci-multi-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-ci-multi-runner-darwin-amd64
//修改目錄權(quán)限
sudo chmod +x /usr/local/bin/gitlab-ci-multi-runner
這樣就完成了Runner的安裝除破,接下來要為工程注冊一個Runner,本地注冊Runner需要GitLab項目的CI地址和Token琼腔,打開到GitLab瑰枫,進(jìn)入對應(yīng)項目選擇 Setting-Runners ,
點擊Runners
如下圖所示丹莲,我們可以看到提示光坝。
知道 URL 和 Token 之后就可以就可以注冊Runner了
gitlab-ci-multi-runner register
WARNING: Running in user-mode.
WARNING: The user-mode requires you to manually start builds processing:
WARNING: $ gitlab-runner run
WARNING: Use sudo for system-mode:
WARNING: $ sudo gitlab-runner...
//輸入之前的URL
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/ci):
https://xxxx.com/ci
//輸入token
Please enter the gitlab-ci token for this runner:
<CI runner token from Project > Settings > Runner>
//描述,這個隨意了甥材,一般用默認(rèn)的就好
Please enter the gitlab-ci description for this runner:
[Your-Mac\'s-Name.local]:
//runner的tag盯另,這個是用于執(zhí)行腳本時指定runner用的,所以最好起一個比較容易區(qū)分的
Please enter the gitlab-ci tags for this runner (comma separated):
test_machine
Registering runner... succeeded runner=724a60b5
//runner的執(zhí)行器土铺,因為Xcode項目需要用xcodebuild來執(zhí)行,所以選shell
Please enter the executor: virtualbox, ssh, shell, parallels, docker, docker-ssh:
shell
Runner registered successfully. Feel free to start it, but if it's running
already the config should be automatically reloaded!
這時候再刷新GitLab項目的 Runner 界面就會看到一個 Active Runner 了
確認(rèn)好了之后可以啟動 Runner 了究恤。
cd ~
gitlab-ci-multi-runner install
gitlab-ci-multi-runner start
編寫 yml 配置文件
stages:
- build
- archive
build_project:
stage : build
script :
- xctool -workspace XXX.xcworkspace -scheme parent clean
- xctool -workspace XXX.xcworkspace -scheme parent -sdk iphonesimulator9.2 -destination name="iPhone 6" test
archive_project:
stage: archive
script:
- xctool -workspace XXX.xcworkspace -scheme parent -configuration AppStoreDistribution archive -archivePath build/parent
- xcodebuild -exportArchive -archivePath build/parent.xcarchive -exportOptionsPlist exportOptions.plist -exportPath build/parent
- fir p $PWD/build/parent/parent.ipa -T 8a7cf204f8c40f39a6ba41db8b44929d
only:
- master
在項目根目錄下配置
.gitlab-ci.yml
文件
- 上面的配置文件中定義了兩個
stages
部宿。
- 用于描述兩個階段,一般有
build理张,test雾叭,archive落蝙,deploy
等织狐。 -
stage
可以在所有job中使用,上面的build_project
和archive_project
就是job移迫,每個job 分別對應(yīng)執(zhí)行哪個stage
厨埋。 - script 中就是你要執(zhí)行的腳本荡陷。
- 如果你的項目中沒有使用
xcworkspace
亲善,就把相應(yīng)的-workspace XXX.xcworkspace
改為-xcodeproject XXX.xcodeproject
逗柴。 - 配置文件中用到了xctool 工具,和xcodebuild 相似戏溺,具體安裝及使用 xctool
-
archive
過程將項目export
出 ipa 文件 并上傳至 fir 平臺。fir 工具可以上傳 ipa 文價耕拷,具體使用 fir 使用 -
exportOptions.plist
是放在根目錄下的配置打包參數(shù)的骚烧,可以參考xcodebuild --help
-
only - master
是指只有提交master 分支才有執(zhí)行build_project job
。
fir 安裝
gem install fir-cli
上傳至fir
fir p path/to/xxx.ipa -T #API TOKEN#
如果一切成功的話既峡,就會有如下 passed 標(biāo)志 运敢。
小結(jié)传惠,在測試卦方,打包過程中可能會出現(xiàn)許多奇怪的錯誤愿汰,可以自己google或者詢問我。
Fastlane
上述是使用xctool 打包并上傳fir 摇予,測試人員可以去fir 的網(wǎng)站掃碼下載侧戴。這里介紹另一種方式。這里安裝什么的我就不贅述了积仗,官方都有寂曹,就將個人是怎么使用的回右。
整個過程還是遇到很多問題的翔烁,整個過程不斷google,個人從ruby環(huán)境2.0 切換到2.3 侣背,最后在2.2.3 上才ok。
Fastlane 簡化了測試弧腥,打包鸟赫,上傳testFlight 功能消别,其實包含了上述 xctool 的所有功能寻狂。Fastlane 每個過程都用一個lane 標(biāo)示。
自動測試:
lane :test do
scan({
workspace:"ParentAndSchool.xcworkspace",
scheme:"parent",
device:"iPhone 6s",
clean: true
})
end
看一下scan 中的參數(shù)缀壤,workspace
表示項目的命名空間塘慕,如果你用cocoapods
集成是有這個文件的图呢,如果沒有使用xcworkspace
,這里參數(shù)就改為project
骗随,對應(yīng)的就是 xxx.xcodeproj
文件。
打包
lane :archive do
increment_build_number(
xcodeproj: "./jyb_ios_parent/parent/frameworks/runtime-src/proj.ios_mac/parent.xcodeproj"
)
gym(
workspace: "ParentAndSchool.xcworkspace",
scheme: "parent",
output_directory:"build",
output_name: "jyb.ipa"
)
end
archive
這個lane
我做了兩個action
指蚜,分別是increment_build_number
和 gym
摊鸡。
-
increment_build_number
這個動作是增加build
號柱宦,我們知道,上傳appstore
時build
號要增加掸刊,這個需要xcode
中一些配置忧侧,可以看這里,如果你沒配置好,fastlane 跑腳本的時候不會直接掛掉蚓炬,只會有提示, 到時候上傳時就會失敗经宏。 -
gym
這個action
用來打包烁兰,參數(shù)就不用多說了沪斟。
上傳testFlight
lane :testFlight do
#for firwall
ENV["DELIVER_ITMSTRANSPORTER_ADDITIONAL_UPLOAD_PARAMETERS"] = "-t DAV"
pilot(
ipa:"build/jyb.ipa",
username: "*******@corp-ci.com",
skip_waiting_for_build_processing: true
)
end
pilot
是可以將包自動發(fā)布到itunes testFlight
后臺的暇矫,一開始怎么也傳不上去李根,好像是網(wǎng)絡(luò)之類的問題,后來才發(fā)現(xiàn)需要加上下面這句話史翘。(官方文檔還是要好好讀的)
ENV["DELIVER_ITMSTRANSPORTER_ADDITIONAL_UPLOAD_PARAMETERS"] = "-t DAV"
具體某個action 的參數(shù)及使用冀续,可以通過命令 fastlane action ***
,例如(fastlane action gym)
查看洪唐。
另外在搭配 gitlab-ci
的過程中凭需,發(fā)現(xiàn)每次archive
出來的包肝匆,到上傳的時候總是說ipa文件找不到。因為gitlab
每個job
之后都會還原倉庫的狀態(tài)枯怖,就是archive
這個job
結(jié)束后度硝,由于ipa 文佳不屬于git倉庫,被刪了蕊程。解決辦法如下藻茂,修改.gitlab-ci.yml
:
archive_parent_project:
stage : archive
script :
- fastlane match appstore
- fastlane archive
only:
- master
cache:
paths :
- build/
- build/jyb.ipa
key: "build"
untracked: true
upload_testFlight:
cache:
paths :
- build/
- build/jyb.ipa
key: "build"
untracked: true
stage : testFlight
script :
- fastlane testFlight
only:
- master
添加緩存文件优俘,指定每個job
結(jié)束后不刪除build
布目錄下的文件肖油。
fastlane match appstore
是用match 給app 配置證書,具體使用請看 Match