GitLab+Nornor3.0.0完成CI/CD流水线配置(更新版)

CI/CD的意义:

CI/CD作为DevOps中的常见的术语,其含义是持续集成(Continuous Integration)、持续交付(Continuous Delivery) 、持续部署(Continuous Deployment) 的新方法。
在这里插入图片描述

简单来说,当我们修改了相关的代码,可以push到CI/CD的平台中,例如(GitLab、Jenkins),这些平台能够在push的代码发生变动后,实时执行代码操作,实现自动化配置。

CI/CD的思想结合到网络自动化运维中,便可以让我们减少对于设备的接触,并且提高部署上线的效率。当脚本发生更改时,我们仅需要将其push到CI/CD的平台上,便可以自动的在测试环境中自动部署,当我们检查无误后,又可以直接在生产环境中部署。详细思想的阐述可以看如下这篇文章:
https://www.linkedin.com/pulse/network-software-cicd-netdevops-andrea-dainese/
或者如下这个视频分析:
https://www.bilibili.com/video/BV1Cy4y1H7SC?from=search&seid=7669797109873246306

当然,目前业内思科也有了相应的解决方案,如果可以翻墙,可以参考视频教学:
https://www.youtube.com/watch?v=s3iDm0Mw-YE&t=466s
对应的GitHub链接如下:
https://github.com/CiscoDevNet/cml-cicd

实验目的:

通过GitLab CI/CD流水线,监控Nornor脚本,并实时进行测试部署。

本次实验将在“Nornor3.0.0入门实验”的基础上完成,实验链接如下:https://blog.csdn.net/tushanpeipei/article/details/117171537?spm=1001.2014.3001.5501

步骤一:GitLab私有仓库安装

实验环境:Centos8,已经提前安装好Docker。

子步骤1:拉取gitlab镜像

docker pull gitlab/gitlab-ce

ce是社区版本,免费。

子步骤2:运行gitlab-ce容器
通常会将 GitLab 的配置 (etc) 、 日志 (log) 、数据 (data)放到容器之外, 便于日后升级, 因此请先准备这三个目录。并确保目录存在并且已授予适当的权限。

在系统的根目录执行(存放的路径根据自己随意设置即可)。

mkdir -p /data/gitlab/etc /data/gitlab/log /data/gitlab/data
chmod 777 /data/gitlab/etc /data/gitlab/log /data/gitlab/data

然后创建容器

docker run -dit --name=gitlab --restart=always -p 8443:443 -p 80:80 -p 222:22 -v /data/gitlab/etc/:/etc/gitlab -v /data/gitlab/log:/var/log/gitlab -v /data/gitlab/data:/var/opt/gitlab --privileged=true gitlab/gitlab-ce

解释:

  1. -d:后台运行
  2. -p:将容器内部端口向外映射
  3. –name:命名容器名称
  4. -v:将容器内数据文件夹或者日志、配置等文件夹挂载到宿主机指定目录
  5. 8443:443:将http:8443映射到外部端口443
  6. 80:80:将web:80映射到外部端口80
  7. 222:22:将ssh:22映射到外部端口222

注意: 如果端口映射冲突可以自行更改端口。

查看容器是否启动:

[root@localhost /]# docker ps
CONTAINER ID   IMAGE              COMMAND                  CREATED         STATUS                            PORTS                                                            NAMES
881d0b875d3a   gitlab/gitlab-ce   "/assets/wrapper"        2 minutes ago   Up 2 minutes (health: starting)   0.0.0.0:80->80/tcp, 0.0.0.0:222->22/tcp, 0.0.0.0:8443->443/tcp   gitlab

子步骤3:修改gitlab.rb文件
按上面的方式,gitlab容器运行没问题,但在gitlab上创建项目的时候,生成项目的URL访问地址是按容器的hostname来生成的,也就是容器的id。作为gitlab服务器,我们需要一个固定的URL访问地址,于是需要配置gitlab.rb ,配置http协议所使用的访问地址。

首先需要将gitlab的容器stop一下:

docker stop gitlab

通过vim来编辑相应的配置:

