GitlabCI/CD

官方文档:https://docs.gitlab.com/ee/ci/

主要分为三个部分:

  • Continuous Integration (CI) 持续集成

  • Continuous Delivery (CD) 持续交付

  • Continuous Deployment (CD) 持续部署

Gitlab CI/CD 组件

  1. Gitlab CI/CD 是Gitlab代码仓库的一部分

  2. GitlabRunner,是一个专门处理构建的应用程序,可以独立于Gitlab部署,并通过API与Gitlab CI/CD一起使用

  3. .gitlab-ci.yml配置文件,是告诉Runner怎么执行CI/CD的脚本

为了运行测试,至少需要一个Gitlab示例和一个GitlabRunner,并且提供.gitlab-ci.yml文件。

Gitlab CI/CD 特点

  1. 多平台:使用Golang,支持多平台

  2. 多语言:构建脚本实际是由命令行驱动的,可以与多语言一同使用

  3. 稳定构建:Gitlab CI/CD 和 Gitlab Runner在不同的机器上运行

  4. 并行构建:Gitlab CI/CD 再多台机器上拆分构建,以实现快速执行

  5. 实时日志记录

  6. 灵活的管道:可以在每个阶段定义多个并行作业,并且可以触发其他构建

  7. 版本管道:一个.gitlab-ci.yml文件,包括测试、过程步骤、放置在仓库中,每个人都可以贡献更改,确保每个分支获得所需的管道

  8. 自动缩放:可以在docker或者k8s中自动缩放构建机器

  9. 构建工件:可以将二进制文件和其他构建工件上载道Gitlab并浏览和下载他们

  10. Docker支持、K8s支持

  11. 容器注册表:内置的容器注册表,用于存储、共享和使用容器镜像

  12. 受保护的变量:在部署期间使用受每个环境保护的变量安全的存储和使用机密

  13. 多环境:可以定义多个环境

Jenkins CI VS Gitlab CI

  1. 当代码新建立一个分支时,Jenkins需要重新配置一个新的构建,而Gitlab的.gitlab-ci.yml会被带入到新的分支中,会自动生成新的构建

  2. Jenkins支持定时构建,Gitlab则不支持定时构建,可以通过WebAPI使用同一台或者另一台服务器上的cronjob触发作业和管道。

  3. Jenkins的权限管理粒度太粗,Gitlab则有完善的权限管理(与代码权限一致)

  4. 代码库的交互上,Jenkins可以支持多种代码仓库,而Gitlab ci与Gitlab深度绑定

  5. 插件管理上,Jenkins的插件很多,但是后期更新之后的成本较高。而Gitlab是开放式的,任何人都可以像代码库贡献更改,一旦合并,将自动测试并维护每个更改。

  6. Gitlab没有统一的管理界面,无法统筹管理所有的项目

  7. Gitlab配置依赖于代码仓库,耦合度没有jenkins低

  8. Jenkins体量较大适合较大的团队,而Gitlab适合较小体量的团队,比如敏捷开发

工作原理

  1. 将代码托管到Gitlab

  2. 在项目的根目录创建ci文件: .gitlab-ci.yml,在文件中指定构建、测试和部署脚本

  3. Gitlab将检测道他并使用名为 GitlabRunner的工具运行脚本

  4. 脚本被分组为作业、他们共同组成了一个管道

Gitlab Runner

  • 类似Jenkins的Agent,用于构建脚本任务的具体实例

  • Gitlab Runner 是一个开源项目,他与Gitlab CI结合使用,用于运行作业并将结果发送给Gitlab

  • Gitlab CI是Gitlab随附的用于协调作业的开源持续集成服务

  • Gitlab Runner 使用Go编写,可在Linux、MacOS、Windows操作系统执行

  • Gitlab Runner运行的Docker版本最少为 Docker v1.13.0

  • Gitlab Runner版本于Gitlab的版本同步

  • 可以根据需要配置任意数量的Runner

  • 多个Gitlab Runner可以并行执行作业

  • GitlabRunner实际通过ssh连接Docker容器、本地、通过SSH执行作业(支持Bash、Batch、PowerShell),也可以对Docker进行自动伸缩扩容

  • 可以对Runner定义作业运行环境

  • 自动重新加载配置,无需重启

Gitlab Runner的类型

  1. shared 共享类型,运行整个平台项目的作业

  2. group 项目组类型,运行特定group下的所有项目的作用

  3. specific项目类型,运行指定的project项目作业

Gitlab Runner的状态

  1. locked,锁定状态,无法运行项目作业

  2. paused,暂停状态,暂时不会接收新的作业

安装 Gitlab Runner

官方文档:https://docs.gitlab.com/runner/install/

注册 Gitlab Runner

当目标机器或者容器安装Gitlab Runner后,就需要将Gitlab Runner注册到Gitlab CI中,这样CI才可以在构建作业时使用目标Runner。

注册的步骤:

  1. 从Gitlab CI获取Runner Token

  2. Runner使用Token注册到Gitlab CI

最后更新于