jenkins編譯ios
❶ jenkins ios 自動化打包一定要在mac下嗎
首先搭建起jenkins環境,android官方提供了使用ant編譯打包的腳本,所以要在jenkins系統配置裡面將ant配置好;然後在jenkins裡面新建一個項目,這里列出比較重要的幾項配置: 1、項目源代碼位置,一般就是指定svn吧 2、構建過程添加shell
❷ iOS 的自動構建流程
用來打包做類似事情的工具很多,更主要的是為什麼使用自動構建:
• 效率上,解放出開發人員的時間。也更方便其他同事使用。
• 保證打包的標准,避免配置或環境問題,帶來的失敗。把事情做對,比做快更重要。
• 許可權安全上,通過構建系統集中管理,對於使用者來說是一個黑盒。
• 項目流程上,便於有需求時做 Daily Build 或者 自動測試。
對於 如何安裝 Jenkins 或者 Jenkins 參數配置 之類的基本配置不做涉及。
網上已經有不少詳細的文章進行介紹。比如 手把手教你利用Jenkins持續集成iOS項目 https://www.jianshu.com/p/41ecb06ae95f 。
先介紹整體的構建流程,具體的內容會在下面分步驟介紹.
構建前
• 設置構建名
• 配置 app 圖標水印(build號,分支)
• ruby 腳本根據參數,修改工程 bundleID ,宏等
• 安裝第三方依賴,pod update
執行構建
• xcodebuild clean
• xcodebuild archive
• xcodebuild exportArchive
構建完成
• 上傳分發平台: 蒲公英/fir/appstore(歷史版本記錄: git tag )
• 符號表處理:上傳 bugly
• 歸檔產物: 上傳 FTP 伺服器
• 清理: 刪除 IPA 等
• 設置構建描述
• 通知: 企業微信 webhook 機器人推送
首先設置我們的構建名稱,我這里使用到幾個參數:
• BUILD_NUMBER ,Jenkins 自帶的參數,代表第幾次構建
• BetaPlatform ,設置的選項參數,代表分發平台。我這里的值分別是:fir,pgyer,appstore
• Mode,設置的選項參數,代表 Xcode 構建的環境設置,為 Snapshot 和 Release
• Branch,Jenkins 自帶的參數,代表 Git 分支名稱
為了打包後進行測試的 APP ,便於定位問題,可以在 App Logo 上打上水印,加入構建使用的 git 分支名,jenkins 構建號,app 版本號 等關鍵信息。
配置圖標水印的流程為:
• 判斷此次是否為 appstore 分發平台。如果是 appstore 的話,將舊有的圖標目錄清理掉,然後將圖標復制到使用的目錄中。
• 如果不是 appstore ,則為測試平台分發,進行水印處理。
因為要使用替換資源的方式,所以准備兩個目錄。
一個目錄作為 源目錄,存放未處理的圖片。一個目錄作為目標目錄,存儲 App Logo 使用的圖片。
為什麼使用兩個圖片目錄存儲?假設只用一個,原圖為A,當第一次處理,圖片為 A1水印圖片,當第二次再拿到的圖片,已經是被處理過的 A1水印圖片了,而不是原圖A 。
這里注意 icons_path 為存放原圖的地址, icons_dest_path 為要修改使用的目標路徑。命名為 AppIcon-Internal。
可以參考 iOS APP圖標版本化 https://www.jianshu.com/p/a37e114b7e66
關於 version 的獲取, 因為目前版本有改動,使用 ruby 去獲取,腳本會在後面提供鏈接:
還有一個臨時存放路徑,要提前創建好這個文件夾:
添加水印主要使用到了命令行工具 ImageMagick ,所以要先安裝:
具體的腳本如下:
這里使用 ruby 實現參數修改(當然也可使用 python 等各種語言,自己方便就 OK )。
目前做的操作:
• 區分是否 beta 版本 -- 修改定義 beta 宏 的真假值
• 不同分發平台,使用不同 bundleID -- 對 bundleID 進行修改
腳本里依靠 CocoaPods 開源的 Xcodeproj ,對工程的 name.xcodeproj/project.pbxproj 文件進行配置修改。
python 的話,可以使用這個項目 mod-pbxproj
安裝/更新第三方庫,這里使用到的是 Cocoapods,其它的包管理器可使用其它方式。
在開始之前,我們要做些准備工作,比如設置要使用的變數,常量。
需要提前寫好,盡量避免散落。
舊有的方式,是直接通過 info.plist 取:
然而在新的 Xcode 取 版本號 和 bundleID 的方式發生變化,現在 info.plist 里的值是變數名,取版本號為 $(MARKETING_VERSION) , bundleID 為 $(PRODUCT_BUNDLE_IDENTIFIER) .
結局思路是通過腳本到工程配置里去獲取,下面使用 ruby 實現了這兩個目的。
我們將 App 與 Jenkins 的 build number 設置為同一個,方便需要時,查看構建的參數以及符號表等:
加入 security 解鎖操作的原因,是在子節點 ssh 登錄上去之後,keychain 沒有被解鎖.導致打包失敗.
解決方案是用 security unlock-keychain 命令將證書解鎖。
另外可以通過命令查看描述文件的詳細信息 包括UUID等信息
對工程進行構建打包,主要在於使用 Xcodebuild .
分為三個階段:
• Clean
• Archive
• Export
如果在執行過程中又不喜歡日誌輸出的,可以在命令行最後加上
每次構建時,對工程進行 clean ,保證沒有其它影響的因素。
使用xcodebuild clean [-optionName]...清除編譯過程生成文件,使用如下:
非 cocoapods 的工程,將 -workspace "${APP_NAME}.xcworkspace" 換成 -project ${APP_NAME}.xcodeproj 即可。
新版本的 Xcode 有了新的構建系統,使用 -UseModernBuildSystem= 來做新舊區分。
Xcodebuild archive
更新到Xcode9.0後,之前寫的自動打包腳本不可用了。
需要添加 -allowProvisioningUpdates,獲取訪問鑰匙串許可權的關鍵所在,設置了這個欄位就會在打包過程彈框請求獲取鑰匙串內容許可權。
特別說明的是,exportOptionsPlist 一定要檢查,不同的環境和分發平台要選擇對。
最簡單方式,就是調好需要的環境後,直接手動 archive ,export 出來,使用產物里的 exportOptionsPlist 文件。
檢查對應路徑是否有 **.ipa 文件:
這里分為 蒲公英,fir,appstore 三個平台,上傳 IPA.
下面使用的三個上傳命令,最好先提前在機器上實驗可以正常用再構建。
上傳 bugly
進行完所有操作後,對於產物做一次保存,需要時可以用上。
首先將文件壓縮
通過 FTP 插件,把 zip 文件上傳到歸檔的路徑下
刪除 IPA 等文件,注意的是,當狀態為 success 才清理,避免有時上傳出問題,可以進行手動上傳。
設置構建描述
完成後,企業微信 webhook 機器人推送,效果如下:
這里設置成可選項,避免頻繁打擾其它同事。腳本如下:
[1] https://juejin.im/post/6844903843994533896
[2] https://www.cnblogs.com/zhou--fei/p/11371019.html
[3] https://www.jianshu.com/p/4f4d16326152
[4] https://www.jianshu.com/p/f50053d50436
[5] https://dengweijun.com/2018/12/26/Xcode%E8%87%AA%E5%8A%A8%E6%89%93%E5%8C%85%E9%82%A3%E4%BA%9B%E4%BA%8B/
❸ iOS-Jenkins-TestFlight自動打包流程
一、准備一台mac電腦
二、安裝jenkins
打開終端運行:
brew install Jenkins
如果沒有安裝brew,請前往 brew 根據提示安裝。
至少需要安裝java1.8 ,如果沒有安裝會有提示, java
java安裝完畢,鏈接 launchd 配置文件
啟動jenkins
jenkins
打開Safari輸入: http://localhost:8080/
就能看到jenkins已經運行起來了,如果你更換了埠就是你後來設置的埠。
接下來打開Jenkins後會讓去一個填寫password的頁面如下圖,存儲password的地方就是圖片上那行紅色字體目錄下,使用終端 cat + 紅色字體路徑就看到了
然後將我們得到的password輸入到「Administrator password「中,即可進入如下界面,接著安裝一些建議的插件(左邊的),請等待,並全部安裝成功在進行下一步。
安裝完成之後,輸入賬戶密碼,登陸。開始jenkins
二、cocoapod環境安裝
項目中一般會使用cocoapod管理第三方庫。這個時候如果使用jenkins自動打包,就需要安裝好cocoapod環境
三、jenkins使用
1、安裝插件
Keychains and Provisioning Profiles Management
Xcode integration
在系統管理-> 插件管理中搜索插件
配置Keychains and Provisioning Profiles Management
請先配置好p12和Provisioning Profiles文件
需要上傳login.keychain文件,該文件獲取方法,在終端中輸入
cd ~/Library/Keychains
將login.keychain文件upload之後,會出現下圖的界面,根據需要將證書添加進去即可,但是由於macOS10.12以及以後的系統裡面沒有login.keychain文件,只有login.keychain-db,可以復制出來刪除-db,upload就好了。(上傳keychain,路徑用自己改名後的那個)
然後添加Provisioning Profiles,上傳方法和上傳login.keychain一樣,去選擇Provisioning Profiles文件,然後upload,然後結果如下圖,藍色框內的是固定格式的/Users/用戶名/Library/MobileDevice/Provisioning Profiles
配置好之後保存即可
3.開始配置任務
創建一個任務,自由風格的任務
General
創建一個自由風格的任務,然後在選擇丟棄舊的構建,至於天數和保持的最大個數,按照自己的需求來就好
源碼管理
接下來是源碼管理,在Repository URL裡面添加你的git地址,我這里添加的是http的,如果你的項目是使用的ssh的,那麼就將git開頭的地址填寫上,然後點擊Add添加你的git帳號,如果你的事ssh的,將ssh的密匙填寫上,具體的自己網路一下就好咯,我就不多寫了,結果如圖
構建觸發器
接下來是構建觸發器,也就是什麼時候觸發自動打包我這里填寫的是H 20 * * 這個意思就是H小時然後,後面跟著數字,在後面就是日月年, 代表的我認為是每次都觸發,也就是每天每月每年,但是Jenkins的時間不是絕對的,一般都是在隨機在半點,也就是設置20點,大概會在20:30分左右會觸發,如果需要兩個時間,那麼格式可以這樣H 20,22 * * *結果如圖
構建環境
在構建環境裡面勾選Keychains and Code Signing Identities和Mobile Provisioning Profiles,Keychains and Code Signing Identities是打包需要的證書,Mobile Provisioning Profiles是打包需要的配置文件,都是可以自己選擇的,我的如圖
構建環境第一次Code Signing Identity和PP文件可能有些不一樣。應用,保存一下就可以了。
添加腳本
執行cocoapod腳本必須要在第一個
執行打包並且上傳到TestFlight腳本
關於exportOptionsPlist
請參考 exportOptionsPlist
把exportOptionsPlist添加到infoPlist同一層並push到git
關於
問題的解決。
證書不能使用自動管理,需要手動。
感謝