-
什么是cicd
CI/CD 理念:就是将这一重复性操作进行自动化处理。
持续集成 CI(Continuous Integration):在源代码变更后,触发自动检测、构建和测试的过程。在代码提交后,会自动进行构建和测试,并反馈结果。当结果符合预期时,再将代码集成到主干。持续集成的目标是快速确保当前变更是可用的。
持续交付 CD(Continuous Delivery):是基于持续集成基础上,将集成后的代码自动化部署到各个环境测试,确定可以发布生产版本。
持续部署 CD(Continuous Deployment):是基于持续交付的基础上,将在各个环境经过测试的应用自动化部署到生产环境。
- GitLab-CI
GitLab-CI就是一套配合GitLab使用的持续集成系统。而且GitLab8.0以后的版本是默认集成了GitLab-CI并且默认启用的。
- GitLab-Runner
GitLab-Runner是什么?以及GitLab-Runner与GitLab-CI的关系
gitlab-runner: 是 CI 的执行环境
GiTLab Runner就是运行器,类似于Jenkins,可以为我们执行一些CI持续集成、构建的脚本任务,运行器具有执行脚本、调度、协调的工作能力。
GitLab-Runner是配合GitLab-CI进行使用的。一般地,GitLab里面的每一个工程都会定义一个属于这个工程的软件集成脚本,用来自动化地完成一些软件集成工作。当这个工程的仓库代码发生变动时,比如有人push了代码,GitLab就会将这个变动通知GitLab-CI。这时GitLab-CI会找出与这个工程相关联的Runner,并通知这些Runner把代码更新到本地并执行预定义好的执行脚本。
所以,GitLab-Runner就是一个用来执行软件集成脚本的东西。
Runner就像一个个的工人,而GitLab-CI就是这些工人的一个管理中心,所有工人都要在GitLab-CI里面登记注册,并且表明自己是为哪个工程服务的。当相应的工程发生变化时,GitLab-CI就会通知相应的工人执行软件集成脚本。
Runner可以分布在不同的主机上,同一个主机上也可以有多个Runner。
注意:GitLab-CI会为每一个Runner生成一个唯一的token,Runner通过这个token与GitLab-CI进行通信。
Runner类型
GitLab-Runner可以分类两种类型:Shared Runner(共享型)和Specific Runner(指定型)。
Shared Runner:这种Runner(工人)是所有工程都能够用的。只有系统管理员能够创建Shared Runner。
Specific Runner:这种Runner(工人)只能为指定的工程服务。拥有该工程访问权限的人都能够为该工程创建Shared Runner。
- gitlab-runner executer
shell executor
这种方式是在docker容器中执行shell,docker服务需要选择定制化的镜像,该镜像必须拥有shell运行时需要的一切命令。
docker executor
和安装至host差不多
等等其他
- 环境准备
系统环境:CentOS Linux release 7.5.1804 (Core)
安装Gitlab版本:GitLab Enterprise Edition 13
安装Gitlab-runner版本:Version: 15.0.0
安装Docker版本:Docker version 1.13.1, build 7d71120/1.13.1
基础镜像以普通centos镜像文件为例
导入容器镜像文件到本地镜像库
cat system.tar | docker import - centos:7.5
查看导入的镜像文件
docker images
- 安装gitlab-runner
添加源gitlab-runner
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
安装gitlab-runner
yum install gitlab-runner -y
相关命令
gitlab-runner verify —— 检查 gitlab-runner 运行情况
gitlab-runner start —— 开启 gitlab-runner
gitlab-runner stop —— 关闭 gitlab-runner
gitlab-runner --version —— 查看 gitlab-runner 信息
gitlab-runner status -- 查看状态
gitlab-runner list -- 查看runner注册列表
gitlab-runner unregister --name "名称" -- 删除注册信息
#使用令牌注销
gitlab-runner unregister --url http://gitlab.example.com/ --token t0k3n
#使用名称注销(同名删除第一个)
gitlab-runner unregister --name test-runner
#注销所有
gitlab-runner unregister --all-runners
删除runner
gitlab-runner verify --delete --name xxx
- 查看ci的url和token
查看CI地址和令牌
CI 的地址和令牌,在 项目 --> Settings --> CI/CD --> Runner:
- 注册gitlab-runner
实例1:注册gitlab-runner (docker executer)
gitlab-runner registe
查看gitlab-runner list
gitlab-runner list
那么,问题来了。注册好了的Runner的信息存放在哪儿了呢?
原来,Runner的信息是存放在一个配置文件里面的,配置文件的格式一般是.toml。这个配置文件的存放位置有以下几种情况:
- 在类Unix操作系统下(0.5.0之后版本)
- 如果是以root用户身份运行gitlab-ci-multi-runner register,那么配置文件默认是/etc/gitlab-runner/config.toml
- 如果是以非root用户身份运行gitlab-ci-multi-runner register,那么配置文件默认是~/.gitlab-runner/config.toml
- 在其他操作系统下以及0.5.0之前版本
配置文件默认在当前工作目录下./config.toml
修改build_iso gitlab-runner配置文件
修改runner配置文件如下(主要修改runners.docker有注释部分),
[[runners]]
name = "test"
url = "https://git.gitlab.com/"
token = "sdfsdsdf"
executor = "docker"
[runners.custom_build_dir]
[runners.cache]
[runners.cache.s3]
[runners.cache.gcs]
[runners.cache.azure]
[runners.docker]
tls_verify = false
image = "centos:7.5" # 指定基础镜像
privileged = true # 赋予权限
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = ["/home:/home:rw", "/cache"] # 配置映射目录
pull_policy = ["if-not-present"] # 指定读取本地镜像
shm_size = 0
- Gitlab查看gitlab-runner添加信息
查看gitlab
- 编写.gitlab-ci.yml
gitlab-ci 的 Pipline 具体流程和操作,是在项目根目录下的 .gitlab-ci.yml 文件中配置声明的。触发 Pipline 运行之后,gitlab-runner 会根据配置的 .gitlab-ci.yml 文件进行执行,执行结果会显示在 gitlab 中。
.gitlab-ci.yml:用于定义 CI/CD 流程分为几个阶段,每个阶段需要执行哪些任务
.gitlab-ci.yml 关键字配置说明
KEYWORD | REQUIRED | DESCRIPTION |
script | yes | CI/CD 过程需要执行的shell脚本 |
stage | no | 一个job流程,默认test |
variables | no | 定义变量 |
only | no | 指定当前job适用的git refs(分支、Tag)列表 |
except | no | 与only相反 |
tags | no | 通过标签管理或匹配runner |
allow_failure | no | 指定当前job是否容错,正常job失败会跳过后续job流程 |
参考文档:
CICD官方文档:https://docs.gitlab.com/
CICD中文文档:https://docs.gitlab.cn/jh/ci/quick_start/
Dcoker中文文档:DockerInfo-Docker容器技术教程,Docker信息传播和服务平台
其他参考文档:http://www.ttlsa.com/auto/gitlab-cicd-variables-zh-document/