iOS组件化开发之jenkins自动打包

  在进行iOS组件化开发的过程中,自动化打包是必不可少的。很多小伙伴会抱怨说,没有打包机,老板比较抠门,针对这种情况,个人感觉还是换一家公司吧, 打包机都不愿意购买的公司,对于提高效率的重视程度不够,还搞什么组件化开发呢。当然了我们还是要努力争取一下,说服somebody去给我们买机器设备。毕竟开展组件化开发对自己对团队都是一个很大的提升机遇。当然了,基于我这边的条件有限,我这边开展的自动化打包相对来说还是不完备的,我这边就从几个方面来说一下自己实现自动化打包的思路。

需求整理

1,能够选择分支进行打包

  在实际开发过程中我们的打包的代码可能不局限于某一个分支,这要求通过jenkins的配置,能够实现在不同分支下,都可以相互切换分支来打包。而且还能够支持给马甲包app打包。具体实现可以通过创建branch参数来实现。

2,能够设置ipa包的名字

在实际的开发过程中,我们经常会通过ipa包名区分版本,app名字,分支名。因此我们要通过配置jenkins来实现按照特定需求命名ipa包名

3,能够发送通知邮件

在打包完成后,能够发送打包内容给相关负责人。能够自由,动态的生成邮件内容。在打包出现故障时,也能够把故障的相关信息通过邮件的形式发送给相关负责人。

4,能够将ipa自动上传到版本分发平台

现在主流的版本分发平台还是比较多的,比较出名的有fir,蒲公英等。当然了如果公司对安全要求比较高的话,也可以在内网搭建自己的版本分发平台。fir,蒲公英等平台对ipa自动上传非常的简单,几句命令行就搞定了,这里就不细说了,大家感兴趣的话,可以搜一下。

5, 能够将文件备份到公司自己的文件管理系统中。

将ipa包被分到公司自己的文件管理系统中,方便在不同版本间的升级测试时,派上用场。我们公司使用的NAS,下面我的脚本,也是以NAS为例来说明的。

6,能够实现自动对组件进行自动化打包。

在组件化开发的过程中,经常需要对相关的组件进行打包测试,因此通过jenkins进行配置实现组件的自动化打包测试,对于提高效率,规范流程起到了非常重要的作用。目前由于我们公司没有相关的需要,因此暂时未实现该功能。

创建步骤

  1,首先就创建项目,设置相关的git仓库,账号密码之类的信息。
2,设置参数构建,创建相关的构建参数。分支参数,productName参数,等各种需要的参数都可以在这创建。
3,配置钥匙串信息,签名信息等
4,配置sh脚本信息。



#!/bin/sh -
export LANG=en_US.UTF-8

# 工程名(根据项目自行填写)
APP_NAME=${TargetName}

# TARGET名称(根据项目自行填写)
TARGET_NAME=${TargetName}

# 工程根目录#工程源码目录(这里的${WORKSPACE}是jenkins的内置变量表示(jenkins job的路径):/Users/pingankeji/.jenkins/workspace/Mydemos/)   
# ${WORKSPACE}/MyDemos/ 中的MyDemos根据你的项目自行修改
CODE_PATH="${WORKSPACE}/Product"