vim /data/gitlab/etc/gitlab.rb

此文件中的所有信息都是被注释掉的,需要找到如下三行取消注释,并修改其中的内容。

配置http协议所使用的访问地址(宿主机地址),不加端口号默认为80:

external_url 'http://192.168.0.166'  

配置ssh协议所使用的访问地址和端口:

gitlab_rails['gitlab_ssh_host'] = '192.168.0.166'
gitlab_rails['gitlab_shell_ssh_port'] = 222 # 此端口是run时22端口映射的222端口

保存配置文件并退出。

子步骤4:修改gitlab.yml文件

vim /data/gitlab/data/gitlab-rails/etc/gitlab.yml

设置host为自己的地址:

 ## GitLab settings
  gitlab:
    ## Web server settings (note: host is the FQDN, do not include http://)
    host: 192.168.0.166
    port: 80
    https: false

子步骤5:启动容器,登陆检查

docker start gitlab

输入命令后等待一段时间,使用命令docker ps查看容器的状态:

[root@localhost /]# docker ps
CONTAINER ID   IMAGE              COMMAND                  CREATED          STATUS                   PORTS                                                                              NAMES
881d0b875d3a   gitlab/gitlab-ce   "/assets/wrapper"        24 minutes ago   Up 2 minutes (healthy)   0.0.0.                  0:80->80/tcp, 0.0.0.0:222->22/tcp, 0.0.0.0:8443->443/tcp   gitlab

注意STATUS这里一定要是healthy。然后再游览器中输入192.168.0.166这个宿主机地址,进入到gitlab的页面。初次登陆会让你设置root账号的密码,并且需要满足一定的安全性要求,然后就可以通过root和你设置的密码进行登陆。
在这里插入图片描述

步骤二:将pycharm连接到GitLab

将本地的代码commit并push到gitlab项目中。

子步骤1:在pycharm中安装如下插件在这里插入图片描述
子步骤2:添加gitlab的地址
在这里插入图片描述

子步骤3:Gitlab创建项目
在这里插入图片描述
设置项目名称:在这里插入图片描述
找到项目的地址并复制:
在这里插入图片描述

子步骤4:pycharm将代码push到gitlab的项目中

在这里插入图片描述
设定自定义的远程链接:
在这里插入图片描述
将复制到的地址粘贴到其中:
在这里插入图片描述
Nornir代码和之前Nornir入门实验的相同,相关介绍请参考:
https://blog.csdn.net/tushanpeipei/article/details/117171537?spm=1001.2014.3001.5501

结构如下:
在这里插入图片描述

最后选择我们设置的nornir_cicd,commit代码后并选择push到master branch:
在这里插入图片描述

子步骤5:在gitlab项目中查看push的结果,并创建test_branch分支

如上图所示,已经将代码已经push到gitlab的对应项目中,默认在master branch中,这个branch的代码我们做生产环境部署使用:
在这里插入图片描述
创建test_branch,做测试使用:
在这里插入图片描述
选择Create from master:
在这里插入图片描述
可以看到在test_branch中查看得到从master branch继承的代码:
在这里插入图片描述

步骤三:安装GitLab runner

GitLab-Runner是配合GitLab-CI进行使用的。一般地,GitLab里面的每一个工程都会定义一个属于这个工程的软件集成脚本,用来自动化地完成一些软件集成工作。当这个工程的仓库代码发生变动时,比如有人push了代码,GitLab就会将这个变动通知GitLab-CI(已经自动安装)。这时GitLab-CI会找出与这个工程相关联的Runner,并通知这些Runner把代码更新到本地并执行预定义好的执行脚本。

所以,GitLab-Runner就是一个用来执行软件集成脚本的东西。你可以想象一下:Runner就像一个个的工人,而GitLab-CI就是这些工人的一个管理中心,所有工人都要在GitLab-CI里面登记注册,并且表明自己是为哪个工程服务的。当相应的工程发生变化时,GitLab-CI就会通知相应的工人执行软件集成脚本。如下图所示:
在这里插入图片描述
Centos中GitLab-Runner的安装与使用:

  1. 添加yum源:
  curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash
  1. 安装runner:
  yum install gitlab-ci-multi-runner
  1. 向GitLab-CI注册runner:
  gitlab-ci-multi-runner register

