iOS 持續(xù)集成之 Gitlab-Ci + FastLane

Gitlab-Ci

配置Xcode

Xcode唯一需要配置的就是要將你運行的scheme設(shè)置成Shared狰腌。

  • 打開Xcode項目
  • 選擇Product > Scheme > Manage Schemes
  • 將對應(yīng)的scheme勾選上Shared
selectShare.png

安裝 配置 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

clickRunner.png

如下圖所示丹莲,我們可以看到提示光坝。


configRunner.png

知道 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_projectarchive_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# 
apitoken.png

如果一切成功的話既峡,就會有如下 passed 標(biāo)志 运敢。

result.png

小結(jié)传惠,在測試卦方,打包過程中可能會出現(xiàn)許多奇怪的錯誤愿汰,可以自己google或者詢問我。

demo 地址

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_numbergym 摊鸡。

  • increment_build_number這個動作是增加build號柱宦,我們知道,上傳appstorebuild號要增加掸刊,這個需要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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末视搏,一起剝皮案震驚了整個濱河市浑娜,隨后出現(xiàn)的幾起案子筋遭,更是在濱河造成了極大的恐慌暴拄,老刑警劉巖乖篷,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異撕蔼,居然都是意外死亡鲸沮,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門楣号,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人革娄,你說我怎么就攤上這事束析≡笨埽” “怎么了蝶锋?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵扳缕,是天一觀的道長躯舔。 經(jīng)常有香客問我粥庄,道長,這世上最難降的妖魔是什么惜互? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮白嘁,結(jié)果婚禮上权薯,老公的妹妹穿的比我還像新娘睡扬。我一直安慰自己卖怜,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布蔼两。 她就那樣靜靜地躺著逞度,像睡著了一般。 火紅的嫁衣襯著肌膚如雪俊戳。 梳的紋絲不亂的頭發(fā)上抑胎,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天阿逃,我揣著相機與錄音恃锉,去河邊找鬼淡喜。 笑死诵闭,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的瘟芝。 我是一名探鬼主播褥琐,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼贸宏,長吁一口氣:“原來是場噩夢啊……” “哼磕洪!你這毒婦竟也來了吭练?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤析显,失蹤者是張志新(化名)和其女友劉穎鲫咽,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡分尸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年锦聊,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片箩绍。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡孔庭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出伶选,到底是詐尸還是另有隱情史飞,我是刑警寧澤构资,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布河绽,位于F島的核電站纹笼,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜兄猩,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一淹真、第九天 我趴在偏房一處隱蔽的房頂上張望梅屉。 院中可真熱鬧虐唠,春花似錦搓幌、人聲如沸处铛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至愿险,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背彻磁。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工磁浇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人友题。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓斗埂,卻偏偏與公主長得像漾稀,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容