<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Jenkins 實現(xiàn) iOS 項目自動打包

          共 8286字,需瀏覽 17分鐘

           ·

          2021-12-31 05:16

          ????關注后回復 “進群” ,拉你進程序員交流群????

          轉自:掘金  Perry_6

          https://juejin.cn/post/6920469161021816846

          Jenkins 概述

          Jenkins 是一款流行的開源持續(xù)集成(Continuous Integration)工具,廣泛用于項目開發(fā),具有自動化構建、測試和部署等功能。Jenkins用Java語言編寫,可在Tomcat等流行的servlet容器中運行,也可獨立運行。通常與版本管理工具(SCM)、構建工具結合使用。常用的版本控制工具有SVN、GIT,構建工具有Maven、Ant、Gradle。

          安裝 Jenkins

          由于Jenkins 依賴于Java,所以在安裝Jenkins前,需要先檢查是否已安裝Java環(huán)境。在終端輸入命令進行檢測:

          $ java -version

          前往官網(wǎng)下載

          點擊進入安裝說明頁面,可以按照提示命令安裝

          使用 Homebrew 軟件包管理器安裝Jenkins 。

          自制安裝程序 jenkins-lts 。

          安裝命令:

          • 安裝最新的LTS版本brew install jenkins-lts
          • 安裝特定的LTS版本:brew install jenkins-lts@YOUR_VERSION
          • 啟動 Jenkins 服務brew services start jenkins-lts
          • 重新啟動 Jenkins 服務:brew services restart jenkins-lts
          • 更新 Jenkins 版本:brew upgrade jenkins-lts

          安裝步驟

          • 啟動 Jenkins 服務后,瀏覽 http://localhost:8080 ,該頁面需要確認是管理員安裝,讓我們輸入密碼,密碼存放在紅色的目錄下,取出來填到輸入框里就行。
          • 選擇安裝推薦的插件。
          • 等待插件安裝完成,有的插件可能會安裝失敗,建議重試,直到把建議安裝的都裝好。
          • 插件安裝完成后會自動跳轉到配置完管理員賬戶
          • 點擊保存并完成,完成注冊

          Jenkins 配置

          打開瀏覽器,輸入localhost:8080,即可打開Jenkins,輸入密碼,點擊繼續(xù)。

          重啟Jenkins

          因部分插件依賴可能出現(xiàn)錯誤 待創(chuàng)建好用戶后,可以重啟Jenkins,并用剛創(chuàng)建的賬戶或者admin賬戶登錄Jenkins。重啟Jenkins方法,命令行中輸入jenkins-lts,回車即可。

          安裝iOS相關插件

          iOS打包需要鑰匙串中訪問證書、描述文件等,所以我們要安裝鑰匙串和描述文件插件。進入Jenkins->系統(tǒng)管理->插件管理安裝相關插件,可通過右上角過濾搜索。然后選擇需要安裝的插件,進行勾選,安裝。安裝成功后可以選擇是否重啟Jenkins。 等待安裝完成后重啟 jenkins

          配置鑰匙串

          成功之后,我們可以在Jenkins首頁->系統(tǒng)管理中發(fā)現(xiàn)剛才我們安裝的Keychains and Provisioning Profiles Management,點擊進入配置鑰匙串和描述文件。 上傳keychain和provisioning Profile文件。 可以在鑰匙串中看到登錄的鑰匙串路徑,然后只需要按照路徑找到這個文件上傳(點擊upload)即可。 注意:login.keychain-db是上傳不了的,我們需要復制一份,改為login.keychain。另外上傳的時候,找不到路徑,是因為資源庫被隱藏起來了,需要使用command+shift+.將其顯示出來,就可以了。 注意:Code Signing Identity是可以配置多個的,我們可以把通知證書、發(fā)布證書都加入到里面,方法就是點擊下面的Add Code Sign Identity。

          配置描述文件

          先上傳Provisioning Profiles文件,這些文件的路徑為/Users/[你的電腦用戶名]/Library/MobileDevice/Provisioning Profiles,在此路徑下找到相應的項目的profile文件上傳,拖入終端會顯示整個路徑,復制過來,點擊保存就OK了,現(xiàn)在 Jenkins不需要一個一個上傳描述文件了??。 到此為止整個插件配置完成

          創(chuàng)建一個工程

          新建任務

          選第一個,輸入工程名稱,點擊確定。

          構建配置

          General

          源碼管理

          我使用Git,credentials是登錄的賬號密碼,打包分支可以根據(jù)需要設置 如果沒有添加一個,如下圖

          構建環(huán)境

          選擇剛才插件填寫的對應證書。

          構建(關鍵)

          點擊增加構建步驟,選擇執(zhí)行shell,輸入打包腳本

          腳本說明

          -exportArchive有一個文件adhoc_ExportOptions.plist。 不用自己創(chuàng)建,可以使用xcode導出ipa后,從導出的文件夾里獲取。名字為ExportOptions.plist,修改一下名字就行了 method:有四種渠道。我將他們做了區(qū)分,分成四個不同的plist文件。

          分別為 app-store ad-hoc enterprise development

          打包導出ipa后需要執(zhí)行上傳內(nèi)測或應用平臺,我是上傳的蒲公英, 使用cURL直接上傳到蒲公英,具體命令蒲公英官方有提供 蒲公英API,獲取uKey 和 _api_key也是在這個頁面

          到這里就配置完了,點擊保存,可以開始構建了。

          附打包腳本

          #!/bin/sh
          export LANG=en_US.UTF-8

          # 1.設置配置標識,編譯環(huán)境(根據(jù)需要自行填寫 release |debug )
          configuration="release"

          # 工程名(根據(jù)項目自行填寫)
          APP_NAME="TestDome"

          # TARGET名稱(根據(jù)項目自行填寫)
          TARGET_NAME="TestDome"

          # ipa前綴(根據(jù)項目自行填寫)
          IPA_NAME="測試"

          # info.plist路徑
          #project_infoplist_path="./${TARGET_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-%H-%M-%S)
          # 工程文件路徑
          ARCHIVE_NAME="${APP_NAME}_${DATE}.xcarchive"
          # 存放ipa的文件夾名稱(根據(jù)自己的喜好自行修改)
          IPANAME="${APP_NAME}_${DATE}_IPA"

          # 工程根目錄#工程源碼目錄(這里的${WORKSPACE}是jenkins的內(nèi)置變量表示(jenkins job的路徑):/Users/plz/.jenkins/workspace/TestDome/)
          # ${WORKSPACE}/TestDome/ 中的TestDome根據(jù)你的項目自行修改
          CODE_PATH="${WORKSPACE}"

          # 要上傳的ipa文件路徑 ${username} 需要換成自己的用戶名
          ROOT_PATH="/Users/${username}/Desktop/Jenkins"
          ARCHIVE_PATH="${ROOT_PATH}/Archive/${ARCHIVE_NAME}"
          IPA_PATH="${ROOT_PATH}/Export/${IPANAME}"
          echo "ARCHIVE_PATH: ${ARCHIVE_PATH}"
          echo "IPA_PATH: ${IPA_PATH}"
          echo "IPA_PATH:\n${IPA_PATH}">> export_history.txt

          # 導包方式(這里需要根據(jù)需要手動配置:AdHoc/AppStore/Enterprise/Development)
          EXPORT_METHOD="AdHoc"
          # 導包方式配置文件路徑(這里需要手動創(chuàng)建對應的XXXExportOptionsPlist.plist文件,并將文件復制到根目錄下[我這里在源項目的根目錄下又新建了ExportPlist文件夾專門放ExportPlist文件])
          if test "$EXPORT_METHOD" = "AdHoc"then
              EXPORT_METHOD_PLIST_PATH=${CODE_PATH}/ExportOptions/AdHocExportOptions.plist
          elif test "$EXPORT_METHOD" = "AppStore"then
              EXPORT_METHOD_PLIST_PATH=${CODE_PATH}/ExportOptions/AppStoreExportOptios.plist
          elif test "$EXPORT_METHOD" = "Enterprise"then
              EXPORT_METHOD_PLIST_PATH=${CODE_PATH}/ExportOptions/EnterpriseExportOptions.plist
          else
              EXPORT_METHOD_PLIST_PATH=${CODE_PATH}/ExportOptions/DevelopmentExportOptions.plist
          fi

          # 指ipa定輸出文件夾,如果有刪除后再創(chuàng)建,如果沒有就直接創(chuàng)建
          if test -d ${IPA_PATH}then
              rm -rf ${IPA_PATH}
              mkdir -pv ${IPA_PATH}
               echo ${IPA_PATH}
          else
               mkdir -pv ${IPA_PATH}
          fi

          # 進入工程源碼根目錄
          cd "${CODE_PATH}"

          # 執(zhí)行pod
          pod install --verbose --no-repo-update

          #mkdir -p build

          # 清除工程
          echo "++++++++++++++++clean++++++++++++++++"
          xcodebuild clean -workspace ${APP_NAME}.xcworkspace -scheme ${APP_NAME} -configuration ${configuration}

          # 將app打包成xcarchive格式文件
          echo "+++++++++++++++++archive+++++++++++++++++"
          xcodebuild archive -workspace ${APP_NAME}.xcworkspace -scheme ${APP_NAME} -configuration ${configuration} -archivePath ${ARCHIVE_PATH}

          # 將xcarchive格式文件打包成ipa
          echo "+++++++++++++++++ipa+++++++++++++++++"
          xcodebuild -exportArchive -archivePath ${ARCHIVE_PATH} -exportPath "${IPA_PATH}" -exportOptionsPlist ${EXPORT_METHOD_PLIST_PATH} -allowProvisioningUpdates

          # 刪除工程文件
          # echo "+++++++++刪除工程文件+++++++++"
          # rm -rf $ARCHIVE_PATH


          # 蒲公英上傳結果日志文件路徑
          PGYERLOG_PATH="${IPA_PATH}/upload_pgyer_log"
          # 創(chuàng)建蒲公英上傳結果日志文件夾
          mkdir -p ${PGYERLOG_PATH}
          # 創(chuàng)建蒲公英上傳結果日志文
          touch "${PGYERLOG_PATH}/log.txt"

          # 上傳IPA到蒲公英 根據(jù)蒲公英官方文檔編寫
          file_path="${IPA_PATH}/${IPA_NAME}.ipa"
          echo "正在上傳文件"
          echo $file_path
          curl -F "file=@${file_path}" -F "uKey=0ea4142136d51cbe5aaf94cdbf6aaeb1" -F "_api_key=16d3ff684c5576f9d9f6c958cf0a7300" https://upload.pgyer.com/apiv1/app/upload

          構建 (打包上傳)

          立即構建

          點擊立即構建開始構建

          點擊構建版本可以查看狀態(tài)和控制臺輸出信息

          Jenkins 打包 ipa 常見錯誤匯總

          問題1. pod時候會出現(xiàn) command not found

          當你jenkins服務在非OS X系統(tǒng)運行時,使用Mac節(jié)點的配置稍微不一樣。

          解決方案

          • 系統(tǒng)管理-系統(tǒng)配置-全局屬性

          值:在終端中輸入echo $PATH將輸出內(nèi)容復制填寫。

          問題2:ipa包導出失敗,導致報錯:curl: (26) Failed to open/read local data from file/application

          1.先去文件路徑下查看打包是否成功,路徑下包含已經(jīng)IPA文件,確定路徑?jīng)]有問題;
          2.查看腳本文件中的路徑,腳本中的ipa名稱與打包出來的IPA文件的名稱不一致。
          解決方案

          將腳本中的ipa名稱改為應用的顯示名稱

          問題3. 打包時報錯:error: exportArchive: The data couldn’t be read because it isn’t in the correct format.

          解決方案 1

          xcode archive 導出 ipa 時不要勾選 Rebuild from Bitcode ,導出的 ExportOptions.plist 替換項目目錄下的 AdHocExportOptions.plist

          解決方案 2

          需要把xcode上的BitCode關閉,設置成No即可,project和targets里面對應的BitCode都需要關閉

          問題4. 打包時報錯:xcodebuild: error: 'APP.xcworkspace' does not exist

          解決方案
          Choose Product > Scheme > Manage Schemes.
          Share your scheme:

          也可能是Xcode Workspace File 路徑錯誤

          問題5. 編輯報錯 error: /Users/plz/.jenkins/workspace/target_name/Pods/Target Support Files/Pods-HIGO/Pods-HIGO.release.xcconfig: unable to open file (in target "target_name" in project "target_name") (in target 'target_name' from project 'target_name')

          解決方案

          shell腳本中添加如下命令

          1. sudo gem install cocoapods --pre
          2. pod install
          如果不行 加上 3. pod update        

          問題6. 編輯報錯 This project contains no schemes

          解決方案

          這里我們不能去Jenkins項目目錄下修改Xcode項目的shared勾選,我們應該在本地的開發(fā)源碼上修改,然后提交到git遠程倉庫,再次構建!!

          問題7. 編輯報錯 `xcodebuild -exportArchive -archivePath /xxx.xcarchive -exportOptionsPlist /Users/xxx/ExportOptions.plist -allowProvisioningUpdates -exportPath ./

          error: archive not found at path '/xxx.xcarchive' Build step 'Execute shell' marked build as failure`

          解決方案

          用腳本構建時,腳本輸寫錯誤

          問題8. 編輯報錯 error: archive not found at path '/Users/plz/Desktop/Jenkins/HIGO/Archive/HIGO_20210122-15-43-31.xcarchive'

          查看日志發(fā)現(xiàn)在執(zhí)行 pod install 時中斷了,引入的三方庫沒有拉下來

          解決方案

          按照日志提示 shell 腳本 pod install 前執(zhí)行 pod update PLPlayerKit --no-repo-update

          參考文章

          Jenkins+github+fir持續(xù)集成iOS項目

          iOS: Jenkins + xcodebuild打包ipa + 上傳蒲公英

          -End-

          最近有一些小伙伴,讓我?guī)兔φ乙恍?nbsp;面試題 資料,于是我翻遍了收藏的 5T 資料后,匯總整理出來,可以說是程序員面試必備!所有資料都整理到網(wǎng)盤了,歡迎下載!

          點擊??卡片,關注后回復【面試題】即可獲取

          在看點這里好文分享給更多人↓↓

          瀏覽 77
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲激情黄色视频 | 123艹逼网 | 日韩黄色影院 | 性爱视频免费无码 | 青青草在线视频网站 |