这篇文章提供的方法比较多坑, 请参考另外一篇最新的:https://www.jianshu.com/p/c9075e7005e2 , 最新的方法已经实践目前已经使用.
本文概述
本文将会带领大家一步步实现iOS自动打包, 自动生成ipa安装包和二维码供给测试工程师进行扫描安装.
网络上关于这类博客众多且繁杂, 本人亲测很多已经过时, 大家不要再重复踩坑了. 以下方法流程是我今天亲自用新电脑走的流程, 现详细分解给大家.
一. 安装Java JDK
Jenkins依赖了Java环境,所以在安装Jenkins前,要确保mac系统要安装了Java
- 终端命令查看mac电脑是否安装了java sdk, 输入查看java 版本的命令行:
**注意**: 必须安装jdk 8---jdk 11 之间的版本, 版本太高的话就启动不来jenkins
java --version
新电脑肯定会报 "No Java runtime present, requesting install"
- 安装Java JDK网址: Java SDK, 安装包下载完直接安装即可.
- (如果你下载有pkg安装包, 可以通过命令行: open /Library/Java/JavaVirtualMachines 打开需要安装到java jdk的目录 把jdk解压包放里面去)
二. 安装home brew (跳过吧, 先看第三步, 第二步现在太多坑了 (还是tomcatyun'xjenkins安装包的方式比较好)
)
jenkins的命令行下载安装需要借助homebrew, 所以要先下载安装homebrew
- 终端命令查看mac电脑是否安装了brew, 输入查看brew 版本的命令行:
brew --version
新电脑肯定会报 "command not found brew"
- 安装brew网址: https://brew.sh/
image.png
- brew网址说得很清晰, 在命令行输入以下这行命令就能安装
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
踩坑啦掉坑啦
:
终端报错:
xcode-select: error: invalid developer directory '/Library/Developer/CommandLineTools'
Failed during: /usr/bin/sudo /usr/bin/xcode-select --switch /Library/Developer/CommandLineTools
- 提示为无效的CommandLineTools, 新版本的xcode默认没有安装这个东西了.
-解决办法1: 手动下载安装, 下载网址: https://developer.apple.com/download/more/
image.png
-解决办法2: 命令行安装: 新打开一个终端输入:xcode-select --install
一步步确认安装就好了.
- 然后重新在命令行输入以下这行命令
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
又掉坑啦😿
以上这个官方最新的命令行并不能成功安装brew
经过一翻操作, 找到能解决的办法
`Homebrew`以前的默认安装命令行:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
`安装以上这行代码成功了!`
*******************************************************************************************************
如果你安装失败, 请使用下面的命令:
/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) ,仅修改了仓库地址部分,不会产生安全隐患,
三. 安装Jenkins
安装Jenkins有两种方法
- 使用命令行安装 (太多坑了 brew总是更新安装失败)
- 使用jenkins.pkg安装 (推荐使用) jenkins下载地址: https://www.jenkins.io/download/
2
安装jenkins完成后, 输入命令行, 打开运行jenkins,
java -jar /Applications/Jenkins/jenkins.war
然后打开浏览器输入网址: http://localhost:8080/ 进入以下页面
这里需要我们输入Jenkins的密码, 这个安装密码保存在我们安装jenkins的目录下,
输入下面这句命令行: 进入jenkins的安装目录, 由于
secrets
文件夹是保密了的不可以读写, 需要你查看此文件夹的简介, 然后修改为可以读. 密码就在secrets
文件夹里面的initialAdminPassword
文件里面, initialAdminPassword
文件也是受保护的需要你修改可读写属性.
open /Users/Shared/Jenkins/Home/
打开initialAdminPassword
文件复制里面的密码, 粘贴到浏览器上面的输入框, 出现下面插件图示,
直接下一步
560
如果没出现上面图示, 刷新一下页面就会出现. 这里需要等待20分钟左右...看你们公司网速吧...
这里尽量多安装你所需要的插件, 如果这里不安装, 后面需要你手动查询安装
安装成功后, 输入个人账户,
image.png
jenkins算是启动成功了!
image.png
重启jenkins: 在浏览器输入地址: localhost:8080/restart
四. 配置Jenkins
创建新项目
image.pngJenkins创建新项目配置环境
image.png
配置 general
image.png
image.png
image.png
配置好的generea最终在打包界面长成这样:
image.png
- 配置 Source Code Management
image.png
配置ssh, 至于怎样生成SSH请查看我的文章: https://www.jianshu.com/p/7bce93f452b5
image.png
image.png
id_rsa 文件里面的内容记得要copy 全部 !!!
-还需要把git路径确认一下
image.png
image.png
配置打包的环境名称:
image.png
打包执行脚本的配置:
image.png
相关脚本如下
#修改版本号,build号
# 2020.3.27号修改为: 去掉设置版本号选项,直接使用工程中的版本号
file_path=${PWD}/Configs/Environment/$server.xcconfig
echo "使用Jenkins自增编号 ${BUILD_NUMBER}"
sed -i "" 's/APP_BUILD_NUMBER = .*/APP_BUILD_NUMBER = '"${BUILD_NUMBER}"'/g' ${file_path}
echo "开始自动化构建"
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仓库,确保能够找到最新的版本
pod repo update JimuSpecs
pod install
#加密编译参数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 "关闭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
#导出ipa包
xcodebuild -exportArchive -archivePath ${archive_file_name} -exportPath ${archive_path} \
-exportOptionsPlist ${export_options_path}
echo "构建完成,创建对应的配置文件以及二维码"
# 到这里,在archive/自增编号/目录下存在两个文件:Jimu.ipa和Jimu.xcarchive
#重命名 【分支名_证书配置_服务器配置_构建自增编号】
name="jimu"_${branch##*/}_${configuration}_${server}_${BUILD_NUMBER}
# 2020.3.27更新,使用本地服务器存储plist文件
# 重命名
mv ${PWD}/archive/${BUILD_NUMBER}/Jimu.ipa ${PWD}/archive/${BUILD_NUMBER}/$name.ipa
# 移动到apache目录下
cp ${PWD}/archive/${BUILD_NUMBER}/$name.ipa /Users/max/Sites/Jimu/ipa/$name.ipa
echo "创建对应的配置文件以及二维码"
cd /Users/max/Sites/Jimu/ipa
#复制配置文件,生成当前版本的配置文件
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
#给读写权限
chmod -R 777 /Users/max/Sites/
#以下是旧版的脚本内容
#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 #复制配置文件,生成当前版本的配置文件
#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更新,使用本地的服务器存储plist文件
echo "创建二维码"
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}/
#以下是旧版的脚本内容
#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进行分析"
#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
#根据bundle id 确定bugly平台的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
#读取版本号
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 "读取版本号结果: ${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文件结束"
fi
编译完成后的动作
image.png
archive/${BUILD_NUMBER}/*.ipa, archive/${BUILD_NUMBER}/*.jpg, archive/${BUILD_NUMBER}/**/Jimu.app.dSYM
五. 最终打出来的ipa包 和 二维码
image.png注意注意!
近期反馈homebrew安装更新很多问题, 安装jenkins还有一个解决方案, 用Tomcat配合jenkins.war运行Jenkins项目
- 需要去Tomcat官网下载一个包安装在电脑上http://tomcat.apache.org/
image.png
- 需要去Tomcat官网下载一个包安装在电脑上http://tomcat.apache.org/
-
2、安装在资料库的目录下:例如:/Users/XXX(个人电脑名称)/Library
-
3、然后进入Tomcat 的bin目录下
image -
4/出现红色标识时,需要增加权限,输入: chmod +x *.sh,配置所有权限
chmod +x *.sh
- 5、启动Tomcat
./startup.sh
-
6、在浏览器打开:localhost:8080 ,打开界面如下:
image(可能出现的问题:端口号被占,需要更换端口号,更换端口号步骤,(Mac版与Windows更改文件一致));
-
8、把解压的war放入Tomcat的webapps的目录下:
image -
9、在浏览器输入网址 localhost:8080/jenkins/
此时页面可能在刷新,我们只需要等待几分钟即可,然后就会跳转到如下页面:
这里的密码输入参考本文章上面, 有提到.
image
网友评论