GitOps——通过CI/CD自动构建虚拟机模板 git 获取
大家好,GitOps——通过CI/CD自动构建虚拟机模板相信很多的网友都不是很明白,包括也是一样,不过没有关系,接下来就来为大家分享关于GitOps——通过CI/CD自动构建虚拟机模板和的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!
通过之前的文章大家已经熟悉了模板构建。为了提高移动设备上的阅读体验,本手册将不再介绍详细的模板配置。您可以访问https://github.com/6547709/gitops-packer直接查看代码和配置。
基于GitOps自动构建vSphere模板的特点:
使用Gitlab存储模板配置文件;基于Gitlab CI/CD实现自动化模板构建;根据Git提交记录进行语义版本管理(feet、fix),递增版本号并存储在模板的Notes中;定期执行CI/CD任务实现模板变异;使用vCenter内容库存储模板,并使用-latest作为后缀;每次构建自动更新vCenter内容库模板,保持ID不变,确保vRA云平台或其他工具调用最新模板;所有密码和配置,通过.gitlab-ci.yml定义;提供Windows2016/2019、Ubuntu1804/1910/2004、CentOS7/8等模板;所有模板均进行基础优化(请参考对应模板的自动响应文件); Windows模板使用ISO镜像集成了最新补丁,缩短部署时间;它已在vSphere 7.0 和Packer 1.6.4 环境中进行了测试。
相关工具:
Packer:是一款开源自动化虚拟机模板构建工具,支持私有云和公有云,几乎覆盖所有环境。
vSphere:VMware企业级虚拟化软件,被企业客户广泛使用,具有稳定性高、性能好、安全性高、易用等特点。
govc:是一个基于govvmomi实现vSphere远程管理的cli工具。
https://github.com/vmware/govmomi
Packer-provisioner-windows-update:Packer 插件的Windows 更新。
https://github.com/rgl/packer-provisioner-windows-update
Gitlab CI/CD:它是一个与代码集成工作的CI/CD 工具。
https://docs.gitlab.com/ee/ci/
Semantic-delivery-gitlab:使用镜像来实现语义版本管理。 Harbor:是一个私有的Docker镜像仓库,用于存储用于执行Packer、Govc和Genisoimage的Docker镜像。
https://hub.docker.com/r/hutson/semantic-delivery-gitlab
相关代码:包含Gitlab CI/CD所需的所有文件。
https://github.com/6547709/gitops-packer
各个模板的配置请参考历史文章。 CI/CD可以根据情况选择不同的工具,原理是一样的。
环境需求
Gitlab服务器和Gitlab-Runner服务器,其中Runner以Docker模式运行;可以连接到vCenter Server 的Windows/Linux/MacOS 计算机; Packer 程序、Govc 程序、Packer 程序的Windows 更新;每个操作系统安装映像; VMware Tools、Windows pvscsi 驱动程序; vCenter 内容库;语义传递-gitlab 图像;
步骤概要
构建Harbor镜像仓库,用于存储本地镜像;搭建Gitlab和Gitlab CI/CD相关环境,使用Docker Runner模式;在Gitlab中创建项目,上传相关代码,并修改相关配置;执行自动构建测试;在Gitlab CI/CD中添加计划任务;完全的。
构建用于执行Packer命令的DockerIamge
需要先通过相关工具中的地址下载packer、govc、windows update for packer这三个执行文件,并存放在与Dockerfile同一目录下。 Dockerfile如下:
FROM centos:8LABEL 维护者='Alex Li'ENV PACKER_VERSION=1.6.4ENV GOVC_VERSION=v0.23.0ENV GOVC_INSECURE=trueENV TIME_ZONE Asia/ShanghaiRUN ln -sf /usr/share/zoneinfo/${TIME_ZONE} /etc/localtimeADD ./govc /usr /bin/ADD ./packer /usr/bin/ADD ./packer-provisioner-windows-update /usr/binRUN chmod a+x /usr/bin/govc /usr/bin/packer /usr/bin/packer-provisioner -windows-update yum install -y genisoimageWORKDIR /tmpCMD ['/bin/bash'] 使用Docker Build 构建Docker 镜像并将其上传到容器存储库(私有或公共):
docker build -tharbor.corp.local/library/gitops-packer:v1.0 .docker推送登录harbor.corp.localdocker登录-u adminharbor.corp.localdocker推送harbor.corp.local/library/gitops-packer:v1.0 :010 -1010 docker pull hutson/semantic-delivery-gitlab:9.1.0docker tag hutson/semantic-delivery-gitlab:9.1.0harbor.corp.local/library/semantic-delivery-gitlab:9.1.0docker推送harbor.corp.local/library/semantic -delivery-gitlab:9.1.0
上传semantic-devlivery-gitlab镜像到Harbor
使用个人账户登录Gitlab;转到用户设置- 访问令牌;填写令牌名称、到期日期并选择权限- 创建个人访问令牌;保存令牌以供以后使用;
在Gitlab中创建Access Token
这里不做详细说明,这里是最终仓库内容的屏幕截图:
创建项目,并提交所有代码到仓库中
该文件是Gitlab CI/CD的主要配置文件。该文件中定义了常用的配置参数。无需修改加壳器和操作系统自动响应文件。
标准、标准化的提交信息不仅可以保证版本历史的可读性,还可以了解每次变更的内容和影响范围,并在Release页面自动生成文档。因此,强烈建议使用标准的提交消息格式和内容。
fix: 修复代码问题时使用此标志。示例:fix: 修复Windows 模板ISO 文件错误。版本号变化:1.0.0-1.0.1
feat: 添加新功能或模板时使用此标签。示例:feat: 添加Photon 模板。版本号变化:1.0.0-1.1.0
[skip ci] 当您不想自动执行CI/CD 时,请将此标签添加到消息中。示例:fix: 更新ReadME。[跳过ci]。版本号变化:无变化
修改.gitlab-ci.yml配置文件
提交更改后,Giab CI/CD 将根据.gitlab-ci.yml 中的配置自动执行管道。整个过程分为2组,每组5个步骤:
进行语义版本管理,为代码添加tag标签;基于标签进行加壳配置文件验证,CentOS8自动响应ISO构建、镜像构建,并列出内容库内容; pipeline执行流程如下图所示,总共需要25分钟,完成8个模板的自动化构建:
登录vCenter内容库查看模板更新:
验证执行过程和结果
在Gitlab CI/CD计划中,添加每周/每月的定时执行计划,添加完成后如下图所示。
添加定时任务
模板构建过程中,Windows构建耗时最长,部分情况长达2小时,可能会触发Gitlab CI/CD和Packer的超时机制,导致任务失败。为了提高模板构建效率,降低错误率,建议自行给模板打上最新补丁。以下是粗略的制作流程,供参考。
下载DISM++工具(汉化,图形化操作);将系统安装光盘解压到目录(d:\win2016-iso),解压解压目录中的\sources\install.wim文件,复制到另一个目录(d:\win2016-iso);打开DISM++工具,加载install.wim文件,安装路径需要提前创建(d:\win2016-iso\mnt);选择已加载的install.wim系统,打开会话;使用系统安装光盘安装系统,并进行系统更新。更新完成后,在已安装的系统更新(添加/删除程序)中找到已安装的补丁版本号;登录https://www.catalog.update.microsoft.com/网站,根据版本下载msu格式的补丁。文件,保存到目录(d:\win2016-iso\msu);在DISM++工具页面,控制面板-更新管理-添加(d:\win2016-iso\msu),并执行安装,等待安装完成(需要较长时间);补丁安装完成后,DISM++-文件-另存为镜像(d:\win2016-iso\new.wim)存储新镜像;使用new.wim替换系统安装盘解压目录下的install.wim(名称必须是install.wim); DISM++-常用工具-工具箱-ISO Generator,选择替换install.wim文件的系统安装盘和压缩目录作为源,选择d:\win2016-iso\目录作为目标,指定新的光盘名称并添加一个标签; DISM++ -文件-卸载镜像;制作包含指定补丁的系统安装光盘;将新的ISO 上传到共享存储,并修改.gitlab-ci.yml 文件以使用新的ISO 镜像路径。提示1:虽然DISM++提供了系统更新功能,但对于Windows Server系统似乎无法正常使用,所以建议手动添加补丁。
提示2:您还可以通过DISM工具将pvscsi驱动程序添加到安装光盘中,因此无需额外添加pvscsi驱动程序。