概念
- 在Gitlab项目的代码仓库里放入gitlab-ci.yml,该文件里定义了CI/CD的全部流程及每个步骤需要做些什么事情。
- 当开发者提交代码到Gitlab的代码仓库时,Gitlab就会自动根据gitlab-ci.yml文件里定义的流程进行CICD
- Gitlab解析步骤,给Gitlab Runner分配CICD任务,实际完成具体任务操作的是Gitlab Runner
Demo开始
1. 在Gitlab上创建一个代码项目
2. 找到Gitlab的 Runner Token,下面步骤需要用
2. 找到Gitlab的 Runner Token,下面步骤需要用
3. 安装Runner
以docke的方式r安装(推荐,简单,这里选用docker方式)
在宿主机下载kubectl 和 配置k8s连接文件
略,大家懂的
启动容器,把配置文件目录映射到宿主机做持久化,同时把kubectl命令、k8s连接文件全部影射进去
docker run -d --name gitlab-runner --restart always -v /srv/gitlab-runner/config:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock -v /usr/local/bin/kubectl:/usr/local/bin/kubectl -v /root/.kube/config:/home/gitlab-runner/.kube/config gitlab/gitlab-runner:latest
备注:由于Gitlab-runner在执行任务时是使用gitlab-runner用户来操作的,所以k8s连接文件要影射到gitlab-runner的用户目录下
(可跳过,如果下面注册时提示runner配置文件不存在的话再回来看这步)
停止并移除容器
docker stop gitlab-runner
docker rm gitlab-runner
宿主机创建配置文件目录
mkdir /srv/gitlab-runner/config -p
启动容器,影射宿主机目录到容器的非配置文件目录
docker run -d --name gitlab-runner --restart always -v /srv/gitlab-runner/config:/etc/gitlab-runner1 gitlab/gitlab-runner:latest
进入容器, 拷贝gitlab-runner配置文件目录到宿主机
docker exec -it gitlab-runner /bin/bash
cp /etc/gitlab-runner/config.toml /etc/gitlab/runner1/
停止并移除容器
docker stop gitlab-runner
docker rm gitlab-runner
在宿主机下载kubectl 和 配置k8s连接文件
略,大家懂的
正式启动容器,把宿主机的Gitlab-runner配置文件目录、kubectl命令、k8s连接文件全部影射进去
docker run -d --name gitlab-runner --restart always -v /srv/gitlab-runner/config:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock -v /usr/local/bin/kubectl:/usr/local/bin/kubectl -v /root/.kube/config:/home/gitlab-runner/.kube/config gitlab/gitlab-runner:latest
备注:由于Gitlab-runner在执行任务时是使用gitlab-runner用户来操作的,所以k8s连接文件要影射到gitlab-runner的用户目录下
4. 注册Runner(把这个Runner注册到Gitlab上)
进入容器
docker exec -it gitlab-runner /bin/bash
注册
gitlab-runner register
----------------- 注册过程的交互 ---------------
Runtime platform arch=amd64 os=linux pid=32 revision=c6bb62f6 version=14.10.0
Running in system-mode.
Enter the GitLab instance URL (for example, https://gitlab.com/):
http://gitlab.example.com -- gitlab服务器的地址
Enter the registration token:
7oQvKcxbRszUtK79Vd3z -- 输入gitlab的token
Enter a description for the runner:
[f6da4f202da3]: runner1 -- 这个runner的名称
Enter tags for the runner (comma-separated):
tag1 -- 这个runner的标签,有点类似组的概念,执行任务时,可以指定属于某个标签的runner一齐来执行
Enter optional maintenance note for the runner:
-- 直接回车跳过
Registering runner... succeeded runner=7oQvKcxb
Enter an executor: ssh, virtualbox, kubernetes, docker, shell, parallels, docker+machine, docker-ssh+machine, custom, docker-ssh:
shell -- 选择执行器类型,用来执行具体任务的执行器,runner支持很多种执行器,这里选择shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
-----------------------------------------------------
在Gitlab里看到刚刚注册的Runner
5. 在gitlab项目里编写.gitlab-ci.yml---------- .gitlab-ci.yml----- 你们用的时候记得把中文解释部分删掉哦 ------
stages: -- 声明步骤,按顺序执行,其中一个步骤失败了就会停止
- build -- 步骤1(只是模拟实际环境中的build)
- test -- 步骤2
- deploy -- 步骤3,本Demo最重要的部分
build: -- job的名称
stage: build -- 对应上面步骤的名称
tags:
- tag1 -- runner标签,指定由属于这个标签的runner负责执行
script:
- echo "代码编译。。。" -- 这个步骤要执行的命令
- echo "这是第二条命令"
test:
stage: test
tags:
- tag1
script:
- echo "测试代码。。。"
deploy:
stage: deploy
tags:
- tag1
script:
- kubectl apply -f nginx.yaml -- 把nginx.yaml部署到k8s
6. 在gitlab项目编写nginx.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: default
spec:
containers:
- name: nginx
image: nginx:1.21
7. 提交这两个文件上gitlab
git add * git add .gitlab-ci.yml git commit -m '第一次部署nginx1.21' git push8. 此时,因为gitlab上就会有gitlab-ci.yml,所以,gitlab已经在开始做CICD了
在gitlab的项目上的CICD里已经看到有一次成功的构建
查看k8s集群里的容器,已经有一个运行nginx容器,版本为1.21
9. 修改nginx.yaml文件,把image的版本改为1.21.6,来模拟实际应用中的版本更新需求,然后提交到gitlab改image内容为1.21.6
vim nginx.yaml
提交到gitlab
git add *
git commit -m '把nginx1.21更新为1.21.6'
git push
查看gitlab流水线
查看k8s里的情况
10. 看到已经从1.21成功变成1.21.6啦,CICD已经完成。


