利用Jenkins搭建iOS项目可持续化集成环境( Continuous Integration 简称CI)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用Jenkins搭建iOS项目可持续化集成环境( Continuous Integration 简称CI)相关的知识,希望对你有一定的参考价值。

前言

关于Jenkins的相关博客网上有很多,这里不再重复说。新进公司要搭建该环境,我也是参考了如下博文:http://www.jianshu.com/p/41ecb06ae95f 文中说的很详细也不再细说。当然在实际搭建中也遇到了不少的坑,所以特写此博客以作补充。

1. 初始密码获取

命令行:cd /Users/Shared/Jenkins/Home/ 到当前目录,修改/secrets/目录权限后使用vim编辑器打开initialAdminPassword文件就可以复制里面的密码了。

2. 构建环境的证书配置

构建证书环境需要上传Keychain和Provisioning Profile文件:Keychain文件包含打包所需的Code Signing文件,Provisioning Profile为设备文件。其中签名文件和设备文件可以在开发者账号中心获取,然后安装在本机上。打开钥匙串访问,在桌面上新建一个空钥匙串,然后把“钥匙串-登陆”项中的已安装后的签名文件(包含开发证书和发布证书)拷贝到新建的钥匙串中然后设置钥匙串密码,这样钥匙串和设备文件准备就绪,然后直接上传到Jenkins服务器。上传成功后就可以在Jenkins新项目的“构建环境”配置中选择指定的证书了。

3. 构建脚本编写

构建过程可以选择Xcode和脚本的方式,使用Xcode的话需要安装插件,这里选择执行脚本来“编译-打包-导出ipa-上传至蒲公英”。参考博文中采用了xcodebuild + xcrun的方式,经验证在Mac OS 10.12之后xcrun被标记为过时,用Jenkins手动构建的时候会报错,所以在新版Mac OS中直接用xcodebuild就可以完成所有工作。下面提供我测试时所写的脚本:

# 工程名
app_name="jenkins-Demo1"

# 证书 (CODE_SIGN_DISTRIBUTION),这个部分可以不用,因为已经配置了证书
#CODE_SIGN_IDENTITY="iPhone Developer: ~~~"
#PROVISIONING_PROFILE_SPECIFIER="~~~~~~~~~~~~~~~~"

# info.plist路径
project_infoplist_path="./${app_name}/Info.plist"

# 获取version
bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${project_infoplist_path}")
# 获取build
bundleVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" "${project_infoplist_path}")
# 日期
IPA_DATE="$(date +%Y%m%d)"

# archive名字
#ARCHIVE_NAME="${app_name}_V${bundleShortVersion}_${IPA_DATE}.xcarchive"
# ipa名字
#IPA_NAME="${app_name}_V${bundleShortVersion}_${IPA_DATE}.ipa"

# archive 和 ipa 存放目录
ARCHIVE_IPA_CACHE_PATH="$HOME/JenkinsIpas/${IPA_DATE}"
# archive路径
ARCHIVE_PATH="${ARCHIVE_IPA_CACHE_PATH}/${app_name}.xcarchive"
# ipa路径
IPA_PATH="${ARCHIVE_IPA_CACHE_PATH}"

echo ${ARCHIVE_PATH}
echo ${IPA_PATH}

# clean
echo "-------------clean-------------"
xcodebuild -target "${app_name}" -configuration ‘Release‘ clean

# build
echo "-------------build-------------"
xcodebuild -target "${app_name}" -sdk iphoneos -configuration ‘Release‘

# archive 
echo
"-------------archive-------------"
#xcodebuild archive -project ${app_name}.xcodeproj -scheme ${app_name} -archivePath ${ARCHIVE_PATH} # 获取exportOptionsPlistPath路径 exportPlist_path="./${app_name}/exportDevelopment.plist" # 导出ipa echo "-------------export ipa-------------" #xcodebuild -exportArchive -archivePath ${ARCHIVE_PATH} -exportOptionsPlist ${exportPlist_path} -exportPath ${IPA_PATH} # 上传至蒲公英 echo "-------------upload to pgyer" #UserKey 和 ApiKey USER_KEY="c064020a03b0f19cccd3fd82f143cf76" API_KEY="b5f849b038e3761c09b25e03ff1e3c71" #curl -F "[email protected]${IPA_PATH}/${app_name}.ipa" -F "uKey=${USER_KEY}" -F "_api_key=${API_KEY}" https://www.pgyer.com/apiv1/app/upload

需要注意的问题:

  • 上述命令在测试的时候建议一步一步来,先编译再打包最后导出ipa,这样在出错时容易排查及时修正。
  • 使用-archivePath参数时一定要用-scheme参数,否则Jenkins构建的时候会报错说找不到scheme,正常情况下一个工程只有一个scheme且名字和工程名相同,用了-scheme参数后经构建测试后还是会报错是因为scheme默认是私有的,可在工程的Manage Schemes中勾选“Shared”,然后提交到代码仓库,Jenkins重新构建后就不会出错。
  • 导出ipa的时候需要用到-exportOptionsPlist参数,指定一个plist文件,配置方法可参考:http://www.cocoachina.com/ios/20170607/19464.html 或者 http://www.jianshu.com/p/bd4c22952e01 或者 http://blog.csdn.net/offbye/article/details/51506256 配置后只要指定了正确的plist路径就不会出现错误。
  • 上传至蒲公英的时候需要UserKey和ApiKey,这2个参数可以在蒲公英账号中获取。

最后

读者可以在自己的电脑上装Jenkins环境,然后在GitLab上创建一个公有的代码库,在本地创建一个空的工程并上传到该代码库,并指定该库地址为Jenkins构建时自动拉取的远程仓库地址做测试。当然在搭建的过程中可能还是会遇到一些坑,不要烦躁,静下心尝试着自己解决,总会有办法。多实践,多参考,总会有一些收获。



以上是关于利用Jenkins搭建iOS项目可持续化集成环境( Continuous Integration 简称CI)的主要内容,如果未能解决你的问题,请参考以下文章

Jenkins+Maven+Gitlab+Nexus持续集成环境搭建

《持续集成实践指南》第2章 持续集成环境搭建Jenkins+Gitlab+Gerrit

持续集成环境搭建Jenkins+Gitlab+Gerrit

持续集成环境搭建Jenkins+Gitlab+Gerrit

Jenkins+Maven+SVN快速搭建持续集成环境(转)

使用Jenkins+Calabash+Cocoapods搭建iOS持续集成环境