您的位置:首页 > 移动开发 > IOS开发

基于Jenkins搭建iOS持续集成开发环境

2017-03-06 00:00 696 查看
摘要: > - Jenkins安装及配置
> - Pipeline创建及配置
> - ruby的版本管理工具rbenv安装
> - fastlane安装
> - 常见构建问题
> - 相关工具及技术网站推荐

原创
2017-03-06

关键点

Jenkins安装及配置

Pipeline创建及配置

ruby的版本管理工具rbenv安装

fastlane安装

常见构建问题

相关工具及技术网站推荐

CI持续集成

什么是持续集成 ?

持续集成: 是一种软件开发实践,团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件。

参考文章阮一峰日志

Jenkins安装及配置

通过pkg包安装
   在 Mac 环境下,我们需要先安装 JDK,然后在 jenkins 的官网 下载最新的 pkg 包,双击安装即可。安装好后在浏览器中输入 localhost:8080 会出现如图则表示安装成功:



通过war包安装
如果Mac/windows上安装了Tomcat 可以直接将war包拷贝到tomcat/webapps,进入到war包所在目录启动Jenkins:

java -jar jenkins.war --httpPort=8080


通过 [homebrew] (http://brew.sh/) 方式安装

brew install jenkins


通过Docker安装

   首先在Docker官网下载安装配置Docker, 然后参考此网站介绍在Docker环境下安装Jenkins

默认配置
安装好Jenkins后,选择安装推荐的插件即可:



创建登录用户



Manage Jenkins





创建Node节点

   分布式构建(在Jenkins的配置中叫做节点),分布式构建能够让同一套代码在不同的环境(如:Windows和Linux系统)中编译、测试等。

Master节点:相当于Server的概念

Slave节点:相当于Agent的概念

更多介绍请查看Jenkins Master/Slave







配置Node时几个重要参数介绍

Name:节点名称

Description:节点描述,支持中文

Remote root directionary:节点的根目录
(注意:如果目录不存在,会自动创建目录。但是必须对该目录有读写权限,否则会报错:hudson.util.IOException2: Failed to copy xxxx)


Labels:标记(又叫做标签)用来对多节点分组,标记之间用空格分隔.例如'iOSMobile AndrodMobile',将会把一个节点标记上'iOSMobile'和'AndrodMobile'.

Launch method:运行方式有四个选项。建议选择第1、2种方式配置。详细如下:
【推荐】Launch slave agents on Unix machines via SSH 在Unix(包括Linux)机器上通
过SSH通道连接节点 (适用于Unix和Linux)
Host:节点主机的ip地址

Credentials:凭据(如果为空或者不可选择,请在系统管理→Manage Credentials中配置。

Port:端口默认22


ruby环境安装

   在mac上计算机已经安装了ruby,在终端下输入命令:
ruby --version

为了能更好的管理ruby版本,我们使用rbenv工具

$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv
$ cd ~/.rbenv && src/configure && make -C src

   安装成功后执行
rbenv init
按照终端输出的提示将
eval "$(rbenv init -)"
拷贝到指定文件(注意: 如果你是使用的iterm2 则拷贝至~/.zshrc 否则拷贝至./bash_profile



配置好以后,重新开启一个终端,我们安装ruby 2.4.0版本

$ rbenv install -l       # 查看ruby可用版本
$ rbenv install 2.3.0   # 安装ruby2.3.0
$ gem install bundler  # 安装ruby gems
$ rbenv rehash        	 # 成功操作后,执行rehash操作
$ rbenv global 2.3.0   # ruby 系统全局环境
$ rbenv local 2.3.0     # ruby 本地环境
$ rbenv shell 2.3.0     # ruby作用于当前终端环境


注意: 由于rbenv可能与另一个ruby环境管理工具rvm发生冲突,可以使用
rvm implode
彻底删除rvm

Pipeline 创建及配置

Pipeline创建

设置Pipeline名称

选择单线程Pipeline (在现目前项目中创建单线程已能够满足条件,多线程Multibranch Pipeline暂不知如何使用,后续补上)

创建Pipeline时,可以根据一个已有的Pipeline创建



Pipeline配置

General配置



Build Trggers配置



Pipeline scripts

   配置如下,包含了:

代码检出

单元测试

生成测试报告

修改版本号

功能测试

构建

发布App

node('Mobile') {
stage('SVN Checkout') {
checkout([$class: 'SubversionSCM', additionalCredentials: [], excludedCommitMessages: '', excludedRegions: '', excludedRevprop: '', excludedUsers: '', filterChangelog: false, ignoreDirPropChanges: false, includedRegions: '', locations: [[credentialsId: 'sclocman', depthOption: 'infinity', ignoreExternalsOption: true, local: '.', remote: 'svn://svn地址信息']], workspaceUpdater: [$class: 'CheckoutUpdater']])
sh "svn upgrade #{HOME}/.JenkinsAgent"
}
stage('Unit Testing') {
dir('./fastlane') {
// sh 'source ~/.bash_profile && bundle exec fastlane ios test'
}
}
stage('Generate Test Report') {
dir('./fastlane') {
// sh 'source ~/.bash_profile && bundle exec fastlane ios test_report'
}
}
stage('Update the Version NO.') {
dir('./fastlane') {
sh 'source ~/.bash_profile && bundle exec fastlane ios update_version'
}
}
stage('Functional Testing') {
dir('./fastlane') {
sh 'source ~/.bash_profile && bundle exec fastlane ios function_test'
}
}
stage('Build') {
dir('./fastlane') {
sh 'source ~/.bash_profile && bundle exec fastlane ios build config:Debug'
}
}
stage('Release Version') {
dir('./fastlane') {
sh 'source ~/.bash_profile && bundle exec fastlane ios deploy config:Debug'
}
}
}

fastlane

fastlane 安装
fastlane - iOS 和 Android 的自动化构建工具

$ xcode-select --install    #确保安装了最新的xcode command line tools
$  sudo gem install fastlane -NV   # 安装fastlane


fastlane使用
首先进入你所在工程的目录下,然后执行:

$ fastlane init

按照提示进行即可。成功后你的目录工程下会多出一个fastlane目录,更多fastlane使用请参考。

构建故障排查

构建版本error #1

找不到打包的ipa,造成不能上传蒲公英,couldn't open file "/Users/apple/.JenkinsAgent/workspace/locmanYZY-Test/fastlane/fastlane_build/fastlane/result/archive/Debug/ipa/Debug.ipa

原因:未在Pipeline配置打包stage





构建版本error #2

打包未签名,Code signing is required for product type 'Application' in SDK 'iOS 10.2

原因:Agent机器为配置对应证书及Profile



构建版本error #3

Could not find lane 'ios build_app_for_simulator'. Available lanes: ios test, ios build_ipa, ios build_simulator_app, ios deploy_to_pgyer, ios update_build_number
原因:stage配置执行的lane找不到,直接参考提示修改即可

![](http://upload-images.jianshu.io/upload_images/2010692-84a3e4a957aaaf3a.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


构建版本error #4

Runnning script '[CP] Embed pods Frameworks'
原因:需要证书授权



构建版本error #5

curl error SSLRead

配置curl ssl:

$ php -i |grep "SSL Version"  #看看SSL Version的信息
SSL Version => SecureTransport

// 执行下面命令
$ brew tap homebrew/dupes
$ brew tap homebrew/versions
$ brew tap homebrew/php

$ brew install --with-openssl curl

$ brew install \
--with-apache \
--with-homebrew-curl \
--with-homebrew-openssl \
--without-snmp php55
$ php -i | grep "SSL Version"  #如果看到以下,则操作成功
SSL Version => OpenSSL/1.0.1j
```
![](http://upload-images.jianshu.io/upload_images/2010692-e5e8a70d4f1021ad.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

#### 结后语
- **相关工具推荐**

* [iTerm 2](http://www.iterm2.com/downloads.html) 一款可以替代Mac自带终端的软件,为了使其用起来顺手可以参考[Mac配置终端环境 iTerm2 + Zsh + Oh My Zsh + tmux](http://www.tuicool.com/articles/FFN7Vbq)

* [PostMan](https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop?hl=en) 接口测试工具,属于chrome插件,也可以是APP模式,但是需要安装了chrome才能使用
* [Atom](https://atom.io/) 用法等参考[Atom中文社区](https://atom-china.org/) ,[知乎](https://www.zhihu.com/question/22867204)上有对此款软件的评价
* [Sublime](http://www.sublimetext.com/)
* [alfred](https://www.alfredapp.com/) 用了你就知道有多方便,付费版本功能更多,可以自定义overflow

- **相关技术网站推荐**
* [Thoutworks技术雷达](https://www.thoughtworks.com/radar) 同时可以参考Thoutworks公司[逸言](http://agiledon.github.io/blog/2013/04/17/thoughtworks-developer-reading-radar/)的博客
* [infoQ](https://www.infoq.com/) 实践驱动的社区资讯站点,致力于促进软件开发领域知识与创新的传播,包含有:架构、移动、运维、云计算、AI、大数据、容器等技术新闻,有中文版面
* 有问题上 [stackoverflow](http://stackoverflow.com)
* [ruby](https://ruby-china.org/) 了解学习相关ruby技术
* iOS 测试相关技术学习

| 技术框架  | 单元测试       | 截屏测试        | 功能测试  |
|--------| ------------- |:-------------:| :--------:|
| Quick   | ✅ Swift(BDD)|   ❎          |     ❎   |
| Nimble  | ✅ Swift(断言)|  ❎           |     ❎   |
| KIWI    | ✅ OC(BDD/断言/Mock)|   ❎    |     ❎   |
| FBSnapshotTestCase| ❎  |   ✅          |     ❎   |
| Calabash | ❎           |   ❎          |     ✅   |
| Appium   | ❎           |   ❎          |     ✅   |

   本文参考了很多blog、github、stackoverflow的文章及问题,感谢作者的分享!特别感谢ThoughtWorks的周教练耐心指导!本文提到的**后续补充问题及深入详解**将会持续更新,也欢迎各位修改文档使其更加丰富细致。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: