转载

iOS从环境自动部署到自动化构建

之前写的 iOS如何实现API环境自动部署 文章对于部分人来说可能觉得没什么太大的意义,毕竟对大部分公司来说可能只有一个人负责开发,不需要考虑分支切换(版本更新,临时需求或问题修复上线等问题), 接下来这篇文章将是 对iOS环境实现自动化部署最实用性的配套--自动化构建。

自动化构建前期准备

构建环境准备

本次自动化构建基于 jenkins

jenkins下载地址:jenkins.io/zh/

根据个人爱好选择喜欢的安装方式,jar或dmg,安装好后,登录localhost:8080,根据文档设置管理账号,安装推荐插件, 还需要到插件管理中搜索安装Xcode integration插件 (Jenkins - Manage Jenkins - Manage Plugins)

插件安装好后,新建任务输入任务名称( 将会成为拉下来项目的目录名称 ),选择 构建一个多配置项目 ,然后点击确定,如下图所示

iOS从环境自动部署到自动化构建

创建任务成功后进入到配置页

General填写描述, 源码管理选Git填写Repositories及要构建的分支Branches to build,如下图

iOS从环境自动部署到自动化构建

构建触发器, 勾选Poll SCM定时检查源码变更,根据个人需要定义检查间隔,如下图

iOS从环境自动部署到自动化构建

接下来直接到 构建 部分,选择Execute shell,采用脚本进行构建, 脚本内容如下

#!/bin/sh

#export LC_ALL=zh_CN.GB2312;export LANG=zh_CN.GB2312
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8

#项目路径,jenkins环境下的项目所在路径,
# /Users/你的电脑名称/.jenkins/workspace/项目名称(此处项目名称与jenkins上的一致)
projectDir=/Users/xxx/.jenkins/workspace/AutoDemo

#打包需要的ExportOptions.plist文件路径
#ExportOptions.plist的内容可以通过xcodebuild -help了解
exportOptionsPlistPath=${projectDir}/ExportOptions.plist

#项目名称,工程名称
projectName=AutoDemo
#编译的方式,默认为Release,还有Debug等
buildConfig=Release 
#日志log文件/导出安装包的目录路径
buildAppToDir=/Users/xxx/Desktop/demoIpa

#项目的Info.plist路径
infoPlist=${projectDir}/${projectName}/Info.plist

#由于jenkins拉下来的项目无法获取到分支名,这里进行手动修改配置
#GIT_BRANCH 是jenkins提供的变量名,得到分支名称
/usr/libexec/PlistBuddy -c "Set :GitCommitBranch ${GIT_BRANCH/#origin///}" $infoPlist

mkdir -pv $buildAppToDir
logPath=$buildAppToDir/$projectName-$buildConfig.log

###############
mkdir -pv $buildAppToDir

#用到cocoapods,需要更新Pods的执行下命令,不需要则可注释
#cd $projectDir
#pod install

###############开始编译app

echo "分支名称: ${GIT_BRANCH/#origin///}" >>$logPath

#编译前先clean
xcodebuild clean
#使用cocoapods的项目  workspace的,则执行此行
# xcodebuild -workspace ${projectDir}/${projectName}.xcworkspace -scheme ${projectName} -configuration $buildConfig -sdk iphoneos -archivePath $buildAppToDir/$projectName.xcarchive archive

#project,非workspace项目执行此行
xcodebuild -project ${projectDir}/${projectName}.xcodeproj -scheme ${projectName} -configuration $buildConfig -sdk iphoneos -archivePath $buildAppToDir/$projectName.xcarchive archive

#判断编译结果
if test $? -eq 0
then
echo "~~~~~~~~~~~~~~~~~~~编译成功~~~~~~~~~~~~~~~~~~~" >>$logPath
else
echo "~~~~~~~~~~~~~~~~~~~编译失败~~~~~~~~~~~~~~~~~~~" >>$logPath
echo "/n" >>$logPath
exit 1
fi

###############开始打包成.ipa 
ipaName="`date +%Y%m%d%-H:%m:%s`" 
echo "安装包名称:${ipaName}" >>$logPath

echo "开始打包$projectName.xcarchive成ipa....." >>$logPath

xcodebuild -exportArchive -archivePath ${buildAppToDir}/${projectName}.xcarchive -exportPath ${buildAppToDir}/${ipaName} -exportOptionsPlist ${exportOptionsPlistPath} -allowProvisioningUpdates

if test $? -eq 0
then
    #statements
    echo "打包${projectName}的ipa包成功" >>$logPath
else
    echo "打包${projectName}的ipa包失败" >>$logPath
    exit 1
fi


复制代码

项目准备

项目GitScript修改, 适配jenkins中获取到分支名称为空到问题,如下图

iOS从环境自动部署到自动化构建

由于使用到是脚本打包,在部署jenkins环境的电脑上Xcode-Accounts中登录我们的开发者账号,同时我们的项目中需要ExportOptions.plist, 打包用到配置文件,想要了解更多关于ExportOptions.plist的键值可以通过终端输入xcodebuild -help进行查看,基本内容如下图

iOS从环境自动部署到自动化构建

进行构建

项目准备好后(推送到git仓库),jenkins配置后,执行Build Now即可进行构建,或者触发器触发后会自动进行构建,构建完成后的目录如下

iOS从环境自动部署到自动化构建
iOS从环境自动部署到自动化构建
原文  https://juejin.im/post/5d2ffd95e51d4550a629b32b
正文到此结束
Loading...