GitOps—通过CI/CD自动化构建虚拟机模版( 三 )

标准git commit消息格式标准且规范的commit消息不仅可以保证版本历史的可读性 , 还可以了解每次变更的内容和影响范围 , 并会自动在Release页面生成文档 , 所以 , 强烈建议采用标准的commit消息格式和内容 。
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.[skip ci] 。 版本号变化:无变化
验证执行过程和结果当提交变更后 , Gilab CI/CD会基于.gitlab-ci.yml中的配置自动执行流水线 , 整个过程分为2组5个步骤:

  1. 执行语义版本管理 , 为代码增加tag标记;
  2. 基于tag执行packer配置文件验证、CentOS8自动应答ISO构建、镜像构建和列出内容库内容;
流水线执行过程如下图所示 , 共花费25分钟时间 , 完成8个模版的自动化构建:
GitOps—通过CI/CD自动化构建虚拟机模版文章插图
GitOps—通过CI/CD自动化构建虚拟机模版文章插图
登录vCenter内容库查看模版更新:
GitOps—通过CI/CD自动化构建虚拟机模版文章插图
添加定时任务在Gitlab CI/CD的计划中 , 添加一个每周/月的定时执行计划 , 添加完成后如下图所示 。
GitOps—通过CI/CD自动化构建虚拟机模版文章插图
[可选]Windows镜像集成最新补丁在模版构建过程中 , Windows的构建时间最长 , 某些情况下长达2个小时 , 可能会触发Gitlab CI/CD的超时和Packer的超时机制 , 导致任务失败 。 为提高模版构建效率和降低出错率 , 建议自行封装带有最新补丁的模版 , 下面是大致的制作过程 , 共参考 。
  1. 下载DISM++工具(国人制作 , 图形化操作);
  2. 解压缩系统安装光盘到目录中(d:\win2016-iso) , 并提取解压目录下\sources\install.wim文件 , 拷贝到另一目录中(d:\win2016-iso);
  3. 打开DISM++工具 , 载入install.wim文件 , 挂载路径需提前创建(d:\win2016-iso\mnt);
  4. 选中载入的install.wim系统 , 打开会话;
  5. 使用系统安装光盘安装系统 , 并执行系统更新 , 更新完成后在已安装系统更新中(添加/删除程序)找到安装的补丁版本号;
  6. 登录到网站 , 基于版本好下载补丁的msu格式文件 , 保存到目录中(d:\win2016-iso\msu);
  7. 在DISM++工具页面 , 控制面板->更新管理->添加(d:\win2016-iso\msu) , 并执行安装 , 等待安装完成(时间较长);
  8. 补丁安装完成后 , DISM++->文件->另存为映像(d:\win2016-iso\new.wim)存储新的映像;
  9. 使用new.wim替换系统安装盘解压缩目录的install.wim(名称必须是install.wim);
  10. DISM++->常用工具->工具箱->ISO生成器 , 源选择替换install.wim文件的系统安装盘加压缩目录 , 目标选择d:\win2016-iso\目录 , 并指定新光盘名称和添加标签;
  11. DISM++->文件->卸载映像;
  12. 包含指定补丁的系统安装光盘制作完成;
  13. 上传新的ISO到共享存储中 , 并修改.gitlab-ci.yml文件使用新的ISO镜像路径 。
提示1:DISM++虽然提供系统更新的功能 , 但是针对Windows Server系统似乎不正常 , 所以建议使用手工添加补丁的方式 。
提示2:通过DISM工具还可以将pvscsi的驱动添加到安装光盘中 , 这样就无需额外添加pvscsi驱动 。