向GitLab-CI注册一个Runner需要两样东西:GitLab-CI的url和注册token,其中这两个值可以在gitlab的如下地方找到:
在这里插入图片描述

除此之外,在注册时,还有两个地方需要注意:
在这里插入图片描述

  1. tags:表示后续调用gitlab runner的名称;
  2. executor,后续需要执行shell命令操作,这里我们敲上shell就行。

我们需要分布在测试和生产环境中创建runners,tag分别为nornir、nornir_deploy。注册完成后,我们便可以在runner栏下看到注册成功的runner,其中绿色的表示runner正常:

在这里插入图片描述

步骤四:执行CI/CD流水线

子步骤1:配置.gitlab-ci.yml文件
在根目录下创建一个.gitlab-ci.yml的文件,请注意这个文件的名称一定要固定,且一定要设置在根目录下。设置这个yml文件的目的是gitlab的CICD将根据其中定义的步骤进行流水线工作。
在这里插入图片描述
其实每一个stage可以包含多个job(名字可以自定义),每个job中需要去执行一个script文件,我们这里是脚本的目的是下载requirements.txt中的python包和执行nornir_config.py文件。本次实验中设置的CI/CD的步骤十分简单,真实的步骤还需要不断的去优化调整,.gitlab-ci.yml中信息如下:

# 该ci pipeline适合的场景
stages:
  - install
  - deploy

job1-test:
  stage: install
  # 所需执行的脚本
  only:
    - test_branch
  # 仅test_branch分支执行
  script:
    - pip3 install -r requirements.txt
  # 指定哪个ci runner跑该工作
  tags:
    - nornir

job1-master:
  stage: install
  # 所需执行的脚本
  only:
    - master
  # 仅master分支执行
  script:
    - pip3 install -r requirements.txt
  # 指定哪个ci runner跑该工作
  tags:
    - nornir_deploy

job2-test:
  stage: deploy
  # 所需执行的脚本
  only:
    - test_branch
  # 仅test_branch分支执行
  script:
    - python3 nornir_config.py
  # 指定哪个ci runner跑该工作
  tags:
    - nornir

job2-master:
  stage: deploy
  # 所需执行的脚本
  only:
    - master
  # 仅master分支执行
  script:
    - python3 nornir_config.py
  # 指定哪个ci runner跑该工作
  tags:
    - nornir_deploy

注意:其中tags需要和设置的gitlab runner的tag相对应。创建完成后commit并push到测试分支中:
在这里插入图片描述
测试分支中可以看到:
在这里插入图片描述

具体.gitlab-ci.yml文件的相关语法,请参考:
http://www.ttlsa.com/auto/gitlab-cicd-gitlab-ci-yml-configuration-tasks-detailed/

执行步骤图解如下:
在这里插入图片描述

gitlab目前已经根据.gitlab-ci.yml文件中的步骤执行stages。

子步骤2:查看每一个stage的执行的情况
在CI/CD栏中找到pipelines:
在这里插入图片描述

找到执行的pipeline,并进入stage1:

在这里插入图片描述

stage1:安装需要的python包
在这里插入图片描述

stage2:nornir对设备进行配置

在这里插入图片描述

子步骤3:测试分支OK后,我们可以合并到生产部署分支
在这里插入图片描述

选择source和target branch:
在这里插入图片描述

填写合并请求,这里指定的是自己,可以指定给上级或者其他有权限的人:
在这里插入图片描述

最后做批准,即可部署到生产环境:
在这里插入图片描述

查看CI/CD工作流程:
在这里插入图片描述

可以看到,已经部署到了生产环境。进一步检查生产环境的两个stage是否正常:
在这里插入图片描述
在这里插入图片描述

到此为止,我们完成了一套简单的CI/CD部署流程。

其他参考资料:
https://blog.csdn.net/lizhiqiang1217/article/details/88803783

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

格洛米爱学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值