LOCAL_BRANCH=${branch#origin/}       #本地分支名字

if [ -z "$publishContent" ]; then

#截取发布的版本号
FEATURE_VERSION=${branch#origin/feature/version_} 

#截取不到版本好进行额外的操作
if [ -z "$FEATURE_VERSION" ]; then
FEATURE_VERSION="develop" 
fi

else
FEATURE_VERSION=$publishVersion
fi


BUILD_DATE=`date +%Y%m%d`   #打包的日期 做为包名的一部分

# 存放ipa的文件夹名称(根据自己的喜好自行修改)
IPA_NAME="${TARGET_NAME}-${FEATURE_VERSION}-${versionSeriesNum}-${BUILD_DATE}"

# 导出ipa包的路径
IPA_EXPORT_PATH="/Users/administrator/Desktop/ipa/${IPA_NAME}"

# 导包方式(这里需要根据需要手动配置:AdHoc/AppStore/Enterprise/Development)

# 导包方式配置文件路径(这里需要手动创建对应的XXXExportOptionsPlist.plist文件,并将文件复制到根目录下[我这里在源项目的根目录下又新建了ExportPlist文件夹专门放ExportPlist文件])

# 证书配置根据EXPORT_METHOD选择

if test "$EXPORT_METHOD" = "AdHoc"; then
PROFILE_NAME=''
CODE_SIGN=''
EXPORT_METHOD_PLIST_PATH=${WORKSPACE}/ExportPlist/AdHocExportOptions.plist
elif test "$EXPORT_METHOD" = "AppStore"; then
PROFILE_NAME=''
CODE_SIGN=''
EXPORT_METHOD_PLIST_PATH=${WORKSPACE}/ExportPlist/AppStoreExportOptios.plist
elif test "$EXPORT_METHOD" = "Enterprise"; then
PROFILE_NAME=''
CODE_SIGN=''
EXPORT_METHOD_PLIST_PATH=${WORKSPACE}/ExportPlist/EnterpriseExportOptions.plist

else 
PROFILE_NAME='xxxxxxxxxxxxxxxxxxxxxxxx'
CODE_SIGN='iPhone Developer:  xxxxxxxxxxxxx'
EXPORT_METHOD_PLIST_PATH=${WORKSPACE}/ExportPlist/DevelopmentExportOptions.plist
fi  



# 指ipa定输出文件夹,如果有删除后再创建,如果没有就直接创建
if test -d ${IPA_EXPORT_PATH}; then
    rm -rf ${IPA_EXPORT_PATH}
mkdir -pv -m 777 ${IPA_EXPORT_PATH}
    echo ${IPA_EXPORT_PATH}
else
 mkdir -pv -m 777 ${IPA_EXPORT_PATH}
fi


# 删除工程文件
echo "+++++++++删除工程文件+++++++++"
rm -rf "${TARGET_NAME}.xcarchive"




#进入工程目录下
cd ${WORKSPACE}

git reset --hard HEAD

git checkout -B ${LOCAL_BRANCH} ${branch} 

git pull


# 进入工程源码根目录
cd "${CODE_PATH}"



# 更新pod
#/user/local/bin/pod update —verbose —no-repo-update

# 清除工程
echo "=================clean================="
xcodebuild -workspace "${APP_NAME}.xcworkspace" -scheme "${TARGET_NAME}" -configuration 'Release' clean

# 获取钥匙串权限(-p 后面的密码为你的开机密码)
#/user/bin/security unlock-keychain -p "password" ~/Library/Keychains/login.keychain-db


#将app打包成xcarchive格式文件(PROVISIONING_PROFILE后面是你配置的证书对应的描述文件UUID)
echo "+++++++++++++++++archive+++++++++++++++++"

xcodebuild  archive  -workspace "${APP_NAME}.xcworkspace" -scheme "${TARGET_NAME}" -archivePath "${TARGET_NAME}.xcarchive" -configuration 'Release' PROVISIONING_PROFILE="${PROFILE_NAME}" CODE_SIGN_IDENTITY="${CODE_SIGN}"

#在AppIcon上添加打包信息
##shell脚本文件夹
SHELL_SCRIPT_PATH=${WORKSPACE}/Scripts 

 echo ${SHELL_SCRIPT_PATH}

#进入shell脚本目录
cd ${SHELL_SCRIPT_PATH}


#执行添加版本信息的脚本
sh iconVersioning.sh

# 进入工程源码根目录
cd "${CODE_PATH}"

# 将xcarchive格式文件打包成ipa
echo "+++++++++++++++++ipa+++++++++++++++++"
xcodebuild -exportArchive -archivePath "${TARGET_NAME}.xcarchive" -exportPath "${IPA_EXPORT_PATH}" -exportOptionsPlist ${EXPORT_METHOD_PLIST_PATH}

#修改ipa包名
cd ${IPA_EXPORT_PATH}
mv ${TARGET_NAME}.ipa ${IPA_NAME}.ipa  

# 发布到fir
fir p ${IPA_EXPORT_PATH}/${IPA_NAME}.ipa fir login -T token内容

#上传ipa文件到NAS进行备份

#判断服务器端指定路径是否存在
ssh upload@ip地址 -p2233 "sh -c '[ -d  ~/shared/iOS/${FEATURE_VERSION} ]||mkdir ~/shared/iOS/${FEATURE_VERSION}'"

#上传ipa文件
scp -P 2233 ${IPA_EXPORT_PATH}/${IPA_NAME}.ipa upload@ip地址:~/shared/iOS/${FEATURE_VERSION}/${IPA_NAME}.ipa

#删除打包机备份的文件夹
rm -rf ${IPA_EXPORT_PATH}


ipaName=${IPA_NAME}

echo ${ipaName}

5.添加发送邮件的触发条件
  打包操作界面如下:
这里写图片描述
参考博客:https://wangjianjun0730.github.io/2017/10/Jenkins/
更多优质文章,可以微信扫码关注:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/hhl110120/article/details/81295336