gitlab 实现 CI/CD

自从进入现在的公司,托管代码的仓库就开始采用 gitlab , 前期通过配合使用 git 的,实现了对工程代码随心所欲般地操作。 和 git 行云般的命令相匹配, gitlab 托管工具上面,也能实现各种贴心的自定义配置,上周我对工程进行了 CI/CD 的配置,具体操作流程如下。

首先了解一下 gitlab 的来历:

GitLab是由GitLab Inc.开发,使用MIT许可证的基于网络的Git仓库管理工具,且具有wiki和issue跟踪功能。GitLab 由乌克兰程序员 Dmitriy Zaporozhets 和 Valery Sizov 开发,它由 Ruby 写成。后来,一些部分用 Go 语言重写。

怎么理解 MIT 协议呢?简单来说就是允许任何人以任何方式使用该软件。 大神之所以称为大神,不仅仅是惊叹的编程能力,更是施爱众生的风险品格。所以,现在公司无论大小,只要是拥有接受互联网的开放心态,基本都在使用 gitlab 。掌握 gitlab ,在一定程度上已经成为当下一个程序员的必备技能,话题扯远了,让我们回到正题。

配置 gitlab 的 CI 很简单,步骤大神都已经写的明明白白,按照下图点击,就能看到官方配置说明(不同 gitlab 版本位置可能不同):

gitlab 实现 CI/CD_第1张图片
CI配置.png

由于文档采用英文,需要不断通过实践调整理解的方向。简单来说分为 3 部:

1 在工程目下下创建 .gitlab-ci.yml 文件;
2 采用 ruby 语法,通过 .gitlab-ci.yml 文件配置项目自动打包流程,以iOS App 应用来说,比如可以依次运行单元测试、UI测试、build 和 archieve, 当然也可以选择仅仅执行一个 job(gitlab 的名称,可以理解成动作或者流程);
3 注册运行 runner ;

以我实际运行通过的 yml 文件配置为例,简要介绍下具体配置详情:

stages: 
  # - test 
  # - build 
  - release 

# test_job: 
#     stage: test 
#     script: 
#       - fastlane test 
#     tags: 
#       - ios 

# build_job: 
#     stage: build 
#     script: 
#       - fastlane build 
#     tags: 
#       - ios  

release_job: 
    stage: release 
    script: 
      - fastlane archive_app 
    tags: 
      - ios  
    only: 
      - tags    

在 release_job 中,运行的脚本为fastlane archive_app(所以要求 runner 设备安装 fastlane 命令), 指定的 runner (后面介绍配置) 名称为 ios , 最后出发的条件是在分支上打 tags 时。以上配置,用一句话解释就是当我在 git 分支上打 tag 并提交至 gitlab 时,gitlab 就会自动在 runner 上运行脚本 fastlane archive_app。

通过前面的描述,应该能够大概理解 runner 的含义,简单来说就是运行 runner 的设备,实际操作中就是运行的计算机或者服务器。runner 在运行脚本时,要求依赖一定的操作环境。比如,以前运行 Excel、Word 时要求 Windows 操作系统,在 Mac 上是不支持的。假如在
iOS 项目运行 fastlane 命令,就要求计算机安装 MacOS 系统(安装虚拟机也行),然后安装 Xcode 应用软件。

当一台机器安装好具体的操作环境和软件后,它就具备了成为 runner 的资格,想要成为 runner ,需要按照 gitlab 的规定进行配置:


gitlab 实现 CI/CD_第2张图片
runner配置

在命令行使用gitlab-runner status 命令,能够看到该 runner 服务的运行状态。之所以使用 token ,个人推测底层应该是使用 ssh 的命令,实现了 gitlab 服务器和 runner 间的通信。

关于 iOS 项目中 fastlane 的配置和使用,可以参考我的上一篇文章 https://www.jianshu.com/p/f4e76fa22f77 以上就是 gilab + fastlane 实现 iOS 项目 CI/CD 的简要框架,更具体和详细的配置,还需要细细阅读官方文档,加油吧。

喜欢和关注都是对我的鼓励和支持~

你可能感兴趣的:(gitlab 实现 CI/CD)