什么是 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實例時,系統會要求使用自動生成的密碼對其進行解鎖。
-
瀏覽到
http://localhost:8080
(或安裝時為Jenkins配置的任何端口),并等待 解鎖 Jenkins 頁面出現,按照提供的路徑將密碼復制并粘貼到下面輸入框。setup-jenkins-01-unlock-jenkins-page.jpeg
-
自定義 jenkins 插件
在 Customize Jenkins 頁面內, 有兩個選項:
- 安裝推薦的插件 - 安裝推薦的一組插件,這些插件基于最常見的用例.
-
選擇插件來安裝 - 選擇安裝的插件集。當第一次訪問插件選擇頁面時,默認選擇建議的插件。
jenkins初始化插件.png
可以選擇 安裝推薦的插件 ,之后可以通過 Jenkins 中的Manage Jenkins > Manage Plugins 頁面在稍后的時間點安裝(或刪除)其他 Jenkins 插件 。
設置向導顯示正在配置的Jenkins的進程以及您正在安裝的所選Jenkins插件集。這個過程可能需要幾分鐘的時間
-
創建第一個管理員用戶
Jenkins 要求創建第一個管理員用戶。 出現“ 創建第一個管理員用戶 ”頁面時, 請在各個字段中指定管理員用戶的詳細信息,然后單擊 保存完成 。
-
實例配置
Jenkins URL 用于給各種 Jenkins 資源提供絕對路徑鏈接的根地址。 例如:郵件通知、PR狀態更新以及提供給構建步驟的
BUILD_URL
環境變量。
有 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 是為了自動觸發或者手動觸發執行下面流程得到最終產物:
- 獲取最新代碼
- 參數化構建
- 上傳服務器
- 分發
參數化構建
在構建過程中,可能會需要選擇分支、標簽以及不同的環境選擇,可以通過勾選 參數化構建過程,配置相應的參數。
這里以 Git 參數為例,配置相應變量名稱,描述、參數類型和默認值:
需安裝git parameter 插件
源碼管理
????配置相應的源碼倉庫,分支通過變量參數獲取,Jenkins 會在觸發時拉取指定分支的代碼
構建觸發器
通過調用 Jenkins REST API 觸發遠程構建,Jenkins REST API可以通過 http://localhost:port/job/api/ 查看
可以通過其它 job 構建后觸發
通過定時構建
通過提交代碼觸發
構建
構建 可以使用 fastlane 或者 Shell 腳本,參考即可
總結
????在 iOS 開發者,Jenkins 更適用于單獨一個 Mac 電腦作為打包機提供給團隊進行自動化構建,如果已有 Jenkins 服務器,可以將 Mac 作為其從子節點,并可以利用 Jenkins REST API 及其他技術等等搭建一個自動化構建平臺,從而減少團隊開發因構建、部署和分發而浪費的時間。