背景描述
DevOps支持通过将预置好的工具集镜像上传至容器镜像服务云产品后,与流水线的运行脚本类任务相互配合使用,达到扩展DevOps功能的目的。本公司秉承“eat your own dog food & 使用自己的产品设计开发云产品”的设计理念,所以,在日常工作中本公司通过利用云基础设施的资源编排能力和DevOps扩展功能,在一个云平台中编排部署多个虚拟化云平台,用于为工程技术团队提供每天最新的研发或测试环境。本文将以此为例,介绍如何快速通过DevOps扩展功能部署虚拟化云平台。
本实践方案中,流水线各项规划信息规划如下:
流水线-DevOps扩展功能部署虚拟化云平台 | |
---|---|
Source阶段 | 项目代码使用 os-in-os.git 仓库下的 master 分支代码 |
Deploy阶段 | 通过“运行脚本”类型任务部署虚拟化云平台 * 镜像地址:名为 escloud-linux-source-busybox 的镜像文件,其作为自有镜像,上传在“容器镜像服务”云产品的工作空间中 * 镜像版本:6.0.1 |
前提条件
DevOps流水线需要预先配置承载其运行的Kubernetes集群,具体步骤请参考 配置集群。
DevOps流水线需要预先关联应用程序源代码的代码仓库,具体步骤请参考 配置代码仓库。
本DevOps流水线需要预先获取名为 escloud-linux-source-busybox 镜像文件存放在本地计算机中,用于在流水线执行过程中提供工具集镜像。
本DevOps流水线需要预先获取名为 stack-3nodes-3cloud-product-nodes.yaml 的YAML文件放置在代码仓库的根目录下,用于在流水线执行过程中进行资源编排部署。
本DevOps流水线需要预先制作用于检查虚拟化云平台部署状态的 check_stack_status.sh 脚本文件,并放置在代码仓库的根目录下。本实践方案中,根据规划信息check_stack_status.sh脚本文件的内容如下:
#!/usr/bin/env bash source ./openrc-sz if heat stack-list | grep CREATE_IN_PROGRESS | grep $1 ; then echo 'Heat stack is creating' while true; do if heat stack-list | grep CREATE_COMPLETE | grep $1; then echo "stack create complete" exit fi if heat stack-list | grep CREATE_FAILED | grep $1; then echo "stack create failed" exit 1 fi sleep 300 done else echo 'No stack is creating or stack create failed, so exit with 1' exit 1 fi
操作步骤
上传镜像文件。
本实践方案中以在云平台界面上传的方式为例,上传镜像文件。如需从Docker客户端和Containerd客户端中直接推送镜像,请参考“容器镜像服务”帮助中“上传镜像”的相关内容。
创建流水线。
在云平台的顶部导航栏中,依次选择[产品与服务]-[DevOps]-[流水线],进入“流水线”页面。
在“流水线”页面中,单击页面上方的
创建流水线
,弹出“创建流水线”对话框。在“创建流水线”对话框中,选择“从零开始创建”后,单击
创建
,进入“创建流水线”页面。在“创建流水线”页面的画布中,根据本次业务需求配置“Source”和“Deploy”阶段后,依次在各阶段完成以下任务配置。
在“Source”阶段添加项目代码源。
在当前画布的“Source”卡片中,单击``添加代码源``,弹出“添加代码源”对话框。在该对话框中,配置代码源信息后,单击
保存
,保存项目的代码源设置,并关闭对话框。在“Deploy”阶段添加“运行脚本”任务。
在当前画布的“Deploy”卡片中,单击
添加任务
,弹出“添加任务”对话框。在该对话框中,“任务类型”选择“运行脚本”,“镜像地址”选择[自有镜像]页签中的“escloud-linux-source-busybox”,“镜像版本”选择“6.0.1”,并配置名称和脚本后,单击保存
,完成任务创建,并关闭对话框。在上述“添加任务”对话框中,“脚本”输入内容如下。其中, 172.18.XX.XX 为用于部署虚拟化云平台的云平台外部访问IP地址:
echo "Set up hosts info start"echo " # SZ Cloud Start 172.18.XX.XX keystone.openstack.svc.cluster.local 172.18.XX.XX heat.openstack.svc.cluster.local 172.18.XX.XX neutron.openstack.svc.cluster.local 172.18.XX.XX nova.openstack.svc.cluster.local 172.18.XX.XX glance.openstack.svc.cluster.local 172.18.XX.XX cinder.openstack.svc.cluster.local # SZ Cloud End " >> /etc/hosts echo "Set up hosts info done" source ./openrc-sz #get the correct version,through pkg server VERSION=6.0.1 python update_version.py $VERSION STACK_NAME=devops-deploy-$RANDOM-os-in-os echo 'Try to create stack 3 nodes 3 cloud product nodes os in os env' heat stack-create $STACK_NAME -f ./stack-3nodes-3cloud-product-nodes.yaml # loop to check stack status bash ./check_stack_status.sh $STACK_NAME
在“创建流水线”页面的画布中,单击画布右上方的
保存
后,在弹出的“保存”对话框中,选择保存方式后,单击保存
,完成流水线创建,并关闭当前页面。
执行流水线。
本实践方案中以手动触发方式为例,触发流水线执行。如需配置流水线自动触发,请参考 配置流水线执行策略(可选)。
- 在“流水线”页面中,单击上述流水线所在行的
执行
,弹出“执行流水线”提示框。 - 在“执行流水线”提示框中,单击
执行
,执行该流水线,并关闭提示框。
- 在“流水线”页面中,单击上述流水线所在行的
结果验证
确认流水线成功执行。
在“流水线”页面中,单击上述流水线名称 ,进入其详情页面。在详情页面的[运行记录]页签中,确认该流水线执行成功。
确认云平台成功编排部署。
确认云平台成功访问。