使用 Jenkins 持續化集成 iOS

什么是 Jenkins

????Jenkins 是一款由 Java 編寫的可擴展的開源的持續集成工具。它提供了軟件開發的持續集成服務,其運行在 Servlet 容器中(例如:Apache Tomcat),支持軟件配置管理(SCM)工具。

Jenkins 的特性

  • 持續集成和持續交付

    Jenkins 可以用作簡單的 CI 服務器或變成任何項目的持續交付中心

  • 簡易安裝

    只要把 jenkins.war部署到 servlet 容器

  • 易于配置

    Jenkins 可以通過其 Web 界面輕松設置和配置,其中包括即時錯誤檢查和內置幫助。

  • 插件

    憑借更新中心的數百個插件,Jenkins 與持續集成和持續交付工具鏈中的幾乎所有工具集成。

  • 可擴展

    Jenkins 可以通過其插件架構進行擴展

  • 分散式

    Jenkins 可以輕松地在多臺機器上分配工作,幫助更快地跨多個平臺推動構建、測試和部署。

CI 工作流

????典型的 CI 工作流是一組可自動化的步驟,在將代碼變更推送到代碼倉庫后會自動運行。這整套流程包括自動構建、代碼分析、運行測試、存檔等等,甚至可通過腳本來自定義流程,以確保整個流程按照團隊預定的要求來執行。

無 Jenkins 遠程服務器,基于 Mac 電腦的 Jenkins 安裝

一般來說,Jenkins 依賴于 Java 環境,需要前往 http://www.java.com 安裝

Homebrew 安裝

????官網推薦在 Mac 電腦中使用 Homebrew 包管理器安裝 Jenkins,Jenkins 分為兩個版本 Jenkins LTS 和 * Jenkins Weekly*,安裝命令如下:

Jenkins LTS 的安裝
  • 安裝最新的版本
brew install jenkins-lts 
  • 啟動 Jenkins 服務

    brew services start jenkins-lts
    
  • 重啟 Jenkins 服務

    brew services restart jenkins-lts
    
Jenkins Weekly 的安裝
  • 安裝最新的版本

    brew install jenkins
    
  • 啟動 Jenkins 服務

    brew services start jenkins
    
  • 重啟 Jenkins 服務

    brew services restart jenkins
    

Docker 容器安裝(推薦)

????參考Jenkins-docker,使用如下命令:

docker run -d -p 8080:8080 -p 50000:50000 --restart always -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts-jdk11

使用 pgk 安裝包安裝

????Download the latest package,使用安裝器安裝,按照流程安裝即可。此安裝方式會在 Mac 系統里創建一個名為 jenkins 用戶,jenkins 服務就部署在這個用戶下。

使用 war包 安裝

????Downloading Jenkins 下載 war 包,將其放在 Servlet 容器(例如:Tomcat)運行 或者 執行下面命令:

java -jar jenkins.war --httpPort=8080

????war 包自帶 jetty 服務器,以上命令會自動啟服務器,并完成部署。此種方式安裝,會在當前用戶的根路徑或相應的容器下創建 .jenkins 隱藏文件,并產生多余的配置文件,需手動管理,且不方便卸載。

安裝后設置向導

端口號沖突的可以自行修改相應端口號,Homebrew 安裝需要在目錄下找到 homebrew.mxcl.jenkins-lts.plist 文件進行修改。

????下載安裝并運行Jenkins后,即將開始進入安裝向導。當第一次訪問新的Jenkins實例時,系統會要求使用自動生成的密碼對其進行解鎖。

  1. 瀏覽到 http://localhost:8080(或安裝時為Jenkins配置的任何端口),并等待 解鎖 Jenkins 頁面出現,按照提供的路徑將密碼復制并粘貼到下面輸入框。

    setup-jenkins-01-unlock-jenkins-page.jpeg
  1. 自定義 jenkins 插件

    Customize Jenkins 頁面內, 有兩個選項:

    • 安裝推薦的插件 - 安裝推薦的一組插件,這些插件基于最常見的用例.
    • 選擇插件來安裝 - 選擇安裝的插件集。當第一次訪問插件選擇頁面時,默認選擇建議的插件。
      jenkins初始化插件.png

可以選擇 安裝推薦的插件 ,之后可以通過 Jenkins 中的Manage Jenkins > Manage Plugins 頁面在稍后的時間點安裝(或刪除)其他 Jenkins 插件 。

設置向導顯示正在配置的Jenkins的進程以及您正在安裝的所選Jenkins插件集。這個過程可能需要幾分鐘的時間

