专注、坚持

iOS 项目持续集成实践(三)

2019.04.18 by kingcos

CI in Practice

Preface

上一篇中,主要讲述了如何使用 GitLab Runner 搭建 CI,其主要目的是在工程师开发、提交代码阶段集成了代码检查等工作。那么从代码到交付的过程该如何 CI 化呢?这次本文将聚焦于「使用 Jenkins 和 fastlane 搭建 CI」。

What

How

环境搭建

关于我们目前的 CI 环境的基本信息,可以参考「iOS 项目持续集成实践(二)」中相关内容,本文不再赘述。

iTerm (Optional) & Xcode & Homebrew

⚠️:参考「iOS 项目持续集成实践(二)」。

安装 Jenkins

仍然使用 Homebrew 来安装、管理软件包。但 Jenkins 依赖 JRE(Java 运行时环境),因此需要先安装 Java 8。

# 安装 Java8
brew cask install homebrew/cask-versions/java8

# 安装 Jenkins
brew install jenkins

⚠️:本文更新时,Jenkins 依赖 Java 8,但后续 Jenkins 可能升级支持 Java 的更高版本,可以尝试直接 brew install jenkins 然后根据报错提示(如下图),安装相应的 Java 版本即可。

1

配置 Jenkins

安装好 Jenkins 下面就可以来配置了。

初始化

使用 Homebrew 启动 Jenkins,即可使用浏览器打开 localhost:8080

brew services start jenkins

输入 ~/.jenkins/secrets/initialAdminPassword 初始密码并「Continue」:

2

由于我们是针对 iOS 项目,Jenkins 默认安装的插件对于我们是多余的,因此我们选择右侧的「Select plugins to install」:

5

按照我们的项目环境,我反选了 SVN、GitHub、Gradle 等这些无关的插件,增加了 GitLab、本地化(简体中文语言包)等插件。当然,这里不需要太过在意,之后我们也可以方便地管理插件:

6

根据提示创建第一个管理员账户:

7

设置 Jenkins 的地址,我们这里先使用默认的地址:

8

至此,Jenkins 的初始化已经完成:

9

⚠️:如果 Jenkins 提示如下图的「Offline」,那么首先需要检查网络。由于国内众所周知的原因,如果网络没有问题可以尝试替换 Jenkins 的源地址为国内的镜像。

3

国内可以选择清华大学的 Jenkins 源:将 ~/.jenkins/hudson.model.UpdateCenter.xml 中的 url 替换为 https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/current/update-center.json

4

保存并重启 Jenkins 即可生效:

brew services restart jenkins

配置 SSH 证书

为了打通 CI 与代码仓库,即 Jenkins 和 GitLab,我们需要配置 SSH 证书让 GitLab 信任 Jenkins。

这里我申请了单独的 GitLab 账号,这是因为 CI 的操作不应当与任何个人开发「纠缠」。另外我们需要将新账号以「Developer 权限」加入到 GitLab 中:

10

在 Mac Pro 上生成 SSH Key(关于此步骤的详细内容,可以参考 GitHub 的「Generating a new SSH key and adding it to the ssh-agent」一文):

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

将生成的 SSH 公钥设置在 GitLab 中:

11

在 Jenkins 中创建 Domain(Credentials - Systems - Add Domain):

12

并在该 Domain 下创建证书(Add Credentials),我们这里选择 SSH 方式,将上面生成的 SSH 密钥设置在「Private Key」中:

13

至此,SSH 证书配置完成,Jenkins 已经可以和 GitLab 连接起来了。

fastlane

# 安装 RVM
curl -sSL https://get.rvm.io | bash -s stable

rvm install "ruby-2.3.7"

Reference