GitLab依托快速迭代优势,逐渐完善了其对最新趋势、理念和技术的支持。尤其在DevOps和DevSecOps方面更是跑到了最浪尖。GitLab CI就是具体负责这些工作的工具套件,是一系列功能强大的工具,可用于开发测试运维一栈式服务,自动化任务执行,当然也包括虫虫要给大家说的一个方面TaD(Infrastructure as Code),基础架构即代码。本文实例演示Ansible的网络类的双路由器演示,节选自GitLab官方的CI/CD示例。
概述
在GitLab CI环境下,我们可以的方便的通过修改和推送Ansible playbook代码构建和修改虚拟网络基础架构环境,而无需在本地安装任何Ansible网络模块依赖项。
实例中的Ansible playbook由以下四个任务:
收集路由器信息:
显示OS版本
显示序列号
和配置SNMP:
基本步骤
缘起——问题看板
GitLab的每个计划都在同一个地方开始:问题看板。GitLab CI工作流程的第一步是检查ansible-demo项目中的问题板。在ansible-demo问题看板上,我们发现在所有路由器上更改SNMP字符串已经存在问题。在该问题中有一个指向安全策略的链接,根据安全策略每月必须轮换SNMP字符串,并且必须有不同的字符串用于只读和读写,该实例就演示为了符合安全策略的更改操作。
检查在双路由器演示中配置的SNMP字符串的命令是否遵循问题中概述的GitLab安全策略。
接下来,返回问题看板,将该问题分配给自己。并将标签从待办事项切换到问题的右侧边栏。
创建合并请求
下一步是从问题创建合并请求(MR)。仔细检查"正在进行工作"(WIP)标志是否已经附加到你的MR中,这样它就不会过提前和master合并。
由于SNMP字符串的更改很小,所以可以直接在浏览器上通过Web IDE进行在线编辑,而无需本地操作。打开CI/CD演示部分,转到Ansible Playbook,并编辑SNMP部分,使其显示为:
-snmp-server community New-SNMP-DEMO1 RO
-snmp-server community Fun-SNMP-RW-STR RW
请注意,根据问题中概述的GitLab安全策略,RO和RW要设置为不同的字符串。
提交更改
更新SNMP字符串后,直接提交更改。提交后,打开该更改的并排比较,查看确认MR已经包含了新提交的更新。并排比较工具是一种方便快捷的浏览更新的可视化工具。
测试执行
更改提交,会自动启动GitLab CI管道,执行以下任务:
语法检查
试运行
测试实验室/模拟环境的变化。
可以在GitLab CI管道中查看每个作业的进度和输出,以便执行SNMP更新。
查看作业的输出,显示模拟环境中的SNMP更新成功。
复选标记表示GitLab CI管道中的每个任务都已通过。接下来可以登录实验室路由器并查看更改。
RO和RW SNMP字符串的更改将反映在路由器中。
MR审查
该步骤是进行MR审查,需要对MR进行审批后才合并,可以预先检查提交的MR是否存在问题。
合并到主分支
测试无误后,可以将更改合并到master主分支中。通过主分支来更新生产环境,这是Git流程中通用的惯例。
一切准备就绪后,单击"解决正在进行的工作"按钮。然后单击"合并"。这样修改WIP状态后,就可以进行MR合并操作,并结束问题。
新管道将在生产环境中运行playbook设置的各任务步骤,执行的所有测试。可以从管道屏幕查看进度和日志。完成此过程后,可以用同样的方法登录生产路由器并查看SNMP安全字符串是否已得到更新。
GitLab CI
整个过程都可以通过GitLab CI完成,而无需任何本地操作(除了登陆验证结果)。 GitLab CI管道是一系列栈式任务,可以执行测试和实现Ansible代码所需的一切。
GitLab CI中支持一个简单的YML配置文件,该文件位于存储库中,名为.gitlab-ci.yml,可通过Gitlab文件创建模版创建,并根据实际情况修改。本演示实例中的.gitlab-ci.yml文件包含三个阶段。
部署:这将在AWS中使用Ansible创建双路由器仿真网络。
演示:这将执行将更改SNMP字符串的playbook。
销毁:删除双路由器仿真网络。
GitLab CI以基本镜像开始,在该实例中使用的Docker镜像已经包含所有必需的Ansible二进制文件和所有网络依赖项。在每个阶段执行运行的命令以及必要时的依赖关系。
下面是查看GitLab CI的演示阶段代码,它执行Ansible playbook
总结
本文通过对Gitlab CI管道进行了深入了解,展示利用GitLab CI 基础架构即代码的实例,无需安装任何依赖项目就可以创建一个路由器实验环境。这只是GitLab CI如何用于执行基础架构作为代码的一个示例。更多实例请查看gitlab的官方示例文档。