iOS使用Jenkins自動(dòng)打包ipa且生成二維碼

這篇文章提供的方法比較多坑, 請(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

  1. 終端命令查看mac電腦是否安裝了java sdk, 輸入查看java 版本的命令行:
    **注意**: 必須安裝jdk 8---jdk 11 之間的版本, 版本太高的話就啟動(dòng)不來jenkins
java --version

新電腦肯定會(huì)報(bào) "No Java runtime present, requesting install"

  1. 安裝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

  1. 終端命令查看mac電腦是否安裝了brew, 輸入查看brew 版本的命令行:
brew --version

新電腦肯定會(huì)報(bào) "command not found brew"

  1. 安裝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/
1

2

安裝jenkins完成后, 輸入命令行, 打開運(yùn)行jenkins,

 java -jar  /Applications/Jenkins/jenkins.war 

然后打開瀏覽器輸入網(wǎng)址: http://localhost:8080/ 進(jìn)入以下頁面

image.png

這里需要我們輸入Jenkins的密碼, 這個(gè)安裝密碼保存在我們安裝jenkins的目錄下,
輸入下面這句命令行: 進(jìn)入jenkins的安裝目錄, 由于secrets文件夾是保密了的不可以讀寫, 需要你查看此文件夾的簡(jiǎn)介, 然后修改為可以讀. 密碼就在secrets文件夾里面的initialAdminPassword文件里面, initialAdminPassword文件也是受保護(hù)的需要你修改可讀寫屬性.

open /Users/Shared/Jenkins/Home/

打開initialAdminPassword文件復(fù)制里面的密碼, 粘貼到瀏覽器上面的輸入框, 出現(xiàn)下面插件圖示,

image.png

直接下一步
560

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

安裝成功后, 輸入個(gè)人賬戶,


image.png

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


image.png

重啟jenkins: 在瀏覽器輸入地址: localhost:8080/restart

四. 配置Jenkins

創(chuàng)建新項(xiàng)目

image.png

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


image.png
  • 配置 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包 和 二維碼

image.png

注意注意!

近期反饋homebrew安裝更新很多問題, 安裝jenkins還有一個(gè)解決方案, 用Tomcat配合jenkins.war運(yùn)行Jenkins項(xiàng)目

    1. 需要去Tomcat官網(wǎng)下載一個(gè)包安裝在電腦上http://tomcat.apache.org/
      image.png
  • 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更改文件一致));

  • 7、去Jenkins官網(wǎng)下載一個(gè)war包

  • 8、把解壓的war放入Tomcat的webapps的目錄下:


    image
  • 9、在瀏覽器輸入網(wǎng)址 localhost:8080/jenkins/
    此時(shí)頁面可能在刷新,我們只需要等待幾分鐘即可,然后就會(huì)跳轉(zhuǎn)到如下頁面:
    這里的密碼輸入?yún)⒖急疚恼律厦? 有提到.


    image

注意 **jenkins會(huì)自動(dòng)安裝在root目錄下, 請(qǐng)把它重置放在你的用戶目錄下, 這樣才能有權(quán)限執(zhí)行 **

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

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