目标:自动更新代码+打包+上传蒲公英+发二维码到测试人员的邮箱
1、Jenkins的介绍、安装不多说,直接上配置截图和说明
系统配置:
项目配置:
2、Shell 脚本和说明,直接上源码
build_using_gym.sh
!/bin/bash
计时
SECONDS=0
假设脚本放置在与项目相同的路径下
project_path=$(pwd)
取当前时间字符串添加到文件结尾
now=$(date +"%Y_%m_%d_%H_%M_%S")
指定项目的scheme名称
scheme="SnapEcgDoctor"
指定要打包的配置名,位于XCode 设置下面,默认有‘Debug’和‘Release’两个,也可以自己创建多个来区分不同环境的版本
configuration="Release"
指定打包所使用的输出方式,目前支持{app-store, ad-hoc, enterprise, development}即xcodebuild的method参数
export_method='development'
代码根目录
baseDir=$(cd "$(dirname "$0")"; pwd)
echo "Base dir is: ${baseDir}"
svn 操作
svn cleanup ${baseDir}
svn update ${baseDir} #svn更新项目文件
cocoapod
cd ${baseDir}
pod install --verbose --no-repo-update
指定项目地址
workspace_path="${baseDir}/SnapEcgDoctor.xcworkspace"
指定输出路径
output_path="${baseDir}/${configuration}/${now}"
指定输出归档文件地址
archive_path="$output_path/${configuration}_${now}.xcarchive"
指定输出ipa地址
ipa_path="$output_path/${configuration}_${now}.ipa"
指定输出ipa名称
ipa_name="${configuration}_${now}.ipa"
获取执行命令时的commit message
commit_msg="$1"
输出设定的变量值
echo "===workspace path: ${workspace_path}==="
echo "===archive path: ${archive_path}==="
echo "===ipa path: ${ipa_path}==="
echo "===export method: ${export_method}==="
echo "===commit msg: $1==="
先清空前一次build
gym --workspace ${workspace_path} --scheme ${scheme} --clean -->configuration ${configuration} --archive_path ${archive_path} --export_method >${export_method} --output_directory ${output_path} --output_name ${ipa_name}
上传到fir
fir publish ${ipa_path} -T fir_token -c "${commit_msg}"
自动化上传蒲公英
蒲公英上的User Key
uKey="e91380a7110fc3852558bda4374f4f6b"
蒲公英上的API Key
apiKey="##################", 项目的apikey值
执行上传至蒲公英的命令
echo "++++++++++++++upload+++++++++++++"
curl -F "file=@${ipa_path}" -F "uKey=${uKey}" -F "_api_key=${apiKey}" >http://www.pgyer.com/apiv1/app/upload
输出总用时
echo "===打包+上传蒲同英成功. 总耗费时间: ${SECONDS}s==="
3、补充说明
我没有使用Jenkins里面的XCode插件,而是用gym直接打包,这是一个ruby环境。gym+ruby安装请百度。
4、打包结果展示
4、填坑说明
大部分的坑都会出现在代码里,如果发现本地代码和Jenkins下载的代码不同,而且不知道如何解决,那就拷贝一份本地代码进去!
比如我就遇见pod的Header文件夹在Jenkins下面变成了文本,只能替换掉~~~~~~~~~~~
如果遇见了cocoapods问题,就用pod setup解决吧!如果一次不行,那就两次。
其他问题,网上都有答案,我遇见的问题连外国人都没有见过,就不用搜了。