执行自动构建测试;在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
推荐阅读
-
声生不息|热狗的“清醒”,让我知道了这期《声生不息》为啥有那么多意难平
-
『毒App』CP3.XIII效果图,谍照披露疑似Jordan
-
-
永恒晨曦|美国总统演讲撰稿人斯蒂芬·米勒新馆病毒呈阳性反应
-
香港立法会议员支持“港独”主张,丧失立法会议员资格
-
-
在两性关系中,真的是主动进攻一方,一直占据着主动吗?
-
阿里巴巴@马云刚开公司的时候,答应前台小妹干满10年就给2亿,她结果怎样
-
「苹果」4月第一个惊喜:iPhone 9现已直接上架苹果中国官网?
-
周传雄|乐坛中的中流砥柱老歌手,虽然风光不在但歌曲却是KTV必点
-
主席|新华财经|英欧贸易谈判进展甚微 “无协议”应对加快推进
-
-
贾跃亭|FF 91限量版已全部售罄!贾跃亭曾称有信心颠覆法拉利、迈巴赫
-
夫妻感情三年之痛七年之痒,婚姻说的三年之痒七年之痛什么意思-
-
叁号轶事情况|看到等待的冯绍峰,一举动暴露真实感情,赵丽颖“下车照”被疯传
-
踏平南天意决众河山■创始人却越来越有钱,为啥拼多多和滴滴一直在亏损
-
-
-
球叮足球你才知道他们本是“同一个人”,当梅罗双骄灵魂互换
-
比尔·盖茨|加拿大最后一个完整北极冰架坍塌 全球变暖再发信号