iOS:Jenkins自动打包

597 阅读3分钟

项目大了之后打包越来越费时了,尤其是最近搞的一个混编项目,打包居然要花18分钟,如果继续手动打包那一天下来打三次包就浪费一个小时了,于是就算是拖延症晚期的我也要开始 研究自动打包了。

我们打包希望是由测试人员主动打包得到一个.ipa包,我选择了jenkins。

一、安装jenkins

安装jenkins需要java环境,这里我之前就装过了。查看是否安装了java:

java -version

输出:

java version "1.8.0_211"

Java(TM) SE Runtime Environment (build 1.8.0_211-b12)

Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)

开始安装jenkins

我是通过homebrew来安装,相关命令可以在jenkins官网来查看。

安装最新版本:

brew install jenkins

或者安装稳定版本:

brew install jenkins-lts

启动jenkins

安装完成后,启动jenkins

brew services start jenkins

启动之后在浏览器中输入 http://localhost:8080 就会进入Jenkins初始页面。 根据提示的初始密码路径得到初始密码登入即可。

二、使用jenkins

1.安装插件

在开始创建任务之前,这里先安装一个插件:Git Parameter,以方便我们在打包时选择分支。 进入系统管理-插件管理中搜索安装。

image.png

image.png

安装完成后重启一下jenkins:

brew services restart jenkins

2.创建任务

输完名称选择一个Style,这里我选的Freestyle project,点击确定.

image.png

3.配置

General:

这里按需配置即可:

image.png

添加参数

在测试人员打包的时候,我们希望提供一些参数选项,比如哪个分支,服务器环境等等,在这里添加这些配置: 勾选This project is parameterrized。

  • 选择分支 打包时要选择分支,这里配置一下: 点击“添加参数”,选择Git Parameter。名称起一个,待会儿会用到。

image.png

image.png

  • 选择API环境 打包时我还需要给测试人员提供一个选择服务器环境的选项,在这里也配置一下:

image.png

image.png

源码管理:

我们项目的代码是放在gitlab上,这里勾选git,URL就是自己项目仓库的地址。

image.png

Credentials,点击“添加”,这里我选的SSH来配置,写代码的应该都懂,这里就不啰嗦了。

image.png

勾选Private Key,点击“Add”,然后粘贴自己的SSH信息。

image.png

构建:

打包前先pod install一下,添加执行脚本步骤:

image.png

#bin/bsah - l
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
cd $WORKSPACE
/usr/local/bin/pod install

再添加打包执行的步骤:

#!/bin/sh

# 工程名称
workspace_name="xxx"

# 指定项目的scheme名称
scheme_name="xxxx"

#取版本号
bundleShortVersion=`sed -n '/MARKETING_VERSION/{s/MARKETING_VERSION = //;s/;//;s/^[[:space:]]*//;p;q;}' ./${workspace_name}.xcodeproj/project.pbxproj`
echo "-----------bundleShortVersion = ${bundleShortVersion}-----------"


# 指定要打包编译的方式 : Debug or Release
build_configuration=Release


# 根据选择的服务器环境来选择打包的Scheme(详见上文我自行添加的配置)
if [ $serviceType = test ];then
    echo '///-----------'  
    echo '/// 编译环境:测试环境'  
    echo '///-----------'
    build_configuration=Release_test
    scheme_name="xxx"
else
    echo '///-----------'  
    echo '/// 编译环境:正式环境'  
    echo '///-----------'  
    build_configuration=Release
    scheme_name="xxx"
fi



# method,打包的方式,这里我直接写死ad-hoc,上线的时候我手动打包
method="ad-hoc"


echo "--------脚本配置参数检查-----------"
echo "workspace_name = ${workspace_name}"
echo "scheme_name = ${scheme_name}"
echo "build_configuration = ${build_configuration}"
echo "method = ${method}"


# 获取当前脚本所在目录
script_dir="$WORKSPACE"
echo "脚本所在目录:${script_dir}"

# 工程根目录
project_dir="$WORKSPACE"

# 指定输出导出文件夹路径aa
export_path="$project_dir/jenkinsBuild"
# 指定输出归档文件路径
export_archive_path="$export_path/archive/$workspace_name.xcarchive"
# 指定输出ipa文件夹路径
export_ipa_path="$export_path/ipa/"
# 指定导出ipa包需要用到的ExportOptions.plist文件的路径,之前手动打包过,我直接拿过来用
export_options_plist_path="$project_dir/ExportOptions.plist"

echo "--------脚本参数检查-----------"
echo "project_dir = ${project_dir}"
echo "export_path = ${export_path}"
echo "export_archive_path = ${export_archive_path}"
echo "export_ipa_path = ${export_ipa_path}"
echo "export_options_plist_path = ${export_options_plist_path}"


echo "------------------------------------------------------"
echo "开始构建项目"

# 进入项目工程目录
cd ${project_dir}

# 指定输出文件目录不存在则创建
if [ -d "$export_path" ];
then rm -rf "$export_path"
fi


# 编译前清理工程
xcodebuild clean -workspace ${workspace_name}.xcworkspace -scheme ${scheme_name} -configuration ${build_configuration}

#编译工程
xcodebuild archive -workspace ${workspace_name}.xcworkspace -scheme ${scheme_name} -configuration ${build_configuration} -archivePath ${export_archive_path}

# 检查是否构建成功
if [ -d "$export_archive_path" ] ; then
    echo "项目构建成功"
else
    echo "项目构建失败"
    exit 1
fi

echo "------------------------------------------------------"
echo "开始导出ipa文件"


//导出ipa包
xcodebuild -exportArchive -archivePath ${export_archive_path} -exportPath ${export_ipa_path} -exportOptionsPlist ${export_options_plist_path} -allowProvisioningUpdates

# 检查文件是否存在
if [ -f "$export_ipa_path/xxx.ipa" ] ; then
    echo "导出 xxx.ipa 包成功"
    open $export_path
else
    echo "导出 xxx.ipa 包失败"
    exit 1
fi

# 输出打包总用时
echo "使用AutoPackageScript打包总用时: ${SECONDS}s"

echo -e "打包成功"

Jenkins还可以执行很多操作,常见的比如打包完成后钉钉通知啊,上传蒲公英啊,可以自己根据需要添加,因为我的需要就是给到打包的测试人员一个.ipa包,所以就没做这些。

构建后操作:

打包完成后为了方便测试人员下载.ipa包,这里我又添加了一个构建后的步骤:

image.png

image.png

这个步骤是为了方便测试人员找到要下载的.ipa包,而不用去workspace里的目录去找,在jenkins该项目首页就能看到最后一次成功的构建结果,点击xxx.ipa即可下载:

image.png

都添加完成后保存即可。

好了,点击左栏 Build with Parameters 开始执行自动化打包吧!