Jenkins + iOS构建
不久前,我需要为iOS项目设置构建管道。 这是一个经典的故事,开发团队解散了,公司需要一些外部软件帮助。 长话短说,这成为我修补iOS构建自动化的借口。
编译良好且有文档证明的开源项目是一回事,编译没有文档且无人问津的iOS项目,至少让我非常兴奋。
该项目是为iPad设计的,我认为我需要一个实际的项目来开发。 事实证明,为Apple设备开发软件仅需要Apple计算机。 不需要手机或平板电脑。 一切都可以通过模拟器来完成。
下一个困难的部分是弄清构建配置和库依赖关系。 这是我第一次听到cocoapods,事实证明它很整洁。 就像NPM用于节点,pip用于python,Cocoapods用于快速/目标C项目。
我不能在这里分享代码,但是可以分享我学到的课程。
资质认证
对于新开发者来说,这可能是最令人困惑的事情,但是实际上,这并不太疯狂。 所有这些都是关于知道谁编写了代码以及谁在分发应用程序。
- 证书 -每个开发人员都应在developer.apple.com上获得一个帐户,并生成自己的开发证书。 这用于签名代码。 您稍后将使用您的用户名和密码来获取证书。 证书的私钥仅在证书创建期间可用。 那些.p12私钥需要导入Mac的钥匙串中才能对代码进行签名。
- 标识符 -只是某种Java类,例如命名约定ID即可识别应用程序。
- 设备 -允许将设备注册到公司帐户,并且配置文件可以指定允许安装该应用程序的设备。
- 供应配置文件 -证书+应用程序ID +设备的组合。 它用于对应用程序进行签名。
编译中
安装Xcode和CLI工具。 安装分发证书和该证书的私钥。 Fastlane是人们多年来构建的实用程序的组合,可帮助实现iOS项目构建的自动化。
Jenkins Side自动化
对于Jenkins服务器端,在Jenkins管理内创建一个slave node
。 您可以:
- 在Mac上创建SSH帐户,让skin进入ssh。 要么
- 使用webstart方法,从Mac上从Jenkins的master下载slave.jar并手动启动。 可以为slave.jar创建自动启动。
在工作中,使用jenkin的插件将文件从jenkin的文件系统复制到Mac从节点。 为了执行构建,
#!/ bin / bash -l
export LANG =“ zh_CN.UTF-8”
#秘密文件本地存储在构建服务器上
源.env.default
安全性解锁钥匙串-p“ $ KEYCHAIN_PASSWORD”“ $ HOME / Library / Keychains / login.keychain-db”
fastlane信息亭_ $ {BUILD_TYPE}
获取秘密文件,解锁钥匙串,以便快速通道可以读取私钥对代码进行签名。
自动化,Mac从站侧
安装Java并测试构建。
#从自家安装Java,并安装Java8,因为Jenkins尚不兼容Java9。
brew cask安装caskroom / versions / java8
#使用rbenv控制ruby版本
酿造安装rbenv
#作为'jenkins'用户
rbenv安装2.4.4
rbenv本地2.4.4
gem安装捆绑器
rbenv rehash
束
#克隆历史较短的鳕
吊舱设置
Ctrl + C#Ctrl-C组合键。
cd〜/ .cocoapods /回购
git clone --depth 1 github.com/CocoaPods/Specs.git master
最后一部分是缩短克隆cocoapods库的时间。
样例Fastlane配置
在此项目中,工作区文件(.xcworkspace)是从cocoapods的Podfile创建的。 XCode可以读取.xcworkspace并了解cocoapods设置的依赖项。
default_platform(:ios)
xcode_select“ /Applications/Xcode.app”
平台:ios
desc“构建信息亭和主机iOS应用程序”
车道:before_integration做
get_certificates#获取证书
get_provisioning_profile#获取配置文件
cocoapods#将依赖项安装到项目中
结束
车道:build do |选项|
scheme = options [:scheme]#必须与工作区的方案匹配。
#将内部版本号递增到当前日期
build_number = Time.new.strftime(“%Y%m%d%H%M”)
提交= last_git_commit
short_hash = commit [:abbreviated_commit_hash]#提交的短阴影
#在工作区中使用特定方案进行构建。
build_ios_app(
方案:选项[:方案],
目的地:“ generic / platform = iOS”,#这不是要指定文件夹
配置:options [:configuration],
输出名称:options [:scheme] +“-” + options [:configuration] +“-” +
build_number +“-” + short_hash +“ .ipa”,
output_directory:“ ./ build”,
sdk:“ iphoneos11.4”,
)
结束
车道:kiosk_rc做
before_integration
内部版本(方案:“信息亭”,配置:“ RC发布”)
结束
巷:kiosk_release做
before_integration
构建(方案:“信息亭”,配置:“发布”)
结束
车道:host_rc做
before_integration
构建(方案:“主机”,配置:“ RC-释放”)
结束
车道:host_release做
before_integration
构建(方案:“主机”,配置:“发布”)
结束
结束
在Mac客户端,您应该能够运行fastlane host_rc
并在./build
目录中的host_rc作业中具有有效的构建。
- 与Jenkins,Xcode和GitHub的基本持续集成
- 使用JENKINS在iOS中进行持续集成
- 如何使用Jenkins和VSTS为iOS项目设置CI和CD?
- 与Jenkins和Fastlane的iOS持续集成和交付(第1部分)
- 运行iOS版本-第3部分,React Native DevOps指南
- 使用Jenkins的IOS的CI / CD(使用Jenkins生成.ipa)
- Jenkins构build失败:Xcode找不到configurationconfiguration文件匹配
- 来自Jenkins / SSH的Xcode,Codesign Error – “用户交互不被允许”
- 在xcodebuild中找不到“RestKit / RestKit.h”文件错误