主机部署编排

本文主要介绍云效 AppStack 应用主机部署编排操作方法。

选择部署方式

云效 AppStack 应用编排支持 Kubernetes 部署(适用于云原生部署场景)、支持主机部署(适用于传统主机部署场景)、也支持 Kubernetes 和主机混合部署场景(适用于应用由传统主机部署向云原生转型场景)。进入 应用设置-应用编排,选择 主机部署 方式。

image

创建主机部署编排

应用设置-应用编排-主机部署 处,点击 直接开始,进入主机部署编排页面。一个应用的主机部署通常需要配置制品执行用户启动脚本停止脚本,还可能需要 健康检查脚本 清理脚本

脚本生效逻辑

云效 AppStack 将会使用编排中定义的脚本在不同的环境运维场景使用,生效逻辑如下:

  • 主机部署:停止脚本 + 启动脚本 + 健康检查脚本(如有)。当某主机需要重新部署(环境部署、环境扩容、环境回滚时),先在主机上执行 停止脚本 停止原有服务,再执行 启动脚本 重新启动服务,如果定义了 健康检查脚本 则将执行其用于服务健康状态检测。 只有上述脚本都执行正常退出后,云效 AppStack 才认为当前主机部署成功。

  • 主机下线:停止脚本 + 清理脚本(如有)。当某主机需要下线(环境缩容或环境删除时),先在主机上执行 停止脚本 停止服务,再执行 清理脚本 删除主机上一些无用的制品包、日志文件等。

云效示例主机编排

下面将以云效 Spring-boot 示例应用来说明如何编排一个主机部署应用。

制品

  • 制品为即将部署到机器上的制品包,通常为流水线构建阶段产物,如tgz包等。支持从HTTP远程下载包、也可以手动拷贝包到你主机本地。

    • HTTP:支持从HTTP远程下载制品包,指定包来源(包从哪里来)、保存路径(下载到哪里),可用于启动脚本来部署应用服务。

      • 包来源:指定制品包HTTP下载地址,请确保地址可直接下载。支持使用占位符 {{ .AppStack.artifact.xxx }} 在部署时动态传入制品地址。

        • 示例:{{ .AppStack.artifact.myapp }},其中 myapp 为制品包的占位符名称

      • 保存路径:将制品包下载到你主机的指定路径上,如/home/admin/app/package.tgz,用于后续启动脚本部署应用服务。

        • 示例:/home/admin/app/package.tgz

    • 机器本地:待部署的制品包已经在你主机上存在,无需下载时,选择机器本地即可。

      • 本地路径:输入制品包在你主机上的绝对路径,如/home/admin/app/package.tgz,用于后续启动脚本部署应用服务。

执行用户

  • 执行脚本的用户,如root。

启动脚本

  • 应用环境部署时,将在环境下每台主机上执行,用于启动服务。

# 一个典型的启动脚本逻辑如下:先将制品包解压缩到指定目录中,再执行启动文件(通常在代码中维护,如示例中的deploy.sh)。
mkdir -p /home/admin/application
tar zxvf /home/admin/app/package.tgz -C /home/admin/application/
sh /home/admin/application/deploy.sh start

停止脚本

  • 应用环境部署时,将在环境下每台主机上先执行停止脚本停止服务,再执行启动脚本重新部署;应用环境删除时,将执行停止脚本下线服务。

if [ -d "/home/admin/application" ]; then
  if [ -f "/home/admin/application/deploy.sh" ]; then
    sh /home/admin/application/deploy.sh stop
  else
    echo "未找到/home/admin/application/deploy.sh脚本文件,跳过停止脚本"
  fi
else
  echo "未找到/home/admin/application目录,跳过停止脚本"
fi

健康检查脚本

  • 开启健康检查脚本后,启动脚本执行成功后将执行健康检查脚本,用于判断部署是否成功。健康检查脚本执行exit 0即判定为检查通过。

# 一个典型的健康检查脚本逻辑如下:在一段时间内轮询某个请求,根据请求返回判断服务状态。
sh /home/admin/application/deploy.sh healthcheck

清理脚本

  • 开启清理脚本后,删除应用环境停止服务后,将执行清理脚本做一些后置操作,如删除主机上的无用的制品包、日志文件等。

# 一个典型的清理脚本逻辑如下:清理指定目录下无用的制品包、日志文件等。
sh /home/admin/application/deploy.sh clear

使用占位符和变量

  • 预置制品占位符

    • 云效 AppStack 提供制品预置占位符,使用制品 {{ .AppStack.artifact.xxx }} 占位符定义的参数会在提交部署单时识别为制品,可以将流水线上游构建阶段的产物注入到制品, 也可以在部署单处手动填写制品下载地址。

  • 自定义占位符:

    • 可以在脚本中将需要部署时动态修改或者多环境差异化配置的内容定义成占位符,占位符赋值变量组变量,部署时修改变量取值或者修改部署单参数即可。

image

以上即完成了 Spring-boot 示例应用的主机部署配置,具体环境部署运维参见主机环境部署运维。