GitLab CI是GitLab为了提升自动化,按照DevOps理念而设计的Pipeline运行流程。 和Jenkins相比,GitLab本身,就相当于Jenkins的Master。
GitLab Runner类似Jenkins的Agent(Slave),可以理解为运行Job的容器或管理者。是运行 Pipeline 构建任务的进程。
GitLab CI/CD 介绍
- 持续集成(Continuous Integration) :频繁地(一天多次)将代码集成到主干。让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。
- 持续交付(Continuous Delivery) :频繁地将软件的新版本,交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段。持续交付可以看作持续集成的下一步。它强调的是,不管怎么更新,软件是随时随地可以交付的。
- 持续部署(continuous Deployment) :代码通过评审以后,自动部署到生产环境。持续部署是持续交付的下一步,持续部署的目标是,代码在任何时刻都是可部署的,可以进入生产阶段。
Gitlab CI/CD工作流程
让我们来全局性的了解Gitlab CI/CD的工作流程,如下图所示:
Gitlab CI/CD的三个阶段:
校验
: 在该步骤中Gitlab 主要完成CI功能:
- 开发人员提交代码到一个特定的分支,该分支具有Gitlab CI
- Gitlab CI完整构建在其中有代码扫描,性能测试,单元测试,容器扫描,依赖扫描等
- 在其中Gitlab的那个stage失败后,需要开发者去进行对应修复,直到该分支的pipeline都构建和测试正常
打包
: 之后可以通过应用进行预览应用,最终将成功的进行制品管理
- 通过Container Registry存储docker镜像
- 通过NPM Registry存储NPM包
- 通过Maven Repository存储Maven工件
发布
: 持续部署,将通过测试和构建的分支merge 到主分支
- 通过手动确认审批部署将应用部署进入正式环境,进行应用发布
- 通过GitLab Pages部署静态网站
- 进行金丝雀发布,让一定比例的用户群新功能
- 通过GitLab Releases增加发新的记录
相关概念
- Job
表示构建工作,可以在一个 Stage 中定义多个 Job
Job 具有如下特点:
- 相同 Stage 中的 Jobs 会并行执行
- 相同 Stage 中的 Jobs 都执行成功,该 Stage 才会成功
- 任何一个 Job 失败,那么该 Stage 失败,那么构建任务 Pipeline 也失败
- Stage
表示构建阶段,可以在一次 Pipeline 中定义多个 Stage
Job 运行在 Stage 中
Stage 具有如下特点:
- 所有 Stage 按顺序运行,一个接着一个
- 所有 Stage 完成后,构建任务才会成功
- 任何一个 Stage 失败,后面的 Stage 都不会执行,构建任务失败
- Pipeline
表示构建任务
是一组运行在各个 Stage 中的 Job 集合
可以包含多个流程:编译、测试、部署等等
任何提交 或 Merge Request 都能触发 Pipeline
Job、Stage 和 Pipeline 的关系
利用docker来安装配置 gitlab runner...
拉取镜像:
docker pull gitlab/gitlab-runner:latest
创建 volume:
docker volume create --name gitlab_runner_config
docker volume create --name gitlab_runner_docker_sock
运行:
docker run -d --name gitlab-runner --restart always -v gitlab_runner_config:/etc/gitlab-runner -v gitlab_runner_docker_sock:/var/run/docker.sock gitlab/gitlab-runner:latest
GitLab Runner的三种类型
- 共享Runner(shared):运行整个平台项目的作业(gitlab)
- 群组Runner(group):运行特定group下的所有项目的作业(group)
- 项目Runner(specific):运行指定的项目作业(project)
为项目soanrqube_react注册runner:
# 执行注册runner命令,根据提示填写信息
gitlab-runner register
Enter the GitLab instance URL (for example, https://gitlab.com/):
http://192.168.1.104:10008/
Enter the registration token:
GR1348941DKfHGyzyjm4MbwfSSNAg
Enter a description for the runner:
[AdministratordeMacBook-Pro.local]: soanrqube_react
Enter tags for the runner (comma-separated):
sonarqube_react
Enter optional maintenance note for the runner:
sonarqube_react
Registering runner... succeeded runner=GR1348941DKfHGyzy
Enter an executor: docker-ssh, parallels, ssh, virtualbox, docker+machine, docker-ssh+machine, instance, docker, shell, kubernetes, custom:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
Configuration (with the authentication token) was saved in "/Users/administrator/.gitlab-runner/config.toml"
其中URL:http://192.168.1.104:10008/, token: GR1348941DKfHGyzyjm4MbwfSSNAg来自gitlab 的项目sonarqube-react下的runner 配置信息
运行未标记的作业
gitlab-ci.yml:
字段及描述参见:docs.gitlab.com/ee/ci/yaml/
.gitlab-ci.yml
是用来配置CI在我们的项目中做些什么工作。它位于项目的根目录。
CI/CD 流水线举例
下图是Gitlab对阶段和阶段状态的展示:
图片来源:www.zknow.com/choerodon/b…
GitRunner 时序图:
图片来源:www.cnblogs.com/gtea/p/1627…
执行时序:
- 变动代码推送到GitLab上
- GitLab 将这个变动通知GitLab-CI
- GitLab-CI找出这个工程相关联的gitlab-runner
- gitlab-runner把代码更新到本地
- 根据预设置的条件配置好环境
- 根据预定义的脚本(一般是.gitlab-ci.yml)执行
- 把执行结果通知给GitLab
- GitLab显示最终执行的结果