插件安裝過程.png
  1. 創建第一個管理員用戶

    Jenkins 要求創建第一個管理員用戶。 出現“ 創建第一個管理員用戶 ”頁面時, 請在各個字段中指定管理員用戶的詳細信息,然后單擊 保存完成 。

jenkins創建管理員用戶.png
  1. 實例配置

    Jenkins URL 用于給各種 Jenkins 資源提供絕對路徑鏈接的根地址。 例如:郵件通知、PR狀態更新以及提供給構建步驟的 BUILD_URL 環境變量。

jenkins初始化實例配置.png

有 Jenkins 遠程服務器,配置 Mac 子節點

準備

  • 首先,要確保安裝Jenkins的遠程服務器、本地Mac電腦在同一網絡環境下。
  • 本地 Mac 電腦需要設置允許遠程登錄,位于系統偏好設置->共享->遠程登錄,Jenkins 才能登錄訪問Mac電腦。
  • Mac 配置提供給遠程用戶工作目錄的讀寫權限

Jenkins 新增節點

  • Jenkins 系統管理->管理節點-> 新建節點
  • 配置節點,涉及名稱、遠程工作目錄、啟動方式(Mac 電腦 ip 地址,用戶名和密鑰)
  • 節點屬性,涉及環境變量、工具位置

節點啟動

  • 將新增的節點重啟代理

Jenkins 配置構建部署 iOS 項目

???? jenkins 里最常用的功能就是 job 的構建,即任務的構建,通過配置 job 完成 iOS 項目的構建部署。根據需要選擇不同的任務類型,這里以自定義 FreeStyle Item 為示例 。

環境配置

證書和描述文件

????Xcode 構建依賴于證書和描述文件,如果當前電腦上有證書和描述文件需要在構建時使用 security unlock-keychain $KEYCHAIN 解鎖,當電腦上沒有證書和描述文件時,可以通過手動配置。

????還有另外一個辦法就是使用 Keychains and Provisioning Profiles Management 插件,它會將 iOS 和 OSX 項目的鑰匙串和移動配置文件管理集成到 Jenkins 中。只需上傳鑰匙串和配置文件并配置您的構建作業以使用它們。執行構建時,鑰匙串和配置文件會自動分發到 Jenkins 節點(主節點或從節點)。無需在每個 Jenkins 節點上手動管理這些文件。

  • ~/Library/Keychains/login.keychain-db 拷貝到桌面,并將其改名為 login.keychain
  • 在 Upload Keychains and Provisioning Profiles Management 處選擇 login.keychain 上傳
  • 配置 Code Signing Identity
  • 上傳描述文件,默認安裝后的描述文件在 ~/Library/MobileDevice/Provisioning Profiles

注:需使用 2.263.4 的版本才可以上傳鑰匙串和配置文件,無多個節點的情況可以不考慮

構建流程

??????一般地,使用 jenkins 是為了自動觸發或者手動觸發執行下面流程得到最終產物:

  1. 獲取最新代碼
  2. 參數化構建
  3. 上傳服務器
  4. 分發
jenkins構建流程.jpeg

參數化構建

在構建過程中,可能會需要選擇分支、標簽以及不同的環境選擇,可以通過勾選 參數化構建過程,配置相應的參數。

jenkins參數化構建.png

這里以 Git 參數為例,配置相應變量名稱,描述、參數類型和默認值:

需安裝git parameter 插件

JenkinsGit參數.png

源碼管理

????配置相應的源碼倉庫,分支通過變量參數獲取,Jenkins 會在觸發時拉取指定分支的代碼

源碼倉庫配置.png

構建觸發器

  • 通過調用 Jenkins REST API 觸發遠程構建,Jenkins REST API可以通過 http://localhost:port/job/api/ 查看

  • 可以通過其它 job 構建后觸發

  • 通過定時構建

  • 通過提交代碼觸發

構建

構建 可以使用 fastlane 或者 Shell 腳本,參考即可

總結

????在 iOS 開發者,Jenkins 更適用于單獨一個 Mac 電腦作為打包機提供給團隊進行自動化構建,如果已有 Jenkins 服務器,可以將 Mac 作為其從子節點,并可以利用 Jenkins REST API 及其他技術等等搭建一個自動化構建平臺,從而減少團隊開發因構建、部署和分發而浪費的時間。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,578評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,701評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,691評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,974評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,694評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,026評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,015評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,193評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,719評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,442評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,668評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,151評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,846評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,255評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,592評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,394評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380