iOS Jenkins自動化打包上傳躺坑記

  一說到自動打包很多人想到的就是jenkins,正好這段時間比較閑,我也研究了一下利用jenkins來自動打包上傳蒲公英。
我看到網(wǎng)上有很多寫Jenkins的文章,但是我發(fā)現(xiàn)我按照網(wǎng)上的文章步驟一步一步去弄還是踩了不少坑,費了不少勁,可能是每個人的項目情況背景不一樣,所以碰到的問題,處理問題的方法也不一樣吧。Jenkins安裝網(wǎng)上有很多教程這里我就不說的,我就說說我自己的項目情況,及我在配置的過程中所遇到的問題及如何解決的。
 所以說這篇文章就建立在你已經(jīng)裝好了jenkins環(huán)境的基礎(chǔ)上的。

項目情況:

  • cocopods代碼管理
  • 碼云源碼管理
  • 上傳蒲公英
  • Xcode9.2
  • 打包用的手動簽名
1.新建配置流程

瀏覽器輸入:http://localhost:8080 打開jenkins 輸入jenkins賬號密碼

屏幕快照 2018-01-10 下午3.35.47.png
點新建
屏幕快照 2018-01-10 下午3.37.36.png

輸入你的項目名稱,選擇構(gòu)建一個自由風(fēng)格的軟件項目,然后確認,你就會來到這個頁面:

屏幕快照 2018-01-10 下午3.39.56.png

這里我想特別提一下
屏幕快照 2018-01-10 下午3.47.29.png
    general->源碼管理->構(gòu)建觸發(fā)器->構(gòu)建環(huán)境->構(gòu)建->構(gòu)建后操作 我們在執(zhí)行構(gòu)建的時候
是按這個順序去執(zhí)行的,所以當(dāng)我們在構(gòu)建的過程中只要前面的有錯,后面的就不會再執(zhí)行了,比
如我在源碼管理這一塊配置錯了,那么我在構(gòu)建的時候源碼管理后面的就都不會再執(zhí)行了,你解決
錯誤的時候就看源碼管理的這塊就行,執(zhí)行到哪里有錯我們就解決哪里的問題

一.General配置

general 里面都是一些普通的設(shè)置,基本不需要做特殊的處理,但是我們在調(diào)試jenkins的過程中可能會構(gòu)建很多次(比如我調(diào)通都構(gòu)建了兩百多次,心塞~~),所以我們可以在選擇general 里面選擇丟棄舊的構(gòu)建
屏幕快照 2018-01-10 下午3.44.26.png

到這里General配置基本就這么多。

二.源碼管理
源碼我們先項目用的是碼云的git管理,配置如下:


E91D7454-7873-41A1-A5E3-BD9AB7E23D0E.png

選Git->git倉庫地址(URL)->驗證(Credentials)->需要拉取的分支帶啦(這里我拉取的是master代碼),一般我們git管理有兩種url地址,一種是git@*****.git格式的,一種是https://****.git。這里我選擇的是git@的,這種需要ssh驗證,需要添加公鑰,私鑰。而https則需要我在add那里添加賬號密碼,但是親測https的即便添加了賬號密碼也還是沒有克隆下來,一直停留在checking那一步?jīng)]有動了,后面查資料說https的還要做其它操作,因而我放棄了采用了git ssh驗證的方式添加公鑰私鑰。具體操作如下:
  • 打開終端, 輸入命令 cd ~/.ssh 進入.ssh文件下,然后輸入:ssh-keygen -t rsa -C "賬號",按下來按回車會出現(xiàn)給公鑰起名,起過名之后再給公鑰設(shè)置密碼(如果不需要設(shè)置密碼直接按回車),結(jié)果如下:


    C8F46B07-3F9A-4C56-86FC-EAD3427BF877.png

    然后ls ,我們就可以看到.ssh 問價夾下多了test跟test.pub兩個文件


    屏幕快照 2018-01-11 上午10.03.09.png
  • 碼云配置,登錄碼云,點設(shè)置->SSH公鑰,添加標(biāo)題,然后把剛剛生成的test.pub文件內(nèi)容粘貼到公鑰哪里,確認,到此碼云配置就OK了


    B0C39F48-D55A-47EA-A641-768B25DD614D.png
  • jenkins配置?;氐絡(luò)enkins源碼管理,為Git添加Credentials。點擊Add:


    屏幕快照 2018-01-11 上午10.15.07.png

    Kind選擇SSH Username with PrivateKey ,用戶名可以自己看著填,將剛剛生成的test 文件內(nèi)容(即私鑰)粘貼到Key里面確認添加。源碼管理到目前為止就差不多了,我們從git上下載源碼的時候由于網(wǎng)速及其它因素,可能時間會比較長,但是Jenkins默認的克隆過期時間為10分鐘,所以我們可以設(shè)置長一點,我這里設(shè)置了50分鐘


    屏幕快照 2018-01-11 上午10.22.02.png

