主机部署编排

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

创建主机部署编排

基于虚拟机或物理机的通用部署方式,使用脚本定义应用包部署方式,支持应用服务健康检查。

  1. 设置 > 编排配置 > 主机部署,单击 从模板开始 。高的 - 2024-12-19T162347.260.png

  2. 选择应用编排模板企业自定义模板 > 添加模板(详见全局设置 应用编排模板 )或者云效示例模板高的 - 2024-12-19T162551.927.png

  3. 单击 确定 ,所选模板实例化为当前应用的编排内容(模板仅用于初始化,修改模板不会影响已有应用)。

脚本生效逻辑

云效 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 示例应用的主机部署配置,具体环境部署与运维参见主机环境部署运维