执行自动构建测试;在Gitlab CI/CD中添加定时任务;完成 。 构建用于执行Packer命令的DockerIamge需要先通过相关工具中的地址下载packer、govc和windows update for packer三个执行文件 , 存储到与Dockerfile相同的目录中 , Dockerfile如下:
FROM centos:8LABEL maintainer="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--tt-darkmode-color: #666666;">提示1:本手册为了易读 , 所有敏感信息也在此配置文件中声明 , 强烈建议使用Gitlab项目变量进行定义 , 避免敏感信息泄漏 。 提示2:以下代码示例已经过删减 , 完成代码请从Github获取 。
# 环境变量定义 , 生产环境不建议在此配置敏感定义(例如:密码)variables:DOCKER_DRIVER: "overlay2"GITLAB_TOKEN: "xxxxxxxxxxxxx"# 定义用于执行packer、govc和genisoimage的Docker镜像 , 需要提前构建PACKER_DOCKER_IMAGE: "harbor.corp.local/library/packer-gitops:v1.0"# 定义用于创建模板的vCenter相关信息 , 密码部分推荐在Gitlab的项目变量定义 , 以提高安全性 。VC_SERVER: "vcenter.corp.local"VC_USERNAME: "Administrator@vsphere.local"VC_PASSWORD: "VMware1!"VC_DATACENTER: "Labs-DC02"VC_CLUSTER: "DC02-Cluster"VC_CONTENT_LIBRARY: "DC02-VM-Templates"VC_FOLDER: "Templates"VC_DATASTORE: "SSD_DATASTORE"# 定义VM相关配置VM_NETWORK: "vlan100"VM_CPU: 2VM_MEM: 4096VM_DISK: 81920VM_VIDEO_RAM: 16384VM_HW_VERSION: 17# 定义安装光盘的存储路径 , Winodws系统需要根据安装光盘的不同调整自动应答文件 。 # -----此处省略部分代码 , 从github中获取完整代码------OS_CENTOS8_ISO: "[SSD_DATASTORE 0-ISO/CentOS-8.2.2004-x86_64-dvd1.iso"OS_WINDOWS2016_ISO: "[SSD_DATASTORE] 0-ISO/cn_windows_server_2016_vl_x64_dvd.iso"# 定义CentOS8自动应答光盘的存储路径 , 每次编译会自动覆盖之前版本 。OS_CENTOS8_KS_ISO: "[SSD_DATASTORE] 0-ISO/centos8-ks.iso"OS_CENTOS8_GUI_KS_ISO: "[SSD_DATASTORE] 0-ISO/centos8-gui-ks.iso"# 定义VMware Tools安装路径OS_WINDOWS_VMTOOLS: "[SSD_DATASTORE] 0-ISO/VMware-tools-windows-11.1.5.iso"# 定义Windows系统使用pvscsi驱动的路径 , 此文件只能同时被一个VM挂载 , 需要为每个Windows系统配置一个文件 。OS_WIN2016_DRIVER: "[SSD_DATASTORE] 0-ISO/win2016-pvscsi-Windows8.flp"# 定义GOVC环境变量 , 用于上传CentOS8自动应答的ISO(ks.cfg)GOVC_URL: ${VC_SERVER}GOVC_USERNAME: ${VC_USERNAME}GOVC_PASSWORD: ${VC_PASSWORD}# 此配置用于定义Linux root和ops用户、Windows Administrator和ops用户的密码,密码推荐在Gitlab的项目变量定义 , 以提高安全性 。LINUX_SSH_PASSWORD: "VMware1!"WINDOWS_PASSWORD: "VMware1!"# 此变量用于定义虚拟机名称 , 最终会以-latest作为后缀存储到vCenter内容库中 。CENTOS8_VM_NAME: "CentOS8"WIN2016_VM_NAME: "Win2016"# 定义Windows安装KEY , 根据不同的安装版本配置 。WIN2016_KEY: "XXXXX-XXXXX-XXXXX-XXXXX-XXXX-XXXX"WIN2019_KEY: "XXXXX-XXXXX-XXXXX-XXXXX-XXXX-XXXX"#定义CI/CD的阶段 , devliver阶段用于生成版本号 , validate阶段用于验证packer配置文件是否正确 , build-iso阶段用于CentOS8的ISO制作 , 并自动上传到共享存储中 ,, build阶段用于模版构建 , list-library阶段用于列出内容库模版 。 stages:- deliver- validate- build-iso- build- list-library#采用语义版本管理 , 基于commit消息增加版本号和生成Release文档 , 此阶段不会进行打包和部署 , 仅仅是添加版本tag 。 deliver:image:name: harbor.corp.local/library/sematic-delivery-gitlab:9.1.0entrypoint: [""]stage: deliveronly:- masterscript:- semantic-delivery-gitlab --token ${GITLAB_TOKEN}#此阶段用于验证packer配置文件是否正确 。 packer-validate:image:name: ${PACKER_DOCKER_IMAGE}stage: validatescript:- packer validate ./CentOS8/centos-vsphere.json- packer validate ./Win2016/win2016-vsphere.jsononly:- tagsdependencies:- deliver#此阶段用于构建CentOS8所需的ISO文件 , 并上传到vSphere存储中(自动覆盖之前版本) 。 #for CentOS8 。 CentOS8-ks-iso-build:image:name: ${PACKER_DOCKER_IMAGE}stage: build-isoscript:- cd CentOS8- sed -i 's/__PASSWORD__/'"${LINUX_SSH_PASSWORD}"'/g' ./ks.cfg- genisoimage -o centos8-ks.iso -V "OEMDRV" ./ks.cfg- govc datastore.upload -ds ${VC_DATASTORE} centos8-ks.iso 0-ISO/centos8-ks.isoonly:changes:- CentOS8/ks.cfg# -----此处省略部分代码 , 从github中获取完整代码------ #此阶段用于生成虚拟机模板 , 模板名基于job中变量定义 , 最终模板使用-latest最为后缀 。 #for CentOS8 。 packer-build-CentOS8:image:name: ${PACKER_DOCKER_IMAGE}stage: buildvariables:VM_NAME: ${CENTOS8_VM_NAME}script:- cd CentOS8- packer build --force centos-vsphere.jsononly:- tagsdependencies:- packer-validate# -----此处省略部分代码 , 从github中获取完整代码------ #for Windows Server 2016 。 packer-build-Win2016:image:name: ${PACKER_DOCKER_IMAGE}stage: buildvariables:VM_NAME: ${WIN2016_VM_NAME}OS_WINDOWS_DRIVER: ${OS_WIN2016_DRIVER}script:- cd Win2016- sed -i 's/__PASSWORD__/'"${WINDOWS_PASSWORD}"'/g' ./Autounattend.xml- sed -i 's/__LICENSEKEY__/'"${WIN2016_KEY}"'/g' ./Autounattend.xml- packer build --force win2016-vsphere.jsontimeout: 120monly:- tagsdependencies:- packer-validate# -----此处省略部分代码 , 从github中获取完整代码------ #list vcenter content library 。 list-content-library:image:name: ${PACKER_DOCKER_IMAGE}stage: list-libraryscript:- govc library.info -json ${VC_CONTENT_LIBRARY}/*only:- tags
推荐阅读
-
姜文|才华横溢的姜文,书法作品气韵灵动,给人赏心悦目的感觉
-
历史睡了|头发全白完全认不出!和老婆同框像是两代人,45岁周炜近况罕曝光
-
证券日报|北京市委常委、副市长殷勇:北京发展基础设施REITs有四大优势
-
央视新闻|央视评踹门查补课:执法勿简单粗暴 粗暴执法也应被处理
-
8月份社会消费品零售总额同比增0.5%,为今年以来首次正增长
-
韩国潮牌衣服logo及名字 韩国服装品牌logo大全 名字
-
-
-
[可爱的小冉]赠书福利丨硅谷为什么能批量化诞生伟大企业?
-
-
时尚k范儿|扎低马尾温柔恬静,甜美笑容太迷人,李兰迪穿蓝色连衣裙现身
-
-
-
尿路感染,纸尿裤,纸尿裤,表达能力,尿路感染,中西文化,拉拉裤,@纸尿裤 宝宝最多能穿到几岁?
-
央视网|抗洪官兵洪水中组成人墙助群众撤离 排长被洪水冲走后获救
-
陈奕迅|陈奕迅老婆败家到底,5度开店全倒闭,获甘比支持再开新店?
-
-
徐达是被朱元璋杀死的吗?朱元璋送给徐达什么东西害死了他_2
-
-
情绪|一场工作调动,竟让男子恶心呕吐剧烈腹痛!只因……