三.構(gòu)建觸發(fā)器

屏幕快照 2018-01-11 上午10.39.21.png

我這里設(shè)置的是每天6點到18點,每隔一小時檢查有沒有源碼更新構(gòu)建一次,具體的你可以自己定義,網(wǎng)上有很多相關(guān)教程
jenkins構(gòu)建觸發(fā)器定時任務(wù)Build periodically和Poll SCM【轉(zhuǎn)載】
四.構(gòu)建環(huán)境
這塊我都是默認的沒有做選擇,因為我的xcode配置,證書配置都是根據(jù)后面的腳本來完成的

屏幕快照 2018-01-11 上午10.45.00.png

四.構(gòu)建
點擊增加構(gòu)建步驟,執(zhí)行腳本


屏幕快照 2018-01-11 上午10.46.04.png

為了方便說明我這里建了兩個shell,第一個shell是做pod操作,因為我的代碼是cocopods管理的,所以在下載完源碼后先要執(zhí)行pod install ,才能繼續(xù)后續(xù)的打包上傳


7D7E7235-98FA-4043-B763-54EF5E2654CE.png

先cd到項目響應(yīng)目錄下,這個目錄是Jenkins克隆源代碼后的目錄,然后執(zhí)行pod install

 cd "${WORKSPACE}/XZXSchool"
 export LANG=en_US.UTF-8
 /usr/local/bin/pod install

第二個shell是打包上傳相關(guān)的腳本了

#鑰匙串路徑  這幾句的意思是允許訪問鑰匙串,因為我們在打包的時候需要訪問鑰匙串 用里面的證書文件
KEY_PATH="/Users/Shared/Jenkins/Library/Keychains/login.keychain"
/usr/bin/security unlock-keychain -p ***(密碼) ${KEY_PATH}
/usr/bin/security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k ***(密碼) ${KEY_PATH}
/usr/bin/security set-keychain-settings ${KEY_PATH}
#工程名
APP_NAME="XZXSchool"
#目標(biāo)名
##
CONFIGURATION="Release"
#證書
CODE_SIGN_DEVELOPER="iPhone Developer: **** (****)"
#info.plist路徑
project_infoplist_path="${WORKSPACE}/XZXSchool/XZXSchool/Info.plist"
#取版本號
bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" ${project_infoplist_path})
DATE="$(date +%Y%m%d)"
IPANAME="${APP_NAME}_V${bundleShortVersion}_${DATE}.ipa"
#要上傳的ipa文件路徑
IPA_PATH="${WORKSPACE}/ipa"
#rm -rf $IPAPATH
#mkdir -pv $IPAPATH
ARCHIVE_NAME="${APP_NAME}.xcarchive"
#workspace路徑
WORKSPACE_PATH="${WORKSPACE}/XZXSchool/XZXSchool.xcworkspace"
#echo "+++++++++++++++++clean+++++++++++++++++"
#ExportOptions.plist文件生成,我們可以在Xcode中選好證書,按平時的流程手動打包,打包成功后會有一個ExportOptions.plist文件,我們將這個文件復(fù)制到下面這個相應(yīng)目錄下就行,然后我們的jenkins 就會自動打包一個跟我們手動打包的流程一樣的IPA包
ExportOptionsPlistPath="${WORKSPACE}/ExportOptions/ExportOptions.plist"
xcodebuild -workspace ${WORKSPACE_PATH} -scheme "${APP_NAME}"  clean
#echo "+++++++++++++++++Build+++++++++++++++++"
xcodebuild -workspace ${WORKSPACE_PATH} -scheme "${APP_NAME}" -sdk iphoneos -configuration 'Release' CODE_SIGN_IDENTITY="${CODE_SIGN_DEVELOPER}" 
#echo "+++++++++++++++++Run+++++++++++++++++"
xcodebuild archive  -workspace ${WORKSPACE_PATH} \
                    -scheme ${APP_NAME} \
                    CFBundleVersion=${bundleShortVersion} \
                    -destination generic/platform=ios \
                    -archivePath ${IPA_PATH}/${ARCHIVE_NAME}\               
