全部产品
云市场
云游戏

xDeploy 框架使用教程

更新时间:2020-06-18 15:22:38

本教程将自定义一个 Spring Boot 部署脚本,并部署 JAR 包到服务器上。

准备

  1. 创建一个 Spring Boot 工程,打出 jar 包,功能为可以访问页面,并打印 hello world

  2. 创建 SpringBootTest 自定义技术栈,详见 创建自定义技术栈

  3. 在命令行工具中,运行命令 xd -c SpringBoot 在本地生成 SpringBoot 脚本。详见 下载并安装 xDeploy SDK

编写 lib/custom/ 下的脚本

  1. import sys
  2. import os
  3. import commands
  4. import time
  5. from xdeploy.util import function_util
  6. from xdeploy.base import base_step
  7. from xdeploy.base import base_executor
  8. class HelloStep(base_step.BaseStep):
  9. def deploy(self, context):
  10. print("begin deploy")
  11. #切换账户为 admin
  12. function_util.change_user("admin")
  13. #杀死已有 java 进程
  14. self.shutdown(context)
  15. #获得应用部署的路径
  16. app_path=context.params_dict["app_path"]
  17. #到应用部署路径下
  18. os.chdir(app_path)
  19. #启动 jar
  20. os.system("nohup java -jar *.jar &")
  21. print("end deploy")
  22. return True
  23. def shutdown(self, context):
  24. os.system('killall -9 java')
  25. return True
  26. def init_env(self, context):
  27. #环境配置
  28. return True
  29. def validate_env(self, context):
  30. #环境检查
  31. return True
  32. def pre_setup(self,context):
  33. #软件安装前置操作,一般做软件清理等
  34. print("begin to pre_setup")
  35. #context.params_dict 是 dict 类型,它用于存储执行流程需要的参数
  36. setup_json_parameter = context.params_dict["setup_json_parameter"]
  37. print("end to pre_setup")
  38. return True
  39. def post_setup(self,context):
  40. #软件安装后置操作,一般做软件检查等
  41. return True
  42. def pre_deploy(self, context):
  43. #部署前置操作,一般做部署前的准备工作
  44. return True
  45. def check_service(self, context):
  46. #服务检查,检查部署是否成功
  47. return True
  48. def main():
  49. #用于接口测试,例如测试 deploy() 和 check_service() 功能
  50. exe = HelloStep()
  51. exe.deploy()
  52. exe.check_service()
  53. if __name__ == '__main__':
  54. main()

说明:

  • 因为示例的核心为部署,所以我们只实现部署接口 (deploy) 和停止应用接口 (shutdown)。您可根据自己技术栈的实际要求酌情实现其他接口。
  • 通过 context.params_dict["app_path"] 可以得到应用下载后的路径,我们在这个例子中上传的应用包会下载到我们指定的下载路径(在本节中说明了如何修改指定路径)。
  • 如果所执行的命令是非中断的形式,需要加入 & 让命令以后台的方式执行,否则部署会超时。

打包脚本并上传

  1. 打包:在 SpringBoot 目录下执行 xd -p 命令打包脚本,参考 打包 的描述。

  2. 上传脚本包至 SOFAStack 平台,详见 部署脚本

部署脚本 标签页中,应用安装路径 指的是应用包下载后的路径,即 编写 lib/custom/ 下的脚本 中描述的 context.params_dict["app_path"] 所得到的值,点击右侧的 编辑 可以修改应用包下载的路径。

部署前的其他必备条件

  1. 完成从 下载并安装 xDeploy SDK打包 的步骤。

  2. 配置相关软件:从控制台顶部的 产品与服务 菜单点击 应用管理 后,点击左侧菜单栏上的 技术栈管理,进入技术栈管理页面,然后点击该页面左上方的 添加 创建一个技术栈。进入新创建的技术栈,选择 软件配置,通过软件组 添加 软件,这里我们添加 JDK 1.6 版本。

  3. 创建应用,并上传应用包。

    • 技术栈提交:配置完技术栈的相关配置后,在页面右上角点击 提交 创建出 SpringBootTest 技术栈实例。

    • 创建应用:根据 创建应用 的描述创建一个基于 SpringBootTest 技术栈的应用。

    • 上传应用发布包:根据 应用包管理 的描述上传应用发布包。

  4. 发布部署应用:在 应用详情 页面上,点击右上角的 运维 按钮,在下拉菜单中点击 发布部署 即可开始发布部署该应用。关于发布部署的信息,详见 应用部署

脚本调试说明

按照上述使用教程完成了自定义技术栈脚本的编写后,在发布部署过程中可能出现错误,如下图所示。

deploy

出现了 执行失败,则需要进行调试。

  • 如果关流量、下载脚本包、环境安装(非 pre_setup 或 post_setup)、下载应用、开流量出现了错误,请联系技术支持人员排查问题。

  • 如果环境安装(pre_setup 或 post_setup 出错)、配置环境、应用部署、服务检测出现失败,则需要登录服务器进行调试,确定所编写的自定义技术栈的脚本是否有问题。以下对脚本调试进行说明。

说明:所有 bin 目录下的脚本执行都需要 root 权限。

配置环境调试

出错步骤:配置环境

需要调试的脚本 common_config.py

命令如下:

  1. python /home/admin/bin/common_config.py

可选参数:

  • config_extparams=’’:表示 config 阶段的扩展参数。

  • {custom_params}:表示创建发布单时的部署参数。

部署调试

出错步骤:部署应用(运维操作为 发布部署

调试脚本:deploy.py

命令如下:

  1. python /home/admin/bin/deploy.py app_path=/home/admin/release/new/ type=publish version=1.0.0

必选参数:

  • app_path:表示应用最后的部署目录。

  • type:表示操作类型,这里 type=publish。

  • version:表示当前部署的版本号。

可选参数:

  • deploy_extparams=’’:表示 deploy 阶段的扩展参数。

  • {custom_params}:表示创建发布单时的部署参数。

回滚调试

出错步骤:应用部署(运维操作为 回滚

调试脚本: rollback.py

命令:

  1. python /home/admin/bin/rollback.py app_path=/home/admin/release/new/ type=rollback version=1.0.0

必选参数:

  • app_path:表示应用最后的部署目录。
  • type:表示操作类型,这里 type=rollback。
  • version:表示当前部署的版本号。

可选参数:

  • deploy_extparams=’’:表示 deploy 阶段的扩展参数。
  • {custom_params}:表示创建发布单时的部署参数。

重启调试

出错步骤:应用部署(运维操作为 重启)调试脚本: reboot.py

命令:

  1. python /home/admin/bin/reboot.py

可选参数:

  • deploy_extparams=’’:表示 deploy 阶段的扩展参数。
  • {custom_params}:表示创建发布单时的部署参数。

关闭应用

出错步骤:服务检测

调试脚本: stopapp.py

命令:

  1. python /home/admin/bin/stopapp.py

可选参数:

  • {custom_params}:表示创建发布单时的部署参数。