本章主要介绍如何在 DevOps 平台中实现通过流水线的方式部署服务应用到云资源中,以及如何对这些应用进行基本的运维。

  1. 资源的管理
  2. 服务部署及服务介质相关配置说明
  3. 发布定义配置及发布流水线编排设计说明
  4. 应用运维说明

# 资源管理

# 添加资源

# 云主机

进入项目 → 部署 → 资源页面,点击新建按钮,资源类型选择云主机,并填写云主机相关信息

host-server-resource-configuration-1

表单属性 属性值
资源名称 用户自定义
资源类型 云主机
资源地址 云主机 IP 地址
ssh 端口 云主机 SSH 端口,默认为 22
用户 云主机用户名
密码 云主机密码
证书路径 云主机的私钥路径(私钥文件需存放在 Jenkins 节点所在服务器上,且文件权限需为 0600
若证书内容非空,则跳过此配置
证书内容 云主机的私钥内容(优先级比证书路径高)
环境变量 Ansible 环境变量

DevOps 支持通过 密钥 或者 用户名-密码 的配置方式来实现远程管理云主机资源:

  • 用户名-密码方式

    只需填写用户名以及密码即可

  • 密钥方式

    1. 生成密钥

      # 生成公钥和私钥
      ssh-keygen -t rsa -b 4096
      

      命令执行完默认会在 ~/.ssh/ 目录下生成 id_rsa (私钥)和 id_rsa.pub(公钥)文件

      generate-key

      注意

      若需将私钥放置至其他地方,需将私钥文件权限设置为 0600,确保只有私钥文件所有者有读写权限。

    2. 上传公钥至远程服务器

      执行以下命令,自动将公钥内容拷贝到远程服务器的 ~/.ssh/authorized_keys 文件中

      # -i 参数用来指定公钥文件,user 是所要登录的账户名,host 是服务器地址
      ssh-copy-id -i ~/.ssh/id_rsa.pub user@host
      

      copy-key-to-remote-server

      最后通过执行 ssh user@host (密钥方式)命令能正常访问远程服务器,说明配置成功。

    3. 资源证书配置

      按需配置证书路径或证书内容即可

      host-server-resource-configuration-2

      注意

      若只配置证书路径,必须将私钥文件存放在 Jenkins 节点所在服务器上,且其文件权限需为 0600

# 容器云

以 Kubernetes 为例,将 Kubernetes 容器云添加进 DevOps 资源中

  • 准备 Kubernetes 证书

    进入Linux环境,新建一个目录,并将 kubeconfig 文件,以及写有以下内容的 shell 脚本放置于同一目录中

    clientcert=$(grep client-cert ./config |cut -d" " -f 6)
    clientkey=$(grep client-key-data ./config |cut -d" " -f 6)
    certauth=$(grep certificate-authority-data ./config |cut -d" " -f 6)
    echo $clientcert
    echo $clientkey
    echo $certauth
    echo $clientcert | base64 -d > ./client.pem
    echo $clientkey | base64 -d > ./client-key.pem
    echo $certauth | base64 -d > ./ca.pem
    

    shell-script-content

    执行脚本,生成 ca.pem、client-key.pem 以及 client.pem 三个证书文件

    shell-script-exec-result

  • 配置 Kubernetes 容器云服务器

    进入 DevOps 平台 → 平台管理 → 平台配置 → 服务集成 → 容器云服务器页面,点击新增按钮,选择 Kubernetes 类型,配置容器云服务器信息

    integration-container-cloud-server-configuration

    表单属性 属性值
    类型 Kubernetes
    名称 自定义
    地址 Kubernetes API Server Address
    certificate-authority 上一步骤中脚本执行生成的 ca.pem 证书文件的内容
    client-certificate 上一步骤中脚本执行生成的 client.pem 证书文件的内容
    client-key 上一步骤中脚本执行生成的 client.key.pem 证书文件的内容

    表单信息填写完后请点击弹窗左下方的“测试”按钮,若提示”测试通过“,说明配置成功。

  • 添加 Kubernetes 容器云资源

    进入项目 → 部署 → 资源页面,点击新建按钮,资源类型选择容器云,填写 Kubernetes 容器云资源信息

    kubernetes-container-cloud-resource-configuration

    表单属性 属性值
    资源名称 用户自定义
    资源类型 容器云
    容器云类型 Kubernetes
    容器云 上一步骤中新增的 Kubernetes 容器云服务器名称
    项目名称 Kubernetes 中的 Namespace
    用户 Kubernetes 的 kubeconfig 中的 user.name
    kubeconfig Kubernetes 的 kubeconfig 内容

# 连通状态检测

在资源列表中选择需要进行连通性检测的资源,在操作栏中点击”连通状态检测“按钮,并在弹窗中选择执行的 Jenkins 引擎以及填写引擎节点信息后,点击确定按钮,就可开始进行检测。

resource-test-1

resource-test-2

# 原理

利用 Ansible 自动化运维工具,在 Jenkins 节点处向云主机或容器云等资源执行 Ansible 远程执行脚本,从而实现 Jenkins 节点与云主机或容器云等资源之间网络连通性的检测。

# 问题排查

若发现连通状态检测结果是失败时,可通过查看检测日志中的错误提示信息,以及按以下列出的方法来排查问题:

  1. 检查 Jenkins 节点与资源之间的网络是否互通
  2. 检查 Jenkins 节点机器上是否安装了 Ansible 工具
  3. 检查资源所在机器上是否安装了 Python 环境(Python 版本需满足 Ansible 工具对应版本的使用要求)
  4. 检查资源信息填写是否有误(比如用户或密码的填写是否有误)

# 服务部署

  • 部署服务

    进入项目 → 部署 → 服务页面,点击新建按钮,选择服务类型,并填写相关信息(此处以部署 MySQL 数据库服务为例)

    注意

    如果目标资源机器中已经安装过需要的应用服务,而且只想要把服务关联到 DevOps 中,而非在机器中重新再安装一套新的应用的话,请把“高级”里边的“已安装”复选框勾选上

    service-add

    service-add-mysql-1

    service-add-mysql-2

  • 服务运维

    点击服务实例,进入服务运维界面。在当前页面中,支持对服务的基本操作,以及查看运维操作的历史日志

    service-O&M-interface

说明在发布定义中使用一个服务

# 服务介质

  • 替换服务介质来源

    进入平台管理 → 平台配置 → 平台信息 → 服务介质页面,选择对应服务介质版本并点击”编辑“按钮,替换其介质 URL

    service-artifact-edit

  • 新增服务介质版本

    以 Tomcat 为例,新增一个 8.5.57 版本的 Tomcat 服务介质

    执行以下 SQL,并重启 DevOps 应用即可生效

    /**
     * 添加 Tomcat-8.5.57 版本服务介质 
     * 
     * 填写格式如下: 
     *      dictId   : ${componentType}${componentVersion} 或者 ${componentType}${componentVersion}-${envType}
     *      dictName : installArtifactUrl
     */
    INSERT INTO DPS_DICT_ENTRY (DICT_TYPE_ID, DICT_ID, DICT_NAME, SORTNO) VALUES ('DPS_CD_DEPLOY_COMPONENT_INSTALL_ARTIFACT', 'tomcat8.5.57', 'http://mirrors.primeton.com/Iaas/application/apache-tomcat-8.5.57.tar.gz', 22);
    
    /*
     * 在 Tomcat 版本业务字典中添加新版本信息
     */
    INSERT INTO DPS_DICT_ENTRY (DICT_TYPE_ID, DICT_ID, DICT_NAME, SORTNO) VALUES ('DPS_CD_DEPLOY_TOMCAT_VERSION', '8.5.57', '8.5.57', 6);
    

# 发布定义配置

# 流水线设计

进入发布定义编辑页面 → 点击“配置发布环境” → 点击”环境部署图“,进入发布流水线编排页面。

release-definition-env-deployment-diagram

在此页面中,用于放置或清楚划分发布环境的都称为 泳道

我们可以通过将发布环境分配到不同泳道,并在各发布环境中配置编排流水线任务,来实现流水线的编排设计。

各个泳道之间的发布环境和同一泳道中的发布环境执行逻辑是有差别的:

  • 同一泳道下的不同发布环境的执行是并行的;
  • 而不同泳道的发布环境的执行是串行的(按顺序从左到右),即左边泳道的发布环境是当前泳道发布环境的前置环境。

在同一发布环境中的各个原子任务的执行逻辑也可以是串行或并行的(默认为串行),可通过原子任务的 高级 配置下的 运行模式 进行配置。

# 发布环境配置

  • 回调

    通过图中相关信息的配置,可以实现在每条发布环境流水线执行完成后,回调到 DevOps 并执行回调脚本以及本项目中的构建定义。

    release-definition-env-callback-configuration

  • 前后置

    前置环境 用于编排发布环境(即分配执行泳道),为该发布环境配置前置执行条件(即只有前置发布环境流水线成功执行完成后,该发布环境流水线才能执行)。

    当确认类型为人工确认时,支持通过人工审批确认本次发布环境流水线是否能执行,或确认本次发布环境流水线执行完成后的后续操作(如后置发布环境流水线的执行)能否继续执行下去。

    当确认类型为 自动 时,系统自动根据各发布环境流水线执行情况判断是否继续执行。

    release-definition-env-front-and-rear-configuration

  • 引擎

    每个发布环境配置执行引擎。

    release-definition-env-engine-configuration

  • 通知

    支持在每条发布环境流水线执行完成后,能以邮件的方式发送消息,以向项目的人员或角色告知该发布环境流水线的执行情况。

    release-definition-env-email-configuration

    注意

    邮件模板可通过平台参数或项目参数中的 Cd.DeployMailRule 参数进行自定义配置。

# 变量配置

进入发布定义编辑页面 → 点击“配置发布环境” → 点击“变量配置”进入变量配置页面,就可进行发布定义环境变量的配置。

release-definition-env-variable-configuration-1

  • Global 发布环境变量

    在每个发布定义中,默认都带有一个叫 Global 的发布环境。Global 发布环境里的变量是全局的,因此在其他发布环境的原子任务中可以使用这些变量。

    注意

    若其他发布环境中的变量与 Global 发布环境中的变量出现同名时,在取值时优先使用原子任务所在环境下的变量值。

  • 发布环境变量配置

    选中任意一个环境,点击“新增一行”按钮,添加一条变量并进行配置。

    支持多种变量类型、支持对变量进行描述、支持克隆变量以及支持变量以入参的形式进行配置。

    变量类型:

    变量类型 变量值来源说明
    常量 普通常量
    文本 文本类型的常量
    密码 密码类型常量
    Json JSON 类型的常量
    枚举 枚举(可通过点击“枚举配置”按钮进入配置页面进行配置)
    介质仓库 当前项目关联的介质仓库列表
    镜像仓库 当前项目关联的镜像仓库列表
    资源 当前项目下与发布环境为同一环境的云主机资源列表
    应用 当前项目下与发布环境为同一环境的应用列表
    服务 当前项目下与发布环境为同一环境的服务列表
    组件 当前项目的组件列表
    环境类型 当前项目拥有的环境类型列表
    项目版本号 当前项目的版本号列表
    代码库 当前项目所关联的代码库列表
    构建定义 当前项目的构建定义列表
    发布定义 当前项目的发布定义列表
    项目 DevOps 系统中的项目列表

    变量入参

    若勾选上变量的“是否作为入参”复选框,即可在对发布定义点击“发布”按钮后,进行变量值的配置。

    release-definition-env-variable-configuration-2

  • 变量值获取

    可在原子任务的属性配置中通过 ${变量名} 的方式获取变量值;

    若变量的数据类型为 JSON 格式时,可通过 ${变量名.key} 的方式获取 JSON 中某个 Key 的值。

# 执行策略

发布定义支持以 定时延时 的方式执行应用部署

  • 定时执行——按周期间隔执行

    进入发布定义编辑页面 → 点击“配置发布环境” → 点击“定时配置” → 勾选上“启用定时发布”复选框,进行发布定义的定时发布配置。

    scheduled-release

    定时策略

    支持按 周期策略(Cron表达式)固定间隔时间 两种执行方式实现定时发布。

  • 延时发布——某一时间点执行

    选择发布定义,点击“···”按钮,再点击“延时发布”按钮,进入发布定义延时发布配置页面。

    delayed-release

# 应用部署

以部署 Spring Boot 应用为例。

  1. 添加 Spring Boot 组件

    进入设计 → 组件页面,点击“添加组件”按钮,配置组件信息

    add-springboot-component

  2. 配置发布流水线

    进入部署 → 发布页面,点击“创建发布定义”按钮创建发布定义

    1. 添加发布环境

    2. 配置变量

    springboot-host-deploy-1

    1. 添加并配置 Spring Boot 云主机部署任务

    springboot-host-deploy-2

    springboot-host-deploy-3

    springboot-host-deploy-4

    配置参考

    Spring Boot 云主机部署原子任务配置请参考:Spring Boot 云主机部署原子任务配置说明

    介质策略配置请参考:介质策略配置说明

    应用数据备份配置请参考:备份配置说明

    校验配置请参考:校验配置说明

  3. 部署应用

    选择发布定义,点击“发布”按钮,开始部署 Spring Boot 应用

    springboot-host-deploy-5

  4. 查看应用实例

    应用部署成功后,可至部署 → 应用页面查看生成的应用实例信息

    app-component-instance-list-1


# 应用

当通过 DevOps 成功部署完一个应用(如 Spring Boot 应用)后,在 DevOps 中会自动生成与之对应的应用实例信息,用户可通过应用实例实现对应用的基本运维操作。

可至部署 → 应用页面,查看应用实例列表

app-component-instance-list-2

# 应用状态

在 DevOps 中,应用实例有 已部署运行中已停止已卸载 这四种状态,其中:

  • 已部署 表示应用成功部署于服务器中,但其运行状态未知(因未进行 HTTP 或 TCP 健康检测),不能确保应用能否正常访问使用。
  • 运行中 表示应用成功部署于服务器中,并且通过了 HTTP 或 TCP 的健康检测。

# 应用详情

点击应用实例的“名称”或者“管理”按钮,可进入应用实例详情页。

  • 基本信息

    在应用实例详情-基本信息页面中,可以查看应用部署时所配置的相关信息。

    app-component-instance-details

  • 全链路

    在应用实例详情-全链路页面中,可以查看一个应用从拉取代码、构建以及到部署等信息(这些信息通过 组件 进行关联)所组成的全链路信息。

    app-component-instance-full-link

# 应用运维

在应用实例详情中,可以看到对应用的 停止启动重启回滚 等基本运维操作按钮以及 历史 按钮。

app-component-instance-O&M

注意

回滚 是通过获取应用的最新一次的备份数据进行回滚操作,因此在使用回滚之前,需确保应用之前做过备份。

可通过点击 历史 按钮,查看应用的历史运维日志信息

app-component-instance-history-O&M-logs

上次更新: 2023/4/25下午3:54:48