xcodebuild -exportArchive -archivePath ${IPA_PATH}/${ARCHIVE_NAME}\
                          -exportPath ${IPA_PATH}\
                          -destination generic/platform=ios\
                          -exportOptionsPlist ${ExportOptionsPlistPath}\
                          -allowProvisioningUpdates
                      



#蒲公英上的User Key

uKey="*****************"

#蒲公英上的API Key

apiKey="*******************"

#蒲公英密碼

PASSWORD="********"

#MSG=git log -1 —pretty=%B

#執(zhí)行上傳至蒲公英的命令

echo "++++++++++++++upload+++++++++++++"

curl -F "file=@${IPA_PATH}/XZXSchool.ipa" -F "uKey=${uKey}" -F "_api_key=${apiKey}" -F "updateDescription=${MSG}" -F "password=${PASSWORD}" http://www.pgyer.com/apiv1/app/upload

記住里面所有的路徑都是jenkins目錄下的項目路徑。打包上傳腳本大致就是這些。但我們寫完后還是發(fā)現(xiàn)會報錯

  • 問題1
    iOS編譯簽名文件找不到

Check dependencies
Code Sign error: No codesigning identities found: No codesigning identities (i.e. certificate and private key pairs) that match the provisioning profile specified in your build settings
(“testxxxxx_Distribution_inhouse_01”) were found.

原因是jenkins以jenkins用戶身份運行,iOS項目編譯用的簽名文件要從安裝證書時的用戶目錄
~/Library/MobileDevice/Provisioning Profiles
拷貝到
/Users/Shared/Jenkins/Library/MobileDevice/Provisioning Profiles

  • 問題2
    iOS編譯證書找不到

Check dependencies
Code Sign error: No codesigning identities found: No codesigning identities (i.e. certificate and private key pairs) that match the provisioning profile specified in your build settings
(“testxxxxx_Distribution_inhouse_01”) were found.

沒找到證書,打開“鑰匙串訪問”,從“登錄”拷貝安裝的證書到“系統(tǒng)”下

  • 問題3
    User interaction is not allowed.

Signing Identity: "iPhone Distribution: ****************** Co., Ltd."
Provisioning Profile: "************"

/usr/bin/codesign --force --sign ************************************ --entitlements /Users/Shared/Jenkins/Home/workspace/****/build/**************.build/Release-iphoneos/*************.build/****.***.****--timestamp=none /Users/Shared/Jenkins/Home/workspace/********/build/Release-iphoneos/****.app

/Users/Shared/Jenkins/Home/workspace/*****/build/Release-iphoneos/****.app: User interaction is not allowed.
Command /usr/bin/codesign failed with exit code。

拷貝~/Library/Keychains/login.keychain到
Users/Shared/Jenkins/Library/Keychains/login.keychain

暫時先總結(jié)這么多,如果按照步驟還有啥不懂的,有問題的,留言看到我會回復(fù)的

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容