基於 Xcode 9+,利用fastlane+jenkins持續整合iOS專案

微許時光發表於2018-01-02

前段時間寫了一篇關於"jenkins 持續整合 iOS專案"的文章,配置比較複雜.在更新到 Xcode 9以後,原來的配置方案不能用了.最近嘗試用 fastlane+jenkins,繼續實現持續整合. fastlane 是一個優秀的部署,釋出應用的開源專案(github地址). 推薦使用 fastlane, 放棄使用 jenkins 裡 Xcode-plugin 的原因: fastlane 多人維護,更新及時,部署簡單. Xcode-plugin反之.

1:安裝 fastlane:

官方版安裝詳細步驟 保證在 mac 上安裝了最新版的 Xcode. 在Ruby 2.0.0及以上版本環境下安裝:

sudo gem install fastlane -NV
複製程式碼

然後,在終端進入你專案的根目錄,執行以下程式碼:

fastlane init
複製程式碼

由於 fastlane 版本更新迅速,高版本不向前相容,推薦使用Gemfile,更新版本. 在終端執行命令,安裝builder:

sudo gem install bundler
複製程式碼

在你的專案根目錄下建立Gemfile檔案,檔案寫入以下內容:

source "https://rubygems.org"
gem "fastlane"
#如果使用 cocoapods管理專案依賴,增加下面的命令
#gem "cocoapods"
複製程式碼

建立完後,在持續整合時執行命令:

bundle update
#如果第一次執行,用 bundle install 代替
複製程式碼

接著編輯專案目錄下的./fastlane/Fastfile檔案內容(首先保證你的專案在 Xcode 中,已配置好證照和對應的描述檔案):

Fastfile.png

lane :beta do
    gym(scheme: "AppScheme”,
    #output_name 指打包完成後, 輸出ipa檔案的名字
	output_name: "APPName_Debug”,
    #export_method 打包版本選擇
    #分別是app-store、ad-hoc、development、enterprise
	export_method: "development”,
    	export_options: {
      	  provisioningProfiles: { 
          #左側表示你的專案的bundle id
          #右側表示你的專案在選擇export_method後,對應的描述檔名字
          "com.test.appidentifer" => "ProfilesName"
        }
       }) 
  end
複製程式碼

(還有一種官方推薦的 match 方法匹配證照和描述檔案,由於筆者現在用企業版賬號開發應用,不能隨意撤銷證照,所以沒用 match 的方法.)

2:安裝 jenkins:

在macOS系統上,我們需要先安裝 JDK,然後在 Jenkins 的官網 下載最新的 war 包。

jenkins.png
下載完成後,開啟終端,進入到 war 包所在目錄,執行以下命令:

java -jar jenkins.war --httpPort=8080
複製程式碼

待Jenkins啟動後,在瀏覽器頁面輸入以下地址,開啟 jenkins:

http://localhost:8080
複製程式碼

注意:使用其他方式安裝的 Jenkins 可能導致後續步驟失敗,請確認使用推薦的方式來安裝 Jenkins。

開始建立工程

CreatProject.png

配置倉庫程式碼連結

SourceCode.png

新增執行的 shell 程式碼

ShellCode.png
shell 內容:

export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
#上面命令指定編碼方式,如果不指定,執行 fastlane beta 會報錯
bundle update
fastlane beta
複製程式碼

最後,增加構建後操作步驟,選擇 Archive the artifacts,可以將打包好的 ipa 呈現在當前頁面,方便"測試同事"點選下載.點選"儲存",然後開始構建專案.

artifacts.png

常見問題

出現 fastlane: command not found 怎麼辦? 解決方法一:這個情況一般是由於 jenkins 沒有設定正確的 $PATH 環境變數導致的。正確設定的方法為: 在終端執行 echo $PATH,記錄下輸出的結果 在 jenkins 中系統管理-系統設定中,找到 環境變數(Environment variables) 在 key 中填寫 PATH,在 value 中填寫第一步中輸出的結果 儲存即可。

EnvironmentVariables.png

解決方法二:請確認你安裝 Jenkins 的方式和本文中推薦的方式一致。使用其他方式安裝的 Jenkins 也經常會出現此問題。 參考: fastlane官方教程 蒲公英官網:使用 Jenkins 實現持續整合 (iOS)

相關文章