iOS-Jenkins自動化打包集成


 

前言自動化打包根本目的是為了節約時間,把重復且無技術含量的事情交給機器去做。Jenkins是基於Java開發的一種持續集成工具,用於監控持續重復的工作。搭建Jenkins前,請確認mac系統上已經搭建好了Java環境

一、Jenkins安裝

打開Jenkins官網下載最新的pkg安裝包(選擇Mac OS)。安裝完成之后,Safari可能會自動打開,如果沒有自動打開,打開瀏覽器,輸入http://localhost:8080

 

 

這時候可能出現這個頁面,這個問題的原因就是Java環境有問題,需要重裝Java環境。下載Java的JDK

一般會有2個版本可選,選一個下載即可,下載完安裝后打開終端,cd進入到jenkins.war包所在目錄,執行以下命令:

$ java -jar jenkins.war --httpPort=8080

httpPort指的就是Jenkins所使用的http端口,這里指定8080(默認的就是這個),可根據具體情況來修改。待Jenkins啟動后,在瀏覽器頁面輸入以下地址:http://localhost:8080這樣就可以打開Jenkins管理頁面了。

如果已經安裝完java環境,則顯示:

輸入終端命令:

hujintaodeMacBook-Pro:~ MengYu$ sudo su

使用vim編輯,並復制密碼 0b4e9c1d8524401182338a4d63612ae3 

Password:
sh-3.2# vim /Users/Shared/Jenkins/Home/secrets/initialAdminPassword
[1]+  Stopped(SIGTSTP)        vim /Users/Shared/Jenkins/Home/secrets/initialAdminPassword

創建你的賬號信息

安裝成功~

二、拷貝文件

2.1

/Users/用戶名/Library的MobileDevice 文件夾拷貝到 /Users/Shared/Jenkins/Library

注意:是將MobileDevice這個文件夾拷貝過去,而不是MobileDevice里的文件,/Users/Shared/Jenkins/Library 目錄下是沒有MobileDevice這個文件夾,所以先創建一個MobileDevice文件夾

在終端輸入

sudo mkdir /Users/Shared/Jenkins/Library/MobileDevice 
sudo cp -r /Users/MengYu/Library/MobileDevice/ /Users/Shared/Jenkins/Library/MobileDevice/

注意:曾遇到/Users/xxx/Library/下沒有MobileDevice文件夾,原來是新機上沒有安裝Xcode。

 

2.2

/Users/用戶名/Library/Keychains/下的login.keychainlogin.keychain-db這兩個文件拷貝到/Users/Shared/Jenkins/Library/Keychains文件夾下面

注意:Mac OS 10.12以下的沒有login.keychain-db這個文件,只需要拷貝login.keychain文件

在終端輸入:

cd /Users/Shared/Jenkins/Library/ 
sudo mkdir Keychains 
sudo cp /Users/MengYu/Library/Keychains/login.keychain ./Keychains/ 
sudo cp /Users/xxx/Library/Keychains/login.keychain-db ./Keychains/

再將這個login.keychain拷貝到桌面上

在終端輸入

sudo cp /Users/MengYu/Library/Keychains/login.keychain ~/Desktop/

注意:如果/Users/xxx/Library/Keychains/目錄下沒有login.keychain這個文件,就復制login.keychain-db文件到指定目錄,然后將復制在桌面上的該文件改后綴為.keychain。

 

三、修改鑰匙串權限、~/Library權限以及電腦用戶管理權限

3.1

打開鑰匙串,找到相應的證書

右鍵密鑰顯示簡介,在訪問控制那一項里勾選允許所有應用程序訪問此項目,並存儲更改。

3.2

找到Library資源庫文件夾,顯示簡介,設置共享與訪問權限,everyone讀與寫都可以

3.3

進入mac系統偏好設置 — 用戶與群組 — 其他用戶 — jenkins ,勾選允許用戶管理這台電腦,並右鍵選擇高級選項,將名字改為jenkins

 

