-
Jenkins
-
GitLab CI
-
TeamCity
-
Travis CI
-
Bamboo
-
CircleCI
GitLab
是一个利用
Ruby on Rails
开发的开源应用程序,实现一个自托管的 Git 项目仓库,可通过 Web 界面进行访问公开的或者私人项目。它拥有与
GitHub
类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。
GitLab CI/CD
是
GitLab Continuous Integration
(Gitlab持续集成)的简称。GitLab 自
GitLab 8.0
开始提供了持续集成的功能,且对所有项目默认开启。只要在项目仓库的根目录添加
.gitlab-ci.yml
文件,并且配置了Runner(运行器),那么每一次
push
或者合并请求(
Merge Request
)都会触发
CI Pipeline
。
GitLab Runner
GitLab Runner
是一个开源项目,可以运行在 GNU / Linux,macOS 和 Windows 操作系统上。每次
push
的时候 GitLab CI 会根据
.gitlab-ci.yml
配置文件运行你流水线(
Pipeline
)中各个阶段的任务(
Job
),并将结果发送回 GitLab。GitLab Runner 是基于 Gitlab CI 的 API 进行构建的相互隔离的机器(或虚拟机)。GitLab Runner 不需要和 Gitlab 安装在同一台机器上,且考虑到 GitLab Runner 的资源消耗问题和安全问题,也不建议这两者安装在同一台机器上。
Gitlab Runner 分为三种:
-
共享Runner(
Shared runners
)
-
专享Runner(
Specific runners
)
-
分组Runner(
Group Runners
)
Pipelines
中文称为流水线,是分阶段执行的构建任务。如:安装依赖、运行测试、打包、部署开发服务器、部署生产服务器等流程。每一次
push
或者
Merge Request
都会触发生成一条新的Pipeline。
下面是流水线示例图:
Stages
表示构建阶段,可以理解为上面所说“安装依赖”、“运行测试”等环节的流程。我们可以在一次 Pipeline 中定义多个 Stages,这些 Stages 会有以下特点:
-
所有 Stages 会按照顺序运行,即当一个 Stage 完成后,下一个 Stage 才会开始(当然可以在
.gitlab-ci.yml
文件中配置上一阶段失败时下一阶段也执行)
-
只有当所有 Stages 完成后,该构建任务 (Pipeline) 才会成功
-
如果任何一个 Stage 失败,那么后面的 Stages 不会执行,该构建任务 (Pipeline) 失败
下面是一个流水线内的阶段任务示例图:
Jobs
表示构建的作业(或称之为任务),表示某个 Stage 里面执行的具体任务。我们可以在 Stages 里面定义多个 Jobs,这些 Jobs 会有以下特点:
-
相同 Stage 中的 Jobs 无执行顺序要求,会并行执行
-
相同 Stage 中的 Jobs 都执行成功时,该 Stage 才会成功
-
如果任何一个 Job 失败,那么该 Stage 失败,即该构建任务 (Pipeline) 也失败(可以在
.gitlab-ci.yml
文件中配置允许某 Job 可以失败,也算该 Stage 成功)
YAML
文件
.gitlab-ci.yml
来管理项目构建配置。该文件需要存放于项目仓库的根目录(默认路径,可在 GitLab 中修改),它定义该项目的 CI/CD 如何配置。所以,我们只需要在
.gitlab-ci.yml
配置文件中定义流水线的各个阶段,以及各个阶段中的若干作业(任务)即可。
下面是
.gitlab-ci.yml
文件的一个简单的
Hello World
示例: