為什麼要自動化
- 節省時間,快速迭代: 減少重複繁瑣的過程,本地繼續編碼,使用工具自動拉取遠端庫程式碼後打包
- 糾錯: 打包出錯,會自動查詢到編譯錯誤
- 快速分發多個版本: 配置好不同分支的打包策略,可以將打包任務移交測試,分工更明確
工具
- Jenkins CI
- Flow CI
- Travis CI
- Hudson CI
- Circle CI
本文只關注 Jenkins 的使用
Jenkins 的三種安裝方式
- war
- pkg
- homebrew
推薦使用 homebrew
jenkins 安裝
1、正確安裝Homebrew的方式
2、安裝: brew install jenkins
3、終端啟動命令: jenkins
4、瀏覽器訪問jenkins
地址: http://localhost:8080/
, 如果不能正常訪問,要麼Java環境出問題,要麼jenkins
沒有啟動; Java環境的去官網下載最新的jdk安裝;jenkins開關命令
5、 正常的瀏覽器啟動頁面是如下的
根據提示修改資料夾許可權,獲取金鑰,登入jenkins 6、安裝外掛 ,Jenkins功能很多以來相應的外掛,簡化了接入的難度
最好先跳過這一步,因為電腦環境問題,有些外掛是需要翻牆安裝,所以導致jenkins安裝外掛的時候,會卡在一個地方,然後就一直卡著,我安裝過多次jenkins,因為這個問題,我習慣於跳過外掛安裝,先登入配置好環境,然後再手動安裝外掛!!!!!!!!!
如果出現一隻卡死在安裝外掛的介面,關機重啟,重新啟動Jenkins後,登入http://localhost:8080
進入管理員註冊頁面
7、 管理員註冊
要牢記這個名稱,如果是自己測試用,直接用 admin admin
這種更簡單的組合.
8、 進入首頁,首先將需要安裝的外掛 再次補充全
需要的外掛如下Git
,Gitlab
,SVN
,SSH Credentials
用於授權後拉取遠端庫的程式碼Keychains and Provisioning Profiles Management
: 證照與描述檔案的管理Xcode integration
Xcode打包的外掛,所以iOS的打包只能部署在Mac系統Cocoapods
如果專案使用了cocoapod外掛 來獲取依賴庫Mailer Plugin
用來傳送通知郵件fir-plugin
用來將ipa
包分發到fir.im
上面,或者使用蒲公英(只能是指令碼)也可以Post-Build Script Plug-in
指令碼外掛
9、配置專案的訪問ssh私鑰
根據圖上的路徑
新增SSH
的私鑰, 一般你專案的訪問私鑰是 ~/.ssh/id_rsa
這個檔案,如果沒有配置,則詢問你的原始碼的管理員
如果私鑰是錯誤的,則配置專案的時候會出現下面?的錯誤
所以務必要明白,專案的私鑰是如何配置的. 需不需要口令碼!!!
如果是公司專案,詢問運維,當然一般運維會搭建jenkins(iOS必須要在Mac電腦上面搭建,如果是給JAVA使用,一般用linux,不能打包iOS).
自己的專案,不論是在Coding,Github,Gitlab
都可以在頁面上查詢對應的SSH新增,以明確將要在jenkins
使用的ssh
私鑰是什麼
10、配置專案依賴的證照與描述檔案
進入後的介面是
主要有兩個步驟,
①是 上傳鑰匙串的 login.keychain
, mac地址~/Library/Keychains/
② 設定引數
注意 證照的名稱就是本機鑰匙串,安裝後的證照簡介的 常用名稱
描述檔案的地址 一般是 ~/Library/MobileDevice/Provisioning Profiles
不過我多次嘗試 發現配置專案的時候 並沒有得到描述檔案,後面只能用指令碼自己打包的
11、建立新的專案
選擇專案的型別進入專案的配置頁面
丟棄舊的構建 ,可以自己定義策略
設定 原始碼的 拉取, 這一步 主要是可能卡在 私鑰的配置上面,所以一定要明確SSH的配置(見上面的說明)
構建觸發器 , 這裡主要是 定時去 自動化打包專案
構建環境, 主要配置的是 證照與描述檔案
下面是正確的環境連結在此,我不知道是不是xcode8之後才有的這問題,還是我使用homebrew
確實獲取不到.
Xcode的配置
具體配置
鑰匙串 選擇配置好的鑰匙串
其他的編譯打包引數 , 如果使用了cocoapods還需要指定具體的一些引數,並且執行指令碼,拉取依賴的遠端庫
最最重要的來了,打包的指令碼
如果使用了 cocoapods
則需要提供拉取依賴庫的程式碼 否則請忽略這一步(比如我們叮叮暫時沒有)
分別是 指定這是一個指令碼(截圖有問題,應該是#bin/bash -l
), podfile
檔案的 中文格式編碼, 切換到podfile
的路徑下,拉取依賴的pod
具體的程式碼如下
指令碼① 樣本 xcodebuild -workspace "demo.xcworkspace" -sdk iphoneos -scheme "targetName" -configuration 'Release Adhoc' CODE_SIGN_IDENTITY="keychain中證照代號名稱" SYMROOT='$(PWD)
這裡 -workspace "demo.xcworkspace"
是使用cocoapods
的樣本, 沒有使用就像下面的 -project "project的路徑"
if [ -d "${WORKSPACE}/builds" ]; then rm -rf ${WORKSPACE}/builds; fi;
mkdir ${WORKSPACE}/builds;
if [ -d "${WORKSPACE}/builds/${BUILD_NUMBER}" ]; then rm -rf ${WORKSPACE}/builds/${BUILD_NUMBER}; fi;
mkdir ${WORKSPACE}/builds/${BUILD_NUMBER};
xcodebuild -project ${WORKSPACE}/ProjectName/ProjectName.xcodeproj
-scheme "ProjectName"
-sdk iphoneos
archive -archivePath ${WORKSPACE}/builds/${BUILD_NUMBER}/archive
CODE_SIGN_IDENTITY="iPhone Developer: xxxx"
複製程式碼
注意 scheme 一定還要勾選 分享
並且注意 不同的打包method
要對應好.
指令碼② xcodebuild官方文件
xcodebuild -exportArchive
-archivePath ${WORKSPACE}/builds/${BUILD_NUMBER}/archive.xcarchive
-exportOptionsPlist ${WORKSPACE}/ProjectName/ProjectName/ExportOptions_development.plist
-exportPath ${WORKSPACE}/builds/${BUILD_NUMBER}/${JOB_NAME}_${BUILD_NUMBER}.ipa
PROVISIONING_PROFILE="iPhone Developer: xxxx"
複製程式碼
這裡有一個注意點 就是 exportOptionsPlist
,需要自己在專案中配置 相應的資訊
一切順利就可以正常打包了 後面就是打包後 上傳到 fir.im或者是蒲公英 給測試團隊 .
還有就是 郵件通知
12、 正常使用
點選進入控制檯輸出,檢視執行的細節
團隊的使用
1、 設定一個 區域網的固定訪問地址
公司內其他同事就可以通過這個地址,訪問jenkins
自己去配置專案,進行打包
2、 設定jenkins執行電腦的安裝工作目錄 為 分享目錄
![share files(http://upload-images.jianshu.io/upload_images/1435355-25ba6162e97b27a9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
同事可以通過Finder 訪問共享的電腦,找到manajay
名稱的電腦,選擇連線,可以設定密碼,我直接讓同事可以以客人的身份,無密碼訪問jenkins
下的 workspace
目錄.
這樣即使 上傳失敗,自己可以獲取到ipa包,自己分發.
3、 jenkins 設定成,開機自啟的程式 brewed-jenkins小外掛
補充另一種打包方式 fastlane
如果你的專案使用的是 fastlane那就簡單很多了.
- match 配置證照與描述檔案
- gym 負責打包
- pgyer 負責分發測試, fastlane有個蒲公英的外掛,親測有bug,所以我還是用的指令碼
整個打包上傳指令碼,注意如果使用了fastlane就不需要配置證照的鑰匙串,上面的xbuild指令碼了.
#bin/bash -l
pwd
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
echo "pod 更新專案依賴 ----開始----"
/usr/local/bin/pod update --verbose --no-repo-update
echo "pod 更新專案依賴 ----結束----"
cd fastlane
pwd
echo "fastlane 打包命令-----開始-----"
fastlane development
echo "fastlane 打包命令-----結束-----"
echo "pyger 上傳命令-----開始----"
sh ./deploy_pgyer.sh
echo "pyger 上傳命令-----結束----"
複製程式碼
待完成的
- 測試蒲公英分發
curl -F "file=@/tmp/example.ipa" -F "uKey=" -F "_api_key=" https://qiniu-storage.pgyer.com/apiv1/app/upload
- 新增
webhooc
自動觸發構建