背景描述
通过DevOps云产品,可以创建从源代码获取到项目构建、测试和部署上线的全流程自动交付流水线,大大缩短交付周期,提升交付效率。本文将以2048游戏应用程序为例,介绍如何快速通过DevOps流水线在构建并发布应用程序镜像后,通过YAML部署该应用程序。
本实践方案中,流水线各项规划信息规划如下:
流水线-YAML部署2048游戏镜像 | |
---|---|
Source阶段 | 项目代码使用 jack-2048.git 仓库下的 master 分支代码 |
Build阶段 | 通过“构建并发布镜像”类型任务构建2048游戏镜像 * Dockerfile文件路径:名为 Dockerfile 的文件,其直接放置在代码仓库根目录下,方便任务获取 * 镜像名称:jack-2048 * 镜像版本:alpha-${BUILD_ID} * 工作空间:devops |
Deploy阶段 | 通过“通过YAML部署”类型任务部署2048游戏 * YAML文件:名为2048_env.yaml的文件。其直接放置在代码仓库根目录下,方便任务获取 * 访问域名:2048.example.cn |
前提条件
DevOps流水线需要预先配置承载其运行的Kubernetes集群,具体步骤请参考 配置集群。
DevOps流水线需要预先关联应用程序源代码的代码仓库,具体步骤请参考 配置代码仓库。
本DevOps流水线需要预先制作用于构建镜像的Dockerfile文本文件,并放置在代码仓库的根目录下。本实践方案中,根据规划信息Dockerfile文件的内容如下:
FROM hub.ecns.io/devops/jack-2048:latest COPY 2048 /var/lib/nginx/html/ COPY nginx.conf /etc/nginx/nginx.log.conf COPY nginx.8880.conf /etc/nginx/nginx.8880.conf EXPOSE 80 CMD ["nginx", "-c", "/etc/nginx/nginx.8880.conf"]
本DevOps流水线需要预先制作用于YAML部署的 2048_env.yaml 文件,并放置在代码仓库的根目录下。本实践方案中,根据规划信息2048_env.yaml文件的内容如下。其中,image: hub.ecns.io/devops/jack-2048:alpha-${BUILD_ID} 参数配置中,devops 为流水线“构建”阶段所选择的工作空间,jack-2048 为流水线“构建”阶段所构建镜像的名称,alpha-${BUILD_ID} 为流水线“构建”阶段所构建镜像的版本。host: 2048.example.cn 参数配置中,2048.example.cn 为流水线“部署”阶段所规划的访问域名。
--- apiVersion: apps/v1 kind: Deployment metadata: name: jack-2048 spec: selector: matchLabels: application: jack-2048 strategy: rollingUpdate: maxSurge: 3 maxUnavailable: 70% type: RollingUpdate template: metadata: labels: application: jack-2048 spec: containers: - image: hub.ecns.io/devops/jack-2048:alpha-${BUILD_ID} imagePullPolicy: IfNotPresent name: jack-2048 ports: - containerPort: 80 protocol: TCP --- apiVersion: v1 kind: Service metadata: name: svc-2048 labels: application: jack-2048 spec: ports: - name: port-2048 port: 80 protocol: TCP targetPort: 80 selector: application: jack-2048 type: ClusterIP --- apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: ing-2048 spec: rules: - host: 2048.example.cn http: paths: - backend: serviceName: svc-2048 servicePort: 80
操作步骤
在云平台的顶部导航栏中,依次选择[产品与服务]-[DevOps]-[流水线],进入“流水线”页面。
在“流水线”页面中,单击页面上方的
创建流水线
,弹出“创建流水线”对话框。在“创建流水线”对话框中,选择“从零开始创建”后,单击
创建
,进入“创建流水线”页面。在“创建流水线”页面的画布中,根据本次业务需求配置“Source”、“Build”和“Deploy”阶段后,依次在各阶段完成以下任务配置。
在“Source”阶段添加项目代码源。
在当前画布的“Source”卡片中,单击``添加代码源``,弹出“添加代码源”对话框。在该对话框中,配置代码源信息后,单击
保存
,保存项目的代码源设置,并关闭对话框。在“Build”阶段添加“构建并发布镜像”任务。
在当前画布的“Build”卡片中,单击
添加任务
,弹出“添加任务”对话框。在该对话框中,“任务类型”选择“构建并发布镜像”,“Dockerfile文件路径”输入“Dockerfile”,“镜像名称”输入“jack-2048”,“镜像版本”输入“alpha-${BUILD_ID}”,“工作空间”选择“devops”,并配置名称后,单击保存
,完成任务创建,并关闭对话框。在“Deploy”阶段添加“通过YAML部署”任务。
在当前画布的“Deploy”卡片中,单击
添加任务
,弹出“添加任务”对话框。在该对话框中,“任务类型”选择“通过YAML部署”,“YAML路径”输入“2048_env.yaml”,并配置名称和应用程序的部署目标集群及命名空间后,单击保存
,完成任务创建,并关闭对话框。
在“创建流水线”页面的画布中,单击画布右上方的
保存
后,在弹出的“保存”对话框中,选择保存方式后,单击保存
,完成流水线创建,并关闭当前页面。执行流水线。
本实践方案中以手动触发方式为例,触发流水线执行。如需配置流水线自动触发,请参考 配置流水线执行策略(可选)。
- 在“流水线”页面中,单击上述流水线所在行的
执行
,弹出“执行流水线”提示框。 - 在“执行流水线”提示框中,单击
执行
,执行该流水线,并关闭提示框。
- 在“流水线”页面中,单击上述流水线所在行的
结果验证
确认流水线成功执行。
在“流水线”页面中,单击上述流水线名称 ,进入其详情页面。在详情页面的[运行记录]页签中,确认该流水线执行成功并记录此次“运行编号”。
确认镜像成功构建。
在云平台的顶部导航栏中,依次选择[产品与服务]-[容器服务]-[容器镜像服务],进入“镜像管理”页面。在该页面中,确认已生成名为“jack-2048”的镜像文件。然后,单击此镜像文件名称,进入其详情页面后,在[镜像版本]页签中,确认该镜像文件的生成版本为“alpha-<运行编号>”。
确认应用程序成功部署。
在云平台的顶部导航栏中,依次选择[产品与服务]-[容器服务]-[Kubernetes容器服务],进入Kubernetes容器服务页面后,再在该页面的左侧导航栏中,先选择“业务视图”以及该应用程序的所在项目、部署集群和命名空间,再选择[工作负载]-[部署],进入部署页面。在该页面中,确认已生成名为“jack-2048”的部署且状态为“运行中”。
确认应用程序成功访问。