四、Jenkins插件及系統設置(Keychains和證書配置)

4.1進入管理插件,在可選插件里所有關鍵字,下載安裝插件Keychains and Provisioning ProfilesManagement和 Xcode integration

點擊系統管理,並 添加插件 Keychains(鑰匙串插件)

4.2 login.keychain和證書配置

 

如何導出Xcode自動生成的Provisioning Profiles文件

1.打開終端輸入下列命令,回車,進入到Xcode管理的.mobileprovision文件目錄

#whoami 命令讀取系統用戶名
cd /Users/`whoami`/Library/MobileDevice/Provisioning\ Profiles/

2.通過BundleId 遞歸查找.mobileprovision文件,兩個:一個development ,一個distribution版本

-r遞歸查找,因為.mobileprovision是一個二進制文件,不加會報錯
-l只顯示文件名

grep -r -l com.tencent.xin .

3.如何區分dev和dis

繼續輸入下面的代碼,會打開Finder並選中文件。選中這個文件后,按空格鍵,會生成mobileprovision文件的預覽窗口,里面會顯示對應的信息,仔細找一下就能區分了

open -R ./5b857e06-f2ed-4256-88a3-0d7847e34371.mobileprovision

4.顯示詳細的預覽信息

security cms -D -i ./5b857e06-f2ed-4256-88a3-0d7847e34371.mobileprovision

打印結果如下,是一個XML文件,如果有ProvisionedDevices字段(設備列表),說明是dev版本的,dis版本的沒有這個字段。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>AppIDName</key>
    <string>aaa</string>
    <key>ApplicationIdentifierPrefix</key>
    <array>
    <string>X9ASDF2345</string>
    </array>
    <key>CreationDate</key>
    <date>2018-02-03T14:19:45Z</date>
    <key>Platform</key>
    <array>
        <string>iOS</string>
    </array>
    <key>DeveloperCertificates</key>
    <array>
        <data>MIIFmjCCBIKgAwIBA..省略
</array>
    <key>Entitlements</key>
    <dict>
        <key>keychain-access-groups</key>
        <array>
            <string>X9ASDF2345.*</string>       
        </array>
        <key>get-task-allow</key>
        <true/>
        <key>application-identifier</key>
        <string>X9ASDF2345.com.xxxx.aaa</string>
        <key>com.apple.developer.team-identifier</key>
        <string>X9ASDF2345</string>
    </dict>
    <key>ExpirationDate</key>
    <date>2019-02-03T14:19:45Z</date>
    <key>Name</key>
    <string>iOS Team Provisioning Profile: com.xxxx.aaa</string>
    <key>ProvisionedDevices</key>
    <array>
        <string>6126203adse3dbab4012374e5c01e2a497b9aa66</string>
      </array>
    <key>TeamIdentifier</key>
    <array>
        <string>X9SABCD345</string>
    </array>
    <key>TeamName</key>
    <string>xiaoming</string>
    <key>TimeToLive</key>
    <integer>365</integer>
    <key>UUID</key>
    <string>5b857e06-f2ed-4256-88a3-0d7847e34371</string>
    <key>Version</key>
    <integer>1</integer>
</dict>

 

選取拷 在桌上login.keychain以及項 相對應的Provisioning Profile 並upload, 可以導入多個, 且應該是/Users/Shared/Jenkins/Library/MobileDevice/Provisioning Profiles目錄下的provisioningProfile.

注意:開發證書和provision profile 一定要對應正確,不然命令行打包會認證不了而失敗

 

password 一定要填寫正確的鑰匙串的密碼

Code Signing Identity 是從鑰匙 找到相應的證書,然后顯示簡介復制 來,這 Identities 少要填 兩項,是因為這 放 個的話后 的設置 Code Signing Identity 能 動對應上。

 

Provisioning Profiles Directory Path 這 項 填寫/Users/用戶名/Library/ MobileDevice/Provisioning Profiles

