Loading
close

通过YAML部署自定义构建镜像

time 更新时间:2022-03-14 17:38:24

背景描述

通过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
    

操作步骤

  1. 在云平台的顶部导航栏中,依次选择[产品与服务]-[DevOps]-[流水线],进入“流水线”页面。

  2. 在“流水线”页面中,单击页面上方的 创建流水线 ,弹出“创建流水线”对话框。

  3. 在“创建流水线”对话框中,选择“从零开始创建”后,单击 创建 ,进入“创建流水线”页面。

    ../images/gs_image_11.png

  4. 在“创建流水线”页面的画布中,根据本次业务需求配置“Source”、“Build”和“Deploy”阶段后,依次在各阶段完成以下任务配置。

    ../images/bp_image_03.png

    1. 在“Source”阶段添加项目代码源。

      在当前画布的“Source”卡片中,单击``添加代码源``,弹出“添加代码源”对话框。在该对话框中,配置代码源信息后,单击 保存 ,保存项目的代码源设置,并关闭对话框。

      ../images/bp_image_04.png

    2. 在“Build”阶段添加“构建并发布镜像”任务。

      在当前画布的“Build”卡片中,单击 添加任务 ,弹出“添加任务”对话框。在该对话框中,“任务类型”选择“构建并发布镜像”,“Dockerfile文件路径”输入“Dockerfile”,“镜像名称”输入“jack-2048”,“镜像版本”输入“alpha-${BUILD_ID}”,“工作空间”选择“devops”,并配置名称后,单击 保存 ,完成任务创建,并关闭对话框。

      ../images/bp_image_05.png

    3. 在“Deploy”阶段添加“通过YAML部署”任务。

      在当前画布的“Deploy”卡片中,单击 添加任务 ,弹出“添加任务”对话框。在该对话框中,“任务类型”选择“通过YAML部署”,“YAML路径”输入“2048_env.yaml”,并配置名称和应用程序的部署目标集群及命名空间后,单击 保存 ,完成任务创建,并关闭对话框。

      ../images/bp_image_06.png

  5. 在“创建流水线”页面的画布中,单击画布右上方的 保存 后,在弹出的“保存”对话框中,选择保存方式后,单击 保存 ,完成流水线创建,并关闭当前页面。

    ../images/bp_image_07.png

  6. 执行流水线。

    本实践方案中以手动触发方式为例,触发流水线执行。如需配置流水线自动触发,请参考 配置流水线执行策略(可选)

    1. 在“流水线”页面中,单击上述流水线所在行的 执行 ,弹出“执行流水线”提示框。
    2. 在“执行流水线”提示框中,单击 执行 ,执行该流水线,并关闭提示框。

结果验证

  1. 确认流水线成功执行。

    在“流水线”页面中,单击上述流水线名称 ,进入其详情页面。在详情页面的[运行记录]页签中,确认该流水线执行成功并记录此次“运行编号”。

    ../images/admin_bp_image_09.png

  2. 确认镜像成功构建。

    在云平台的顶部导航栏中,依次选择[产品与服务]-[容器服务]-[容器镜像服务],进入“镜像管理”页面。在该页面中,确认已生成名为“jack-2048”的镜像文件。然后,单击此镜像文件名称,进入其详情页面后,在[镜像版本]页签中,确认该镜像文件的生成版本为“alpha-<运行编号>”。

    ../images/bp_image_10.png

  3. 确认应用程序成功部署。

    在云平台的顶部导航栏中,依次选择[产品与服务]-[容器服务]-[Kubernetes容器服务],进入Kubernetes容器服务页面后,再在该页面的左侧导航栏中,先选择“业务视图”以及该应用程序的所在项目、部署集群和命名空间,再选择[工作负载]-[部署],进入部署页面。在该页面中,确认已生成名为“jack-2048”的部署且状态为“运行中”。

    ../images/bp_image_11.png

  4. 确认应用程序成功访问。

    1. 在云平台的顶部导航栏中,依次选择[产品与服务]-[容器服务]-[Kubernetes容器服务],进入“管理视图”的“集群管理”页面。在该页面中,查看并记录该应用程序所在Kubernetes集群的IP地址,即该Kubernetes集群所在行中,API Server列https://后的IP地址。

      ../images/bp_image_12.png

    2. 在本地计算机的 hosts 文件中,添加该应用程序所在Kubernetes集群IP地址与YAML文件定义域名的访问映射。

      ../images/bp_image_13.png

    3. 在本地计算机的浏览器地址栏中输入YAML文件定义域名,访问部署的应用程序。

      ../images/bp_image_48.png

此篇文章对你是否有帮助?
没帮助
locked-file

您暂无权限访问该产品