iOS Jenkins CI 集成上傳fir渣触、AppStore
背景:由于我司的App比較多嗅钻,為了方便測試人員測試养篓,所以配置Jenkins去自動打包柳弄。
集成步驟
下載dmg
在Jenkin官網下載Jenkins的安裝包 Jenkin官網下載
選擇相應系統下的安裝包
安裝
采用Jenkins安裝包的方式安裝就比較傻瓜式了碧注,只需要點擊繼續(xù)就可以了
等Jenkins啟動成功后會看到下面這個頁面, 去到 '/Users/Shared/Jenkins/Home/secrets' 目錄下
如果沒有權限打開這個文件夾船万,就打開secrets的簡介耿导,修改這個文件夾的屬性舱呻。
修改secrets文件夾的屬性后就可一看到這些文件,打開終端執(zhí)行 sudo more /Users/Shared/Jenkins/Home/secrets/initialAdminPassword命令(也可以直接在編輯器中打開文件)
執(zhí)行命令結束后會拿到一串密碼復制后粘貼在瀏覽器中點擊continue就可以了
建議選擇左側的選項芥驳,安裝jenkins推薦的插件就可以了
至此
Jenkins
安裝已經結束下面我們開始配置我們的Jenkins
Jenkins 配置
在配置
Jenkins
時假抄,我們首先要做的就是安裝關于iOS
的插件宿饱,在我們使用
xcode
打包的時候需要配置證書和描述文件谬以,所以Jenkins
用戶需要一個和電腦用戶中間的一個媒介來管理證書我描述文件为黎。我們需要安裝Keychains and Provisioning Profiles Management
插件碍舍。
新建任務
在
Jenkins
首頁的右上角選擇新建 -> 輸入項目的名稱(推薦選擇構建一個自由風格的軟件項目選項
)-> 保存后會到項目的配置頁面
在源碼選項下有 None
、Git
捧书、Subversion
三個選項经瓷。由于我司的代碼是在
git
下托管的舆吮,所以我配置的也是 git
色冀。不相同的同學簡單配置下锋恬,步驟應該差不多与学。
說明:這里遇到一個小坑索守,在輸入代碼的URL會有一個上面所示的紅色錯誤卵佛,是講沒有權限連接遠程倉庫级遭,我就把自己電腦上的git私鑰添加到Jenkins上(圖中點擊Credentials選項后面的add按鈕挫鸽,不會的同學下面會有圖文教程)丢郊。當我把私鑰添加到git服務器上后枫匾,事實告訴我然并卵干茉。
解決辦法:因為在構建的時候是
Jenkins
去構建角虫,所以應該是在Jenkins
用戶下去生成git
的公鑰和私鑰。那么:
// 1.首先我們要為 Jenkins 用戶設置一個登陸密碼(初始密碼就是之前的那一串很長的密碼)
$ sudo dscl . passwd /Users/jenkins passWord---(同學均驶,不要全部復制好嗎password是要設置的密碼)
// 2.登陸Jenkins用戶
$ sudo su jenkins ----之后輸入剛才設置的Jenkins的登陸密碼
// 3.生成Jenkins的git公鑰和私鑰
$ ssh-keygen -t rsa -C "你的郵箱標識" -f ~/.ssh/jenkins
公鑰和私鑰生成
至此Jenkins用戶下的 git 公鑰和私鑰就生成完畢,去到/Users/Shared/Jenkins 修改.ssh文件的權限(不會的同學腾它,看下面的圖)
這時打開.ssh文件就可以看到剛才生成的公鑰和私鑰
// 修改權限后打開終端運行
$ sudo more /Users/Shared/Jenkins/.ssh/jenkins.pub
// 將公鑰上傳到 `git` 服務器
// 同上運行,查看公鑰
$ sudo more /Users/Shared/Jenkins/.ssh/jenkins
// 得到 Jenkins 的 git 私鑰如下圖:
-
添加私鑰
這時剛才的錯誤已經不見了仅颇,恭喜老鐵
如果打包的時候只需要打某一個分支的ipa忘瓦,只需要修改branches to build 選項中的分支名即可搁廓。
點擊立即構建,這時我們需要等待幾分鐘耕皮。累了的同學可以下去抽支煙
幾分鐘后我們會看到:
這時代碼已經拉取到我們Jenkins目錄下境蜕,有興趣的同學可以去看一下
這時我們的Jenkins配置基本上結束了,下面就是進行打包的配置凌停。
針對iOS自動化打包的配置
1.上傳鑰匙串粱年。選擇 系統管理
-> `Keychains and Provisioning Profiles Management
login.keychain在
/Users/用戶名/Library/Keychains/login.keychain
目錄下,選中login.keychain
點擊upload
即可罚拟,而Provisioning Profiles Directory Path
就是本機安裝的描述文件的目錄是在/Users/用戶名/Library/MobileDevice
目錄下的台诗。配置結束后點擊Save
按鈕即可
說明:當點擊
upload
按鈕后在/Users/Shared/Jenkins/Home/kpp_upload
目錄下的login.keychain
就是剛剛上傳的鑰匙串
。如果在/Users/Shared/Jenkins/Library/MobileDevice
目錄下沒有Provisioning Profiles
文件赐俗,就從/Users/admin/Library/MobileDevice
目錄下拷貝一份放過去拉队。不然就會打包失敗, 失敗的日志如下圖:
打包前xcode中項目配置
achieve項目配置如下圖:
說明:因為我們要去腳本中指定證書,所以在xcode中我們不做任何證書方面的處理
補充:在xcode
的菜單欄選中product
->Scheme
->Manage Schemes
查看對要打包的scheme
后面的shared
勾有沒有打上阻逮,不然打包的時候會報scheme not found
的錯誤導致打包失敗
export ipa 項目配置:
我們需要在項目中配置一個plist來告訴xcodebuild下面的信息
metmod : 常用的值development
粱快、app-store
、ad-hoc
teamID: 就是打包證書名稱括號里的那一串字符串拷貝一下就可以了
compileBitcode:Boolean
值叔扼, 推薦使用yes
, 這樣打出來的包體積計較小
附exportPlist配置圖:
打包腳本
JENKINS_USERS=root
APP_NAME=""
CONFIGURATION="Debug"
Scheme=""
#描述文件udid
PROVISIONING_PROFILE_SPECIFIER="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx"
#打包證書名稱
CODE_SIGN_DISTRIBUTION=""
#exportplist的路徑
EXPORTPLIST_PATH=""
#讀取項項目的信息
project_infoplist_path="./${APP_NAME}/Info.plist"
bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${project_infoplist_path}")
bundleVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" "${project_infoplist_path}")
DATE="$(date +%Y%m%d)"
IPANAME="${APP_NAME}_V${bundleShortVersion}_${DATE}.ipa"
IPA_PATH="$HOME/${IPANAME}"
security unlock-keychain -p "這里寫上用戶登錄密碼 解鎖鑰匙串" "${HOME}/Home/kpp_upload/login.keychain" || failed "unlock-keygen"
#沒有使用cocoapod的打包方式
scheme "${APP_NAME}" -configuration '{$CONFIGURATION}' clean
xcodebuild archive -project "${APP_NAME}.project" -configuration "${Configuration}" -scheme "${Scheme}" -archivePath "$HOME/${APP_NAME}_V${bundleShortVersion}_${DATE}" CODE_SIGN_IDENTITY="${CODE_SIGN_DISTRIBUTION}" PROVISIONING_PROFILE_SPECIFIER="${PROVISIONING_PROFILE_SPECIFIER}"
xcodebuild -exportArchive -archivePath "$HOME/${APP_NAME}_V${bundleShortVersion}_${DATE}.xcarchive" -exportOptionsPlist "${EXPORTPLIST_PATH}" -exportPath "${HOME}"
#使用cocoapod的打包方式
xcodebuild -workspace "${APP_NAME}.xcworkspace" -scheme "${APP_NAME}" -configuration '{$CONFIGURATION}' clean
xcodebuild archive -workspace "${APP_NAME}.xcworkspace" -configuration "${Configuration}" -scheme "${Scheme}" -archivePath "$HOME/${APP_NAME}_V${bundleShortVersion}_${DATE}" CODE_SIGN_IDENTITY="${CODE_SIGN_DISTRIBUTION}" PROVISIONING_PROFILE_SPECIFIER="${PROVISIONING_PROFILE_SPECIFIER}"
xcodebuild -exportArchive -archivePath "$HOME/${APP_NAME}_V${bundleShortVersion}_${DATE}.xcarchive" -exportOptionsPlist "${EXPORTPLIST_PATH}" -exportPath "${HOME}"
if [ CONFIGURATION=="Debug" ]
then
#上傳至fir.im 日志可以看到內測app的鏈接
fir publish 這里是打包結束的ipa的路徑 -T這里是fir.im上的token -c "${commit_msg}"
else if [ CONFIGURATION=="Release" ]
then
#上傳appStore
altoolPath="/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool"
"${altoolPath}" --validate-app -f "${IPA_PATH}/"${APP_NAME}".ipa" -u 開發(fā)者賬號 -p 賬號密碼 -t ios --output-format xml
"${altoolPath}" --upload-app -f "${IPA_PATH}/"${APP_NAME}".ipa" -u xxf@開發(fā)者賬號 -p 賬號密碼 -t ios --output-format xml
fi
補充:上傳
ipa
到appStore
的時候報說altool file not found
,需要給altool
建立軟鏈接 打開終端執(zhí)行
ln -s /Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/itms /usr/local/itms
至此皆尔,iOS端的jenkins自動化集成就配置基本結束了,剛開始配的時候也踩了不少坑币励,也請教了很多大牛慷蠕。所以小白整理了一下,有不正確的地方歡迎大牛們指正食呻,感謝~~~~