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 版本即可。
配置 Jenkins
安装好 Jenkins 下面就可以来配置了。
初始化
使用 Homebrew 启动 Jenkins,即可使用浏览器打开 localhost:8080
。
brew services start jenkins
输入 ~/.jenkins/secrets/initialAdminPassword
初始密码并「Continue」:
由于我们是针对 iOS 项目,Jenkins 默认安装的插件对于我们是多余的,因此我们选择右侧的「Select plugins to install」:
按照我们的项目环境,我反选了 SVN、GitHub、Gradle 等这些无关的插件,增加了 GitLab、本地化(简体中文语言包)等插件。当然,这里不需要太过在意,之后我们也可以方便地管理插件:
根据提示创建第一个管理员账户:
设置 Jenkins 的地址,我们这里先使用默认的地址:
至此,Jenkins 的初始化已经完成:
⚠️:如果 Jenkins 提示如下图的「Offline」,那么首先需要检查网络。由于国内众所周知的原因,如果网络没有问题可以尝试替换 Jenkins 的源地址为国内的镜像。
国内可以选择清华大学的 Jenkins 源:将 ~/.jenkins/hudson.model.UpdateCenter.xml
中的 url
替换为 https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/current/update-center.json
。
保存并重启 Jenkins 即可生效:
brew services restart jenkins
配置 SSH 证书
为了打通 CI 与代码仓库,即 Jenkins 和 GitLab,我们需要配置 SSH 证书让 GitLab 信任 Jenkins。
这里我申请了单独的 GitLab 账号,这是因为 CI 的操作不应当与任何个人开发「纠缠」。另外我们需要将新账号以「Developer 权限」加入到 GitLab 中:
在 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 中:
在 Jenkins 中创建 Domain(Credentials - Systems - Add Domain):
并在该 Domain 下创建证书(Add Credentials),我们这里选择 SSH 方式,将上面生成的 SSH 密钥设置在「Private Key」中:
至此,SSH 证书配置完成,Jenkins 已经可以和 GitLab 连接起来了。
fastlane
# 安装 RVM
curl -sSL https://get.rvm.io | bash -s stable
rvm install "ruby-2.3.7"