简单的 Gitlab CICD Demo

概念

  1. 在Gitlab项目的代码仓库里放入gitlab-ci.yml,该文件里定义了CI/CD的全部流程及每个步骤需要做些什么事情。
  2. 当开发者提交代码到Gitlab的代码仓库时,Gitlab就会自动根据gitlab-ci.yml文件里定义的流程进行CICD
  3. Gitlab解析步骤,给Gitlab Runner分配CICD任务,实际完成具体任务操作的是Gitlab Runner

简单的 Gitlab CICD Demo_第1张图片

Demo开始

        1. 在Gitlab上创建一个代码项目

        2. 找到Gitlab的 Runner Token,下面步骤需要用

简单的 Gitlab CICD Demo_第2张图片

        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

简单的 Gitlab CICD Demo_第3张图片

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 push

8. 此时,因为gitlab上就会有gitlab-ci.yml,所以,gitlab已经在开始做CICD了

在gitlab的项目上的CICD里已经看到有一次成功的构建

简单的 Gitlab CICD Demo_第4张图片

查看k8s集群里的容器,已经有一个运行nginx容器,版本为1.21

简单的 Gitlab CICD Demo_第5张图片

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流水线

简单的 Gitlab CICD Demo_第6张图片

查看k8s里的情况

简单的 Gitlab CICD Demo_第7张图片

10. 看到已经从1.21成功变成1.21.6啦,CICD已经完成。

你可能感兴趣的:(git,ci)