iOS使用fastlane和jenkins进行自动打包并上传到蒲
前言
年后有感于为业务和测试部门频繁的打包,太过于影响开发,就尝试搭建了一个自动化打包的平台,把自己从繁琐的打包中解救出来。
本文主要用了fastlane和jenkins上传到蒲公英,需要发布到App Store可以去参考一下其他文章。
fastlane安装
在搭建的过程中我主要参考了iOS自动化打包发布(Jenkins + Fastlane + GitLab + 蒲公英) - 简书,其中fastlane的安装在这篇文章写的简单明了,在这里我就不做过多的赘述了。
蒲公英的fastlane配置的安装,和fastlane的配置也可以参考以上文章,我主要说一下我在配置fastlane脚本时遇到的一些坑。
1.打开终端,cd你工程的根目录,并执行以下命令:
fastlane init
中间会让你输入苹果开发者账号的账号和密码,之后会在你项目工程的目录下生成一个fastlane文件夹,里面有Fastlane的配置文件,一个是Appfile文件,一个是Fastfile文件(如果要上传AppStore的话还有Deliverfile文件)。Appfile保存苹果开发者的相关信息、项目的相关信息等。Fastfile是运行脚本。
在写FastFile文件时,我遇到一坑,因为我们项目比较老,在打包的时候的时候出现了5个选项,我的gym如下:
image然后使用fastlane打包出现下面的情况:
image一下子出现了5个scheme,然后要手动输入数字才能够继续进行打包,然后我查资料,参考了这个Fastlane的gym指令 - CSDN博客,在gym里加入scheme参数解决了这个问题,参数的值要写scheme全拼,不要写数字。
最后的gym如图所示:
imagejenkins安装
jenkins安装我主要参考了蒲公英的开发文档,蒲公英 - 文档中心 - 使用 Jenkins 实现持续集成 (iOS)。
在 Mac 环境下,我们需要先安装 JDK,然后在Jenkins 的官网下载最新的 war 包。下载完成后,打开终端,进入到 war 包所在目录,执行以下命令:
java -jar jenkins.war --httpPort=8080
记住一定要用war包,我一开始去官网下载了jenkins的pkg包,安装后一直出错,最后换成war包之后才好。
jenkins的配置
最基本的配置我就不再赘述了,请参考蒲公英 - 文档中心 - 使用 Jenkins 实现持续集成 (iOS),在这我主要说一下jenkins本身一些有意思的功能和脚本的配置。
jenkins在build的时候可以添加一些参数,我根据我们的需求在jenkins上添加了两个参数,如图所示:
image第一个参数的作用是打包的时候能够输入一些日志,便于进行版本管理,第二个参数则是选择打测试包还是生产包,根据这个参数的值我们进行文件的替换。加入参数后build时的效果如图:
imagejenkins脚本设置
这一步主要用来打包 ipa 并上传到蒲公英。我们点击“增加构建步骤”,选择 "Execute Shell"。输入你的脚本,我们能在这一步做很多事。
#取到我们设置的参数,判断是打生产还是测试包
if [ $BUILD_TYPE == "Release" ];
then
#我在svn上放的是测试环境的url文件,打生产包的时候把我放在根目录的生产环境的URL文件和里面的进行替换
cp -rp $WORKSPACE/UrlHeader.h $WORKSPACE/yingxiao/Third
fi
IPANAME="jinkens-myapp"
#fastlane的参数配置
fastlane gym --export_method enterprise --output_name ${IPANAME} --clean true --configuration Release
#创建json日志文件,用于存储蒲公英给我们返回的信息
postfiledir=${WORKSPACE}/tmp
postfilename=$postfiledir/upload_app.txt
if [ ! -e "$postfiledir" ]; then
mkdir $postfiledir
echo "创建了日志文件夹"
fi
if [ ! -e "$postfilename" ]; then
touch $postfilename
echo "创建了日志文件"
fi
#上传到蒲公英并接收蒲公英返回的信息,并在jenkins的build History上展示返回的二维码图片
curl -F "file=@${IPANAME}.ipa" -F "uKey=" -F "_api_key=" http://www.pgyer.com/apiv1/app/upload >${postfilename}
url=$(cat ${postfilename}|awk -F'"' '{print $(NF-1)}'|sed 's#\\##g')
echo "appQRCodeURL:<img src=$url>"
#经测试,生产环境的url文件把测试的url文件替换后,再打测试包发现jenkins没把svn上的测试环境url文件拉下来,所以结束的时候删除工作空间
rm -rf $WORKSPACE
执行完毕成功的结果是:
8FD6BB4D-1F96-41D8-8887-320D178E75A0.png