jenkins iOS自動化打包分發

manajay發表於2018-01-30

為什麼要自動化

  • 節省時間,快速迭代: 減少重複繁瑣的過程,本地繼續編碼,使用工具自動拉取遠端庫程式碼後打包
  • 糾錯: 打包出錯,會自動查詢到編譯錯誤
  • 快速分發多個版本: 配置好不同分支的打包策略,可以將打包任務移交測試,分工更明確

工具

  • 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,因為這個問題,我習慣於跳過外掛安裝,先登入配置好環境,然後再手動安裝外掛!!!!!!!!!

install plugins

如果出現一隻卡死在安裝外掛的介面,關機重啟,重新啟動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-private-key

根據圖上的路徑

SSH

新增SSH的私鑰, 一般你專案的訪問私鑰是 ~/.ssh/id_rsa 這個檔案,如果沒有配置,則詢問你的原始碼的管理員

id_rsa

如果私鑰是錯誤的,則配置專案的時候會出現下面?的錯誤

wrong private key

所以務必要明白,專案的私鑰是如何配置的. 需不需要口令碼!!! 如果是公司專案,詢問運維,當然一般運維會搭建jenkins(iOS必須要在Mac電腦上面搭建,如果是給JAVA使用,一般用linux,不能打包iOS). 自己的專案,不論是在Coding,Github,Gitlab 都可以在頁面上查詢對應的SSH新增,以明確將要在jenkins使用的ssh私鑰是什麼

10、配置專案依賴的證照與描述檔案

login key

進入後的介面是

upload login-keychains

主要有兩個步驟, ①是 上傳鑰匙串的 login.keychain , mac地址~/Library/Keychains/

login-keychains location

② 設定引數

login-keychains password

注意 證照的名稱就是本機鑰匙串,安裝後的證照簡介的 常用名稱

common name

描述檔案的地址 一般是 ~/Library/MobileDevice/Provisioning Profiles 不過我多次嘗試 發現配置專案的時候 並沒有得到描述檔案,後面只能用指令碼自己打包的

11、建立新的專案

new job
選擇專案的型別
new job setting

進入專案的配置頁面

configuration

all setting items

丟棄舊的構建 ,可以自己定義策略

drop old builds

設定 原始碼的 拉取, 這一步 主要是可能卡在 私鑰的配置上面,所以一定要明確SSH的配置(見上面的說明)

fetch origin code

構建觸發器 , 這裡主要是 定時去 自動化打包專案

triger

構建環境, 主要配置的是 證照與描述檔案

keychain

下面是正確的環境連結在此,我不知道是不是xcode8之後才有的這問題,還是我使用homebrew確實獲取不到.

others keychains

Xcode的配置

Xcode

具體配置

Xcode build settings

鑰匙串 選擇配置好的鑰匙串

Xcode code sign

其他的編譯打包引數 , 如果使用了cocoapods還需要指定具體的一些引數,並且執行指令碼,拉取依賴的遠端庫

Xcode Project setting

最最重要的來了,打包的指令碼

build shell

如果使用了 cocoapods 則需要提供拉取依賴庫的程式碼 否則請忽略這一步(比如我們叮叮暫時沒有) 分別是 指定這是一個指令碼(截圖有問題,應該是#bin/bash -l), podfile檔案的 中文格式編碼, 切換到podfile的路徑下,拉取依賴的pod

pod shell

archive build

具體的程式碼如下

指令碼① 樣本 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 一定還要勾選 分享

scheme of project

share 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 ,需要自己在專案中配置 相應的資訊

exportOptionsPlist

一切順利就可以正常打包了 後面就是打包後 上傳到 fir.im或者是蒲公英 給測試團隊 .

fir.im plugin

還有就是 郵件通知

email plugin

12、 正常使用

build by hand

點選進入控制檯輸出,檢視執行的細節

log

團隊的使用

1、 設定一個 區域網的固定訪問地址

custom jenkins url

公司內其他同事就可以通過這個地址,訪問jenkins 自己去配置專案,進行打包 2、 設定jenkins執行電腦的安裝工作目錄 為 分享目錄

![share files(http://upload-images.jianshu.io/upload_images/1435355-25ba6162e97b27a9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

configurate share files

jenkins' workspace

同事可以通過Finder 訪問共享的電腦,找到manajay名稱的電腦,選擇連線,可以設定密碼,我直接讓同事可以以客人的身份,無密碼訪問jenkins下的 workspace目錄. 這樣即使 上傳失敗,自己可以獲取到ipa包,自己分發. 3、 jenkins 設定成,開機自啟的程式 brewed-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自動觸發構建

參考連結

相關文章