利用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