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作业中具有有效的构建。