55faf59315726aa32213b1bbe2ee969c
持续集成实例

一、前言

上一篇我们主要讲解了持续集成与Git 工作流,阅读完的朋友可以根据自己的项目特点选择合适的Git工作流(推荐使用TBD) 。本篇文章通过实践一个 iOS 项目的持续集成,帮助大家更好地掌握持续集成,效果如下:

二、Jenkins

安装

  1. 下载 JDK ,并安装
  2. 下载最新的 Jenkins 推荐下载war包,后续较好修改主目录
  3. 使用 java -jar jenkins.war 运行 Jenkins
  4. 打开浏览器访问 http://localhost:8080/ 即可打开jenkins

配置

  1. 解锁

    cenghaihandeMacBook-Pro:~ catchzeng$ sudo cat /Users/Shared/Jenkins/Home/secrets/initialAdminPassword
    Password:
    c291f44ba36940e*****e1b95a4**dda
  2. 安装插件

    建议直接选择安装推荐的插件

  3. 创建用户

  4. 安装 Blue Ocean 插件

  5. 创建项目

  6. 添加 SSH Key

  7. 配置 Pipeline

    这里先建一个 prepare 节点,里面执行 shell 命令 node -v 测试下环境是否已经搭建成功。


    测试的结果是失败的。在命令行下可以显示node版本,为什么在Jenkins下就不行了呢?
    原因: Jenkins 调用 shell 命令缺少环境变量,所以会出现类似“node: command not found”的问题。
    解决方法:为 Jenkins 设置环境变量

    将输出的内容复制到 Jenkins-》系统管理-》系统设置-》全局属性-》环境变量 中


    点击重运行,验证下环境变量是否生效

三、Jenkinsfile

也许你会好奇,在 Blue Ocean 的 Pipeline 编辑完成后,触发了什么操作,让持续集成按着编辑的 Pipeline 执行?

我们查看仓库可以发现,仓库里面多了一个 Jenkinsfile 文件,正是 Jenkinsfile 定义了整个 Pipeline 的执行。
Jenkins Pipeline 就是一系列的插件集合,可通过组合它们来实现持续集成和交付的功能。 Pipeline DSL 为我们提供了一个可扩展的工具集,将简单到复杂的逻辑通过代码实现。下面举个例子,辅助理解。

四、实例

  1. 创建 iOS 测试项目
    使用 Xcode 创建一个 iOS 项目,代码详见https://github.com/CatchZeng/CIDemo

  2. 配置 fastlane
    fastlane 是一款非常棒的移动端集成工具,覆盖了单元测试、构建、发布等流程,强烈推荐移动端的同学使用。
    切换到 CIDemo 目录,执行 sudo fastlane init 初始化项目。

  3. 添加单元测试
    打开 fastlane 初始化后生成的 FastFile,添加测试 Lane

    default_platform(:ios)
    
    platform :ios do
    desc "Test"
    lane :test do
     run_tests(scheme: "CIDemo")
    end
    end

    执行 fastlane test 便可查看单元测试效果

  4. 添加构建
    编辑 FastFile,添加 build lane

    desc "Build"
    lane :build do
    gym(scheme: "CIDemo",export_method:"development")
    end

    执行 fastlane build 查看构建效果
    构建过程

    构建过程

    构建结果

    构建结果

  5. 添加发布
    这里以发布到 fir.im 为例。
    首先需要安装 fir-cli ,然后根据文档使用 fir login 进行登录操作

    编辑 FastFile,添加 deploy lane

    desc "Deploy"
    lane :deploy do
    sh "python fir.py -p ../CIDemo"
    end

    注:fir.py 上传fir的脚本,可以到 https://github.com/CatchZeng/CIDemo 查看并下载使用。

    执行 fastlane deploy 查看发布效果

  6. 整合到 Jenkins

    编辑 Jenkins,添加test、build、deploy
    ```
    pipeline {
    agent any

top Created with Sketch.