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

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

自动化构建前期准备

构建环境准备

本次自动化构建基于 jenkins
jenkins下载地址: jenkins.io/zh/
根据我的爱好选择喜欢的安装方式,jar或dmg,安装好后,登陆localhost:8080,根据文档设置管理帐号,安装推荐插件,还须要到插件管理中搜索安装Xcode integration插件 (Jenkins - Manage Jenkins - Manage Plugins)github

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

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

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

构建触发器, 勾选Poll SCM定时检查源码变动,根据我的须要定义检查间隔,以下图

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

#!/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中获取到分支名称为空到问题,以下图bash

因为使用到是脚本打包,在部署jenkins环境的电脑上Xcode-Accounts中登陆咱们的开发者帐号,同时咱们的项目中须要ExportOptions.plist, 打包用到配置文件,想要了解更多关于ExportOptions.plist的键值能够经过终端输入xcodebuild -help进行查看,基本内容以下图 app

进行构建

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

结尾:

我的认为无论一人仍是多人同时开发,都应保持良好的分支管理习惯,这样才能从容的应对产品不断变化的需求,以及触不及防的bug....post

因为jenkins用的很少,写的冲忙,有不对的地方欢迎你们指出ui

示例项目AutoDemospa

相关文章
相关标签/搜索