本次最佳实践将为您介绍敏捷PaaS容器服务CICD在实际环境中的应用。

前提条件

容器服务基于敏捷PaaS V3.8.0。

背景信息

CICD就是持续集成(Continuous Integration)和持续交付(Continuous Delivery)。容器云平台的CICD架构如下图所示:CICD架构

环境管理

平台支持自定义构建环境管理,包括创建、修改、删除环境等操作。在环境列表页面展示了环境的名称、集群、镜像、属性、创建时间以及操作,如图所示:

环境列表

依赖管理

用户可以上传自定义依赖文件到对应的依赖库,依赖上传支持zip,tar格式的压缩文件及其他非压缩文件的任何格式。后续在流水线定义过程中可挂载依赖库进行编译和打包,提升整体执行效率。

平台支持创建、上传、下载、查看、删除等功能,在依赖管理页面展示了依赖的名称、存储服务、集群、类型、存储地址、属性以及操作,如图所示:

平台管理

流水线

流水线分为CI、CD两大类型(也可以合成一种类型)。平台支持创建流水线、查看流水线详情、修改流水线、删除流水线、执行/停止流水线、复制流水线及数据权限等操作。容器云流水线页面如图所示:

容器云流水线界面创建流水线
  1. 登录阿里云容器服务
  2. 在左侧导航栏选择CICD > 流水线,进入流水线页面。
  3. 单击创建流水线,在创建流水线对话框中设置流水线名称集群等参数。然后单击确定,进入流水线详情页面。
    创建流水线
    参数 描述
    流水线名称 自定义流水线名称。
    集群 选择集群,默认为阿里集群。
    流水线组 选择流水线组。
    备注 根据j实际需求输入备注。
    构建通知 启用构建通知。构建流水线时将收到邮件通知。
    邮箱地址 输入接收通知的邮箱地址,支持输入多个邮箱地址。
    通知场景 选择通知场景,支持流程执行成功流程执行失败
  4. 创建流水线步骤。
    1. 流水线详情页面单击创建流水线步骤,设置代码检出/编译参数,单击保存
      步骤检出
      参数 描述
      步骤类型 选择步骤类型为步骤检出/编译
      步骤名称 自定义步骤名称
      代码仓库类型 根据实际业务清空选择代码仓库类型。
      仓库地址 输入仓库地址。
      分支/标签 输入分支或标签。
      账户 输入账户和密码。
      编译环境 选择编译环境。
      说明 单击自定义环境变量,您可以自定义编译环境。
      使用自定义依赖 启用自定义依赖。
      说明 使用自定义依赖需要先在依赖管理页面新建一个依赖,新建依赖的详细描述请参见依赖管理
      脚本命令 输入脚本命令。
    2. 流水线详情页面单击创建流水线步骤,设置镜像构建参数,单击保存
      镜像构建
      参数 描述
      步骤类型 选择步骤类型镜像构建。
      步骤名称 自定义步骤名称。
      Dockerfile 选择Dockerfile,支持使用代码仓库dockerfile或使用平台dockerfile。

      使用平台dockerfil需要先在Dockerfile页面新建Dockerfile。

      镜像仓库 选择镜像仓库。

      镜像仓库可以是当前租户下的私有镜像库以及平台的公共镜像库,设置镜像仓库后,会在对应的镜像仓库下生成镜像。

      镜像名称 自定义镜像名称。
      镜像版本 选择镜像版本,支持时间戳自定义规则自定义tag
    3. 流水线详情页面单击创建流水线步骤,选择步骤类型应用部署,设置步骤名称镜像来源流水线镜像发布方式。单击保存

      流水线选择本次流水线。

      发布方式栏单击设置,弹出发布配置栏,流水线支持全新发布、灰度发布、蓝绿发布,可根据业务需求选择不同的发布方式,根据业务需求,填写配置文件,如不填写,默认保留服务原版本的配置文件设置。

      应用部署发布配置
  5. 流水线详情页面单击执行
流水线持续集成和人工执行

平台支持流水线持续集成和人工执行,流水线的持续集成支持不同的自动触发方式,可根据自己的业务场景选择不同自动触发方式,也可以选择关闭持续集成选择手动触发方式。流水线目前支持以下自动触发方式:

  • 定时触发:分为按周、按月跟自定义。根据设定的时间,定时触发流水线。触发规则
  • Poll Scm:分为按周、按月跟自定义。根据设定的时间定时检查代码是否更新,如果代码更新,则触发执行流水线,如果代码无更新,则不触发。
  • Webhook:在gitlab持续集成配置中设置web hook地址,在gitlab上提交代码,触发流水线;在svn上更换文件配置后上传文件,触发流水线。webhook触发
  • 流水线触发:所选流水线执行成功之后触发流水线。
流水线执行记录及日志

您可以查看流水线的详细信息。

  1. 在左侧导航栏选择CICD > 流水线,进入流水线页面。
  2. 单击流水线名称,跳转至流水线详情页面。
    执行详情
    • 流水线步骤区域:展示当前流水线包含的步骤,单击步骤名称,可以查看相应步骤详情。
    • 执行记录:选择流水线步骤,单击执行记录页签,查看该步骤的流水线执行记录。
    • 日志:选择流水线步骤,单击执行记录页签,单击日志,查看该步骤的流水线日志。执行记录

多环境解决方案

结构图

一整套的云平台PaaS层, CICD流水线做到完美适配并最小程度对现有基础设施的侵入。

从上图看出,从项目经理发起项目开始,Jira等项目内容管理工具就会接入,PM在devops上初始化项目分配任务,开发人员领取任务,开发代码到代码库。

此后,一旦有代码改动提交,jenkins就会自动触发拉取最新的代码做代码扫描,得出质量报告,推送到下一个CI单元,去构建镜像。

构建好的镜像会自动部署到测试环境的容器服务上,这时候测试人员就可以先去测试环境查看应用效果,应用正常就可以将镜像同步到生产环境的镜像仓库,再去生成环境部署即可。

容器云平台支持统一配置管理,可实现一份镜像多环境部署,环境可因用户自定义设置如Dev,test,QA,production等,支持自定义脚本配置执行。用户可自定义在应用执行部署之前或部署之后执行自定义脚本,并支持容器的方式执行自定义脚本,支持用户自己的基础镜像执行定制化脚本,支持手动触发和代码提交后的自动触发,支持灰度,蓝绿发布,支持发布回滚,支持一键编译,打包,发布,部署,升级等。大大的提高了开发,测试,发布的效率。

支持对接Git,SVN等代码仓库,通过DevOps部署的应用服务镜像支持按角色进行权限隔离。容器云平台已对接打通DevOps权限体系,同一租户下相同角色的用户应用该镜像相应的读写权限,不同租户下的用户权限隔离,支持主流开发语言编译环境,如JAVA,Node.js,Golang,Ruby,Python等,支持编译命令自定义配置,用户可自定义命令配置项,支持镜像构建配置,并可自定义配置Dockerfile或YAML文件,通过分布式文件系统和资源缓存的方式挂载编译依赖,提高编译效率。

容器云平台通过调度系统决定了当前集群的主机资源能否被合理利用以及当前应用是否被合理的分配了资源,通过合理的调度实现资源的高效利用。容器云平台的调度系统支持应用亲和,反亲和调度,节点亲和反亲和调度,支持排他性调度,支持DaemonSet方式调度,支持跨数据中心的调度方案从而实现资源高效分配和应用智能调度。