注意:路徑里Provisioning Profiles是Provisioning\ Profiles

此外,Xcode工程必須手動配置證書,並取消自動配置證書

 

五、開始構建打包任務

5.1點擊新建任務,填寫名字,選擇自由風格,點擊確定進行創建

5.2添加源碼管理工具和SVN倉庫地址,這里使用Subversion 進行管理,倉庫地址去掉@和昵稱-xxx@

添加構建者並且Add設置為Jenkins

添加賬號:

 

5.3.構建觸發器配置

配置為每五分鍾自動打包一次

 

5.4構建環境勾選Keychains和Mobile Provisioning Profiles.

5.5增加構建步驟,執行Shell

Shell腳本如下:

a.自動配置證書的Shell腳本

#——————————————自動證書 ————————————————
# 工程名
APP_NAME="TEST"
# 證書
CODE_SIGN_DISTRIBUTION="iPhone Distribution: ZheXinIT (MZJ4H7VF63)"
# info.plist路徑
project_infoplist_path="./${APP_NAME}/Info.plist"

#取版本號
bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${project_infoplist_path}")

#取build值
bundleVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" "${project_infoplist_path}")

DATE="$(date +%Y%m%d)"
IPANAME="${APP_NAME}_V${bundleShortVersion}_${DATE}.ipa"

#要上傳的ipa文件路徑
IPA_PATH="$HOME/Desktop/iPAs/${IPANAME}"
echo ${IPA_PATH}
echo "${IPA_PATH}">> text.txt

# 下面2行是沒有Cocopods的用法
echo "=================clean================="
xcodebuild -target "${APP_NAME}"  -configuration 'Release' clean

echo "+++++++++++++++++build+++++++++++++++++"
xcodebuild -target "${APP_NAME}" -sdk iphoneos -configuration 'Release'  SYMROOT='$(PWD)'

xcrun -sdk iphoneos PackageApplication "./Release-iphoneos/${APP_NAME}.app" -o ~/Desktop/iPAs/"${IPANAME}"


# 設置上傳到 Fir
FIRTOKEN="6815935ea0c92e69d30793d7f81a26f2"

fir l ${FIRTOKEN}
fir p ${IPA_PATH}

 

b.手動配置證書的Shell腳本

# 工程名---- 手動證書
APP_NAME="TEST"
# 證書
CODE_SIGN_DISTRIBUTION="iPhone Distribution: ZheXinIT (MZJ4H7VF63)"
# info.plist路徑
project_infoplist_path="./${APP_NAME}/Info.plist"

#取版本號
bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${project_infoplist_path}")

#取build值
bundleVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" "${project_infoplist_path}")

DATE="$(date +%Y%m%d)"
IPANAME="${APP_NAME}_V${bundleShortVersion}_${DATE}.ipa"

#要上傳的ipa文件路徑
IPA_PATH="$HOME/Desktop/iPAs/${IPANAME}"
echo ${IPA_PATH}
echo "${IPA_PATH}">> text.txt

# 下面2行是沒有Cocopods的用法
echo "=================clean================="
xcodebuild -target "${APP_NAME}"  -configuration 'Release' clean

echo "+++++++++++++++++build+++++++++++++++++"
xcodebuild -target "${APP_NAME}" -sdk iphoneos -configuration 'Release' CODE_SIGN_IDENTITY="${CODE_SIGN_DISTRIBUTION}" SYMROOT='$(PWD)'

xcrun -sdk iphoneos PackageApplication "./Release-iphoneos/${APP_NAME}.app" -o ~/Desktop/iPAs/"${IPANAME}"

# 設置上傳到 Fir
FIRTOKEN="6815935ea0c92e69d30793d7f81a26f2"

fir l ${FIRTOKEN}
fir p ${IPA_PATH}

 

5.6構建后步驟

可以發送郵件、上傳蒲公英等操作

然后保存,應用。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM