技术栈 2.0 产品提供灵活强大的自定义技术栈能力,在蚂蚁金服金融科技(简称“金融科技”)的公有云上为您提供 SOFA Boot 技术栈,在私有云上为您提供 SOFA4 技术栈。更重要的是,该产品支持任意的自定义技术栈部署及对已有技术栈的灵活扩展,以满足您的定制化需求。
技术栈 2.0 产品主要由三部分组成:自定义技术栈包、控制台系统、xDeploy 2.0 框架。自定义的技术栈需要定义生命周期中的五个步骤:
这五个步骤会被 xDeploy 2.0 框架驱动,从而组成不同的操作,比如:部署操作、回滚操作、上线操作等。通过在控制台中上传自定义技术栈包,您可以在发布部署过程中使用这些操作,而无需关心 xDeploy 2.0 的工作细节。
使用系统技术栈 SOFA Boot(公有云)或者 SOFA4(私有云)开发的应用可以在金融科技平台上进行灵活的发布部署。
如果系统技术栈的依赖的版本不符合需求,您可以先下载该系统技术栈包,更换包里面的依赖,然后自定义技术栈并上传新的技术栈包,这样就可以更新系统技术栈的依赖,从而满足需求。
如果系统技术栈不能满足需求,您可以自己制作技术栈包,通过新建自定义技术栈生成新的技术栈。同时还提供了在不同租户之间分享技术栈的功能,让更多的技术栈为您所用。
术语 | 说明 |
---|---|
技术栈 | 应用程序所依赖的框架,如:Java、Python、PHP 等。 |
技术栈版本 | 技术栈的每一次发布都是一个新的版本,一个应用程序依赖某个技术栈的版本。 |
技术栈包 | 技术栈版本打包之后的文件被称为技术栈包。 |
应用发布包 | 为了进行发布,将应用代码和所关联的资源等进行编译打包后所产生的文件包。 |
技术栈克隆 | 基于一个已有的技术栈版本,创建一个完全相同的技术栈版本。 |
技术栈包克隆 | 将一个技术栈包从原有的技术栈版本复制到新的技术栈版本。 |
技术栈版本使用量 | 正在使用该技术栈版本的应用服务实例的数量。 |
xDeploy 2.0 | 驱动技术栈生命周期的框架。 |
技术栈包生命周期 | 包括环境初始化、安装依赖、部署、检查服务状态、停止服务这五个阶段。 |
AntX | SOFA 技术栈应用的配置文件。 |
本文以 Spring Boot 技术栈为例,介绍如何创建并发布一个基于 Spring Boot 的应用。整体过程分为以下 5 步:
通过这篇文档,您可以熟悉自定义技术栈的流程,创建并使用任意一种技术栈。
任意一个技术栈包的根目录名必须名是自定义的技术栈的名称,根目录下一般包含以下一级子目录:
conf
:存放技术栈配置文件,可以为空,也可以没有。lifecycle
:存放生命周期代码。目前有如下命名固定的代码文件, 没有后缀(请勿在 lifecycle
中存放任何其它语义的以 ac_
开头的文件,ac_
是金融科技的专属前缀):
ac_setup
ac_init_env
ac_deploy
ac_check_service
ac_shutdown
resources
:存放技术栈的依赖、生命周期代码的依赖等。如果您的技术栈足够简单,无需任何依赖,那么 resources
也可以为空。注意:Spring Boot 技术栈没有
conf
目录。
lifecycle
:包含以下生命周期脚本,均为 Python 代码,理论上您可以使用任何语言来编写这些生命周期脚本。
ac_setup
:建议提供,该脚本包含 Spring Boot 所需要的 JDK 的安装步骤, 主要代码逻辑为读取 resources
目录下的 JDK 文件,然后解压、安装、配置环境变量。ac_init_env
:可选,该脚本会紧邻 ac_deploy
被调用前执行,一般会执行一些部署前的处理任务,目前仅有系统提供的 SOFA 技术栈会用到,自定义技术栈(如本例的 Spring Boot)则不会用到。ac_deploy
:建议提供,该脚本包含 Spring Boot 应用程序包的启动过程,核心启动命令为: java -jar spring-boot.jar
ac_check_service
:建议提供,该脚本利用 curl
命令检测 Spring Boot 应用是否启动。ac_shutdown
:建议提供,该脚本可直接停止 Spring Boot 应用。resources
:包含 JDK 1.8 的压缩包以供 Spring Boot 使用。将所有这些脚本和依赖压缩到 spring-boot.tgz
文件中即可生成 Spring Boot 技术栈包。所有代码可以参见 Spring Boot 技术栈包代码(提交工单 联系技术支持团队提供该代码)。
spring-boot.tgz
文件。本视频教程详细全面地讲解了如何使用金融科技平台部署您的自定义技术栈应用,涵盖编写代码、制作技术栈、购买资源、发布部署等金融科技 DevOps 产品族常用功能。
通过观看本视频,作为研发工程师或运维工程师,您将学会如何使用金融科技平台部署您的任意技术栈的应用。
https://cloud.video.taobao.com/play/u/3390345763/p/1/e/6/t/1/50076766111.mp4
本位介绍如何通过控制台对当前已有的技术栈进行编辑、克隆、废弃或删除操作,搜索技术栈,阐述了 xDeploy2.0 与技术栈包的运行原理。
若要对技术栈的基本信息进行编辑,可进行如下操作:
若要对技术栈进行克隆,可进行如下操作:
若要废弃技术栈,可进行如下操作:
若要删除一个技术栈,需保证该技术栈没有被任何应用服务实例引用。具体操作如下:
在技术栈列表页,可以使用各种搜索条件对技术栈进行搜索,搜索条件包括:技术栈版本名称、状态、发布时间、支持地域、操作系统、技术栈名称、技术栈来源。
当您使用技术栈 2.0 进行一个发布操作时,您的 ECS 在 StarAgent 的驱动下首先会去下载 download_env_v2.py
这个 Python 脚本,然后运行该脚本。download_env_v2.py
会根据接收到的参数从 OSS 上下载技术栈包和 xDeploy2.0 的压缩包,并安装 xDeploy2.0。如果您在进行发布部署时勾选了 从缓存安装,那么 download_env_v2.py
的代码就会从 ECS 的特定缓存目录中去寻找缓存,如果命中则直接从缓存解压技术栈,而无需下载。以下是技术栈的缓存路径:
/home/admin/.buildpack/cache/
xDeploy2.0 里包含了驱动技术栈生命周期的代码,例如: batch_download.py
、checkapp_v2.py
、deploy_v2.py
、init_env_v2.py
、reboot_v2.py
、rollback_v2.py
、software_setup_v2.py
等,这些代码会去驱动技术栈包 lifecycle 目录里的 ac_check_service
、ac_deploy
、ac_init_env
、ac_setup
、ac_shutdown
这些应用生命周期基本步骤的代码。
xDeploy2.0 里的这些生命周期驱动代码是采用 Python 写的,这些代码通过以下这行核心代码对任意技术栈的 lifecycle 下的基本步骤代码进行调用:
os.system("%s %s"%(step_file_path,sys_argvs))
其中 step_file_path
是基本步骤代码的路径,sys_argvs
是上层业务系统传递的参数。 所以 lifecycle 下的生命周期基本步骤代码可以用 Python、Shell、Ruby、Perl 等等 ECS 上默认安装的语言编写。建议您确认一下 ECS 上是否装有您使用的语言环境。
您的代码会接收到很多命令行参数,例如:
ac.env
开头的参数,包括以下信息:名称 | 作用 |
---|---|
region_id | 区域的 ID |
tenant_name | 租户名称 |
datecenter_name | 可用区的唯一标识 |
appname | 应用名 |
workspace_id | 工作空间的 ID |
paas_id | 云服务器的 ID |
workspace_name | 工作空间的唯一标识 |
customer_id | 企业的 ID |
iaas_id | 云服务器的 IaaS ID |
bp.
开头的参数,这类参数是从控制台界面上输入的参数。包括技术栈的环境参数和应用服务实例详情页输入的环境参数。应用服务实例的环境参数优先级高于技术栈的环境参数。
其它参数则是上游业务系统传递下来的,比如 version 参数,表示当前发布包的版本,同时也是这个发布包的路径,如果 version 是 V20171101,那么下载的发布包就会放到 /home/admin/release/V20171101/
目录下。
避免您的技术栈生命周期脚本产生过多日志(控制台日志,如 Shell 脚本的 echo
命令,Python 脚本的print
调用等),否则会被截断,给您排查问题带来不便。建议将过多的日志,尤其是安装软件依赖产生的日志全部重定向到日志文件中,而不是输出到控制台中。
若您的技术栈脚本是使用 Python 编写,注意 Python 的 print
调用会缓存输出内容,可能会导致您最终在金融科技发布部署产品中看到的日志条目有延迟或乱序现象。您可以尝试在 .py
文件头部加入#!/usr/bin/python -u
来避免该问题。
以 Spring Boot 应用为例,参见 快速开始,在 application.properties
文件中添加键值对:bp.username=antcloud
,然后在 Java 代码中读取键值对:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
若要在发布部署时替换掉 username 的值,可执行以下操作:
我们经常需要对自定义的技术栈包进行修改、上传、发布部署并调试,同时观察结果。为简化该流程,技术栈 2.0 产品提供了 调试模式。您可以在创建技术栈时勾选 调试模式,调试模式意味着您在发布技术栈后,仍可以对该技术栈进行任意修改,从而方便您在云上对技术栈进行集成测试,但调试模式的技术栈无法共享给任何租户。发布之后取消调试模式则无法再次开启调试模式,取消调试模式之后,技术栈可重新分享给其他租户。
系统提供的 SOFA Boot 技术栈依赖如下:
若要修改这些依赖的版本,可执行以下操作:
resources/centos6.5
与 resources/centos7.2
目录中的相关依赖软件包,如:将 centos 7.2 的 JDK 1.7.0_80.tgz
删掉,加上您需要的 JDK 版本的 .tgz 包,注意保持后缀为 tgz 并且文件名称含有 JDK 字样。避免您的技术栈生命周期脚本产生过多日志(控制台日志,如 Shell 脚本的 echo
命令,Python 脚本的print
调用等),否则会被截断,给您排查问题带来不便。建议将过多的日志,尤其是安装软件依赖产生的日志全部重定向到日志文件中,而不是输出到控制台中。
若您的技术栈脚本是使用 Python 编写,注意 Python 的 print
调用会缓存输出内容,可能会导致您最终在金融科技发布部署产品中看到的日志条目有延迟或乱序现象。您可以尝试在 .py
文件头部加入#!/usr/bin/python -u
来避免该问题。
ad:上云就上阿里云 享数字化转型市场占有率超过第2-5名总和,云产品通用红包¥1888,可叠加官网常规优惠使用,点击领取