這篇文章提供的方法比較多坑, 請(qǐng)參考另外一篇最新的:http://www.itdecent.cn/p/c9075e7005e2 , 最新的方法已經(jīng)實(shí)踐目前已經(jīng)使用.
本文概述
本文將會(huì)帶領(lǐng)大家一步步實(shí)現(xiàn)iOS自動(dòng)打包, 自動(dòng)生成ipa安裝包和二維碼供給測(cè)試工程師進(jìn)行掃描安裝.
網(wǎng)絡(luò)上關(guān)于這類博客眾多且繁雜, 本人親測(cè)很多已經(jīng)過時(shí), 大家不要再重復(fù)踩坑了. 以下方法流程是我今天親自用新電腦走的流程, 現(xiàn)詳細(xì)分解給大家.
一. 安裝Java JDK
Jenkins依賴了Java環(huán)境,所以在安裝Jenkins前,要確保mac系統(tǒng)要安裝了Java
- 終端命令查看mac電腦是否安裝了java sdk, 輸入查看java 版本的命令行:
**注意**: 必須安裝jdk 8---jdk 11 之間的版本, 版本太高的話就啟動(dòng)不來jenkins
java --version
新電腦肯定會(huì)報(bào) "No Java runtime present, requesting install"
- 安裝Java JDK網(wǎng)址: Java SDK, 安裝包下載完直接安裝即可.
- (如果你下載有pkg安裝包, 可以通過命令行: open /Library/Java/JavaVirtualMachines 打開需要安裝到j(luò)ava jdk的目錄 把jdk解壓包放里面去)
二. 安裝home brew (跳過吧, 先看第三步, 第二步現(xiàn)在太多坑了 (還是tomcatyun'xjenkins安裝包的方式比較好) )
jenkins的命令行下載安裝需要借助homebrew, 所以要先下載安裝homebrew
- 終端命令查看mac電腦是否安裝了brew, 輸入查看brew 版本的命令行:
brew --version
新電腦肯定會(huì)報(bào) "command not found brew"
- 安裝brew網(wǎng)址: https://brew.sh/
image.png
- brew網(wǎng)址說得很清晰, 在命令行輸入以下這行命令就能安裝
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
踩坑啦掉坑啦:
終端報(bào)錯(cuò):
xcode-select: error: invalid developer directory '/Library/Developer/CommandLineTools'
Failed during: /usr/bin/sudo /usr/bin/xcode-select --switch /Library/Developer/CommandLineTools
- 提示為無效的CommandLineTools, 新版本的xcode默認(rèn)沒有安裝這個(gè)東西了.
-解決辦法1: 手動(dòng)下載安裝, 下載網(wǎng)址: https://developer.apple.com/download/more/
image.png
-解決辦法2: 命令行安裝: 新打開一個(gè)終端輸入:xcode-select --install一步步確認(rèn)安裝就好了.
- 然后重新在命令行輸入以下這行命令
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
又掉坑啦??
以上這個(gè)官方最新的命令行并不能成功安裝brew
經(jīng)過一翻操作, 找到能解決的辦法
`Homebrew`以前的默認(rèn)安裝命令行:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
`安裝以上這行代碼成功了!`
*******************************************************************************************************
如果你安裝失敗, 請(qǐng)使用下面的命令:
/usr/bin/ruby -e "$(curl -fsSL https://cdn.jsdelivr.net/gh/ineo6/homebrew-install/install)"
//上面腳本中使用了中科大鏡像來加速訪問。
安裝使用到的腳本源碼在此 [homebrew-install](https://link.zhihu.com/?target=https%3A//github.com/ineo6/homebrew-install) ,僅修改了倉(cāng)庫地址部分,不會(huì)產(chǎn)生安全隱患,
三. 安裝Jenkins
安裝Jenkins有兩種方法
- 使用命令行安裝 (太多坑了 brew總是更新安裝失敗)
- 使用jenkins.pkg安裝 (推薦使用) jenkins下載地址: https://www.jenkins.io/download/


安裝jenkins完成后, 輸入命令行, 打開運(yùn)行jenkins,
java -jar /Applications/Jenkins/jenkins.war
然后打開瀏覽器輸入網(wǎng)址: http://localhost:8080/ 進(jìn)入以下頁面

這里需要我們輸入Jenkins的密碼, 這個(gè)安裝密碼保存在我們安裝jenkins的目錄下,
輸入下面這句命令行: 進(jìn)入jenkins的安裝目錄, 由于
secrets文件夾是保密了的不可以讀寫, 需要你查看此文件夾的簡(jiǎn)介, 然后修改為可以讀. 密碼就在secrets文件夾里面的initialAdminPassword文件里面, initialAdminPassword文件也是受保護(hù)的需要你修改可讀寫屬性.
open /Users/Shared/Jenkins/Home/
打開initialAdminPassword文件復(fù)制里面的密碼, 粘貼到瀏覽器上面的輸入框, 出現(xiàn)下面插件圖示,

直接下一步

如果沒出現(xiàn)上面圖示, 刷新一下頁面就會(huì)出現(xiàn). 這里需要等待20分鐘左右...看你們公司網(wǎng)速吧...
這里盡量多安裝你所需要的插件, 如果這里不安裝, 后面需要你手動(dòng)查詢安裝
安裝成功后, 輸入個(gè)人賬戶,

jenkins算是啟動(dòng)成功了!

重啟jenkins: 在瀏覽器輸入地址: localhost:8080/restart
四. 配置Jenkins
創(chuàng)建新項(xiàng)目

Jenkins創(chuàng)建新項(xiàng)目配置環(huán)境

配置 general
image.png
image.png
image.png
配置好的generea最終在打包界面長(zhǎng)成這樣:
image.png
- 配置 Source Code Management
image.png
配置ssh, 至于怎樣生成SSH請(qǐng)查看我的文章: http://www.itdecent.cn/p/7bce93f452b5
image.png
image.png
id_rsa 文件里面的內(nèi)容記得要copy 全部 !!!
-還需要把git路徑確認(rèn)一下
image.png
image.png
配置打包的環(huán)境名稱:
image.png
打包執(zhí)行腳本的配置:
image.png
相關(guān)腳本如下
#修改版本號(hào),build號(hào)
# 2020.3.27號(hào)修改為: 去掉設(shè)置版本號(hào)選項(xiàng),直接使用工程中的版本號(hào)
file_path=${PWD}/Configs/Environment/$server.xcconfig
echo "使用Jenkins自增編號(hào) ${BUILD_NUMBER}"
sed -i "" 's/APP_BUILD_NUMBER = .*/APP_BUILD_NUMBER = '"${BUILD_NUMBER}"'/g' ${file_path}
echo "開始自動(dòng)化構(gòu)建"
echo "${PWD}"
archive_path=${PWD}/archive/${BUILD_NUMBER}
archive_file_name=${archive_path}/Jimu.xcarchive
workspace_path=${PWD}/Jimu/Jimu.xcworkspace
#install cocoapods
cd Jimu
#更新Blockly倉(cāng)庫,確保能夠找到最新的版本
pod repo update JimuSpecs
pod install
#加密編譯參數(shù)V2.3.0版本(更新于2019.7.4 Glen)
SWIFTFLAG="-Xllvm -ipo -Xllvm -ipo-percentage=80 -Xllvm -ipo-loop=1 \
-Xllvm -transform-operator-identically -Xllvm -split-basic-block"
if [ "$configuration" = 'Inhouse' ]; then
export_options_path=${WORKSPACE}/export/ExportOptionsInHouse.plist
echo "開始打InHouse版本的包"
elif [ "$configuration" = 'Debug' ]; then
export_options_path=${WORKSPACE}/export/ExportOptionsInHouse.plist
echo "開始打Debug版本的包"
elif [ "$configuration" = 'Release' ]; then
echo "關(guān)閉FileShare"
/usr/libexec/PlistBuddy -c 'Set:UIFileSharingEnabled bool false' ${PWD}/Jimu/Info.plist
export_options_path=${WORKSPACE}/export/ExportOptionsAppStore.plist
echo "開始打Release版本的包"
fi
configuration=$configuration$server
if $encryption; then
#加密歸檔
xcodebuild -toolchain "cn.ijiami.obf" -workspace ${workspace_path} -scheme Jimu \
-configuration ${configuration} OTHER_SWIFT_FLAGS="${SWIFTFLAG}" \
archive -archivePath ${archive_file_name}
else
#不加密歸檔
xcodebuild -workspace ${workspace_path} -scheme Jimu -configuration ${configuration} \
archive -archivePath ${archive_file_name}
fi
#導(dǎo)出ipa包
xcodebuild -exportArchive -archivePath ${archive_file_name} -exportPath ${archive_path} \
-exportOptionsPlist ${export_options_path}
echo "構(gòu)建完成,創(chuàng)建對(duì)應(yīng)的配置文件以及二維碼"
# 到這里,在archive/自增編號(hào)/目錄下存在兩個(gè)文件:Jimu.ipa和Jimu.xcarchive
#重命名 【分支名_證書配置_服務(wù)器配置_構(gòu)建自增編號(hào)】
name="jimu"_${branch##*/}_${configuration}_${server}_${BUILD_NUMBER}
# 2020.3.27更新,使用本地服務(wù)器存儲(chǔ)plist文件
# 重命名
mv ${PWD}/archive/${BUILD_NUMBER}/Jimu.ipa ${PWD}/archive/${BUILD_NUMBER}/$name.ipa
# 移動(dòng)到apache目錄下
cp ${PWD}/archive/${BUILD_NUMBER}/$name.ipa /Users/max/Sites/Jimu/ipa/$name.ipa
echo "創(chuàng)建對(duì)應(yīng)的配置文件以及二維碼"
cd /Users/max/Sites/Jimu/ipa
#復(fù)制配置文件,生成當(dāng)前版本的配置文件
cp Jimu.plist $name.plist
full_path=https:\/\/10.10.1.74\/Jimu\/ipa\/${name}.ipa
#修改ipa包下載路徑
/usr/libexec/PlistBuddy -c 'Set items:0:assets:0:url '"${full_path}"'' $name.plist
#給讀寫權(quán)限
chmod -R 777 /Users/max/Sites/
#以下是舊版的腳本內(nèi)容
#echo "====== Rename ipa file to: "$name" ======"
#mv ${PWD}/archive/${BUILD_NUMBER}/Jimu.ipa ${PWD}/archive/${BUILD_NUMBER}/$name.ipa
#mv ${PWD}/archive/${BUILD_NUMBER}/Jimu.xcarchive ${PWD}/archive/${BUILD_NUMBER}/$name.xcarchive
#echo "====== Create plist file for this version ipa ======"
#cd ../plist/Jimu3.0
#cp Jimu3.0.plist $name.plist #復(fù)制配置文件,生成當(dāng)前版本的配置文件
#full_path=http:\/\/10.10.1.74:8080\/job\/Jimu3.0\/${BUILD_NUMBER}\/artifact\/archive\/${BUILD_NUMBER}\/${name}.ipa
#修改ipa包下載路徑
#/usr/libexec/PlistBuddy -c 'Set items:0:assets:0:url '"${full_path}"'' $name.plist
#git status
#git checkout
#git pull
#git add -A
#git commit -m 'add new version plist file'
#git push origin master
#git status
#2020.3.27更新,使用本地的服務(wù)器存儲(chǔ)plist文件
echo "創(chuàng)建二維碼"
name="jimu"_${branch##*/}_${configuration}_${server}_${BUILD_NUMBER}
url="https://10.10.1.74/Jimu/download.html?version=$name"
myqr $url -n $name.jpg -d ./archive/${BUILD_NUMBER}/
#以下是舊版的腳本內(nèi)容
#echo "====== Create QRCode for this version ======"
#name="jimu"_${branch##*/}_${configuration}_${server}_${BUILD_NUMBER}
#url="http://10.10.1.74:8080/Jimu3.0/download.html?version=$name"
#myqr $url -n $name.jpg -d ./archive/${BUILD_NUMBER}/
#echo "====== Create QRCode Success ======"
if $uploadDYSMFile; then
echo "上傳dSYM文件到bugly進(jìn)行分析"
#dSYM文件路徑
name="jimu"_${branch##*/}_${configuration}_${server}_${BUILD_NUMBER}
path=${PWD}/archive/${BUILD_NUMBER}/Jimu.xcarchive/dSYMs
dsymFilePath=${path}/Jimu.app.dSYM
#將dSYM文件壓縮成zip文件
zip -q -r -o ${path}/Jimu.app.dSYM.zip ${dsymFilePath}
zipFilePath=${path}/Jimu.app.dSYM.zip
#根據(jù)bundle id 確定bugly平臺(tái)的appKey和appId
if [ "$configuration" = 'Inhouse' ]; then
appid="5e31ae0d11"
appkey="91927657-0c29-4c2e-8d7a-4248891a53ae"
bundleId="com.ubtechinc.jimu2s"
else
appid="47342e2edb"
appkey="a1166164-edb1-4f46-956e-0e871fbd0c1d"
bundleId="com.ubtechinc.jimu"
fi
#讀取版本號(hào)
plistFilePath=${PWD}/archive/${BUILD_NUMBER}/Jimu.xcarchive/Info.plist
version=$(/usr/libexec/PlistBuddy -c "Print ApplicationProperties:CFBundleShortVersionString" ${plistFilePath})
buildNumber=$(/usr/libexec/PlistBuddy -c "Print ApplicationProperties:CFBundleVersion" ${plistFilePath})
productVersion="${version}(${buildNumber})"
echo "讀取版本號(hào)結(jié)果: ${productVersion}"
echo "開始上傳dSYM文件"
curl -k "https://api.bugly.qq.com/openapi/file/upload/symbol?app_key=${appkey}&app_id=${appid}" \
--form "api_version=1" --form "app_id=${appid}" \
--form "app_key=${appkey}" --form "symbolType=2" \
--form "bundleId=${bundleId}" \
--form "productVersion=${productVersion}" \
--form "fileName=Jimu.app.dSYM.zip" \
--form "file=@${zipFilePath}" --verbose ||true
echo "上傳dSYM文件結(jié)束"
fi
編譯完成后的動(dòng)作
image.png
archive/${BUILD_NUMBER}/*.ipa, archive/${BUILD_NUMBER}/*.jpg, archive/${BUILD_NUMBER}/**/Jimu.app.dSYM
五. 最終打出來的ipa包 和 二維碼

注意注意!
近期反饋homebrew安裝更新很多問題, 安裝jenkins還有一個(gè)解決方案, 用Tomcat配合jenkins.war運(yùn)行Jenkins項(xiàng)目
- 需要去Tomcat官網(wǎng)下載一個(gè)包安裝在電腦上http://tomcat.apache.org/
image.png
- 需要去Tomcat官網(wǎng)下載一個(gè)包安裝在電腦上http://tomcat.apache.org/
2、安裝在資料庫的目錄下:例如:/Users/XXX(個(gè)人電腦名稱)/Library
-
3、然后進(jìn)入Tomcat 的bin目錄下
image 4/出現(xiàn)紅色標(biāo)識(shí)時(shí),需要增加權(quán)限,輸入: chmod +x *.sh,配置所有權(quán)限
chmod +x *.sh
- 5、啟動(dòng)Tomcat
./startup.sh
-
6、在瀏覽器打開:localhost:8080 ,打開界面如下:
image(可能出現(xiàn)的問題:端口號(hào)被占,需要更換端口號(hào),更換端口號(hào)步驟,(Mac版與Windows更改文件一致));
-
8、把解壓的war放入Tomcat的webapps的目錄下:
image -
9、在瀏覽器輸入網(wǎng)址 localhost:8080/jenkins/
此時(shí)頁面可能在刷新,我們只需要等待幾分鐘即可,然后就會(huì)跳轉(zhuǎn)到如下頁面:
這里的密碼輸入?yún)⒖急疚恼律厦? 有提到.
image


















