Skip to content

自定义命令

所谓的自定义命令指的是由组件决定的命令。由于 Serverless Devs 开发者工具,本身并不具备任何业务相关的能力(值得包括不限于函数的部署、应用的构建、项目的测试等),所以,这些能力都将会由组件提供,通过 Serverless Devs 开发者工具进行透出。

例如,某应用的资源/行为描述文件如下:

edition: 3.0.0 # 命令行YAML规范版本,遵循语义化版本(Semantic Versioning)规范
name: FullStack # 项目名称
access: xxx-account1
resources:
backend: # 服务名称
component: django-component # 组件名称
props: # 组件的属性值
src: ./backend_src
url: url
user—frontend: # 服务名称
component: vue-component # 组件名称
props: # 组件的属性值
src: ./frontend_src_user
url: url
admin-frontend: # 服务名称
component: vue-component # 组件名称
props: # 组件的属性值
src: ./frontend_src_admin
url: url

通过该 Yaml 文件可以看出以下信息:

  1. 该应用的名字是FullStack,将会使用密钥xxx-account1;
  2. 该应用拥有三个服务:
    • backend服务:使用了django-component组件
    • user—frontend服务:使用了vue-component组件
    • admin-frontend服务:使用了vue-component组件

如果此时django-component组件和vue-component组件支持的自定义命令为:

django-componentvue-component
deploy支持支持
remove支持支持
test支持不支持

则可以通过自定义命令实现应用级操作资源级操作

应用级操作

在当前项目下,可以执行s [自定义命令]实现应用纬度的操作。

  • 执行s deploy或者s remove时,由于backenduser—frontendadmin-frontend三个服务对应的组件,均支持deployremove方法,所以此时系统会按照Serverless User Model所定义的资源顺序,进行三个服务分别对应的组件的deployremove操作;此时,系统的exit code为0;
  • 执行s test时,由于user—frontendadmin-frontend两个服务对应的组件并不支持test方法,所以此时系统会执行backend对应组件(django-component)的test操作;此时,系统会对user—frontendadmin-frontend两个服务进行警告,但是并不会报错,最终的exit code为0;
  • 如果在执行相关的命令时,backenduser—frontendadmin-frontend三个服务任何一个服务在执行过程中出现了错误,系统则会报错,并终止下一步的操作,此时,系统的exit code为101;

关于Serverless Devs开发者工具,涉及到的 Exit Code,可以参考命令行设计规范

资源级操作

在当前项目下,可以执行s [资源名] [自定义命令]实现资源级操作。

  • 执行s backend deploy等,可以针对服务backend进行deploy相关的操作,如果顺利完成与其操作,系统的exit code为0;否则,出现错误,系统的exit code为101
  • 执行s admin-frontend test是,由于服务admin-frontend对应的test方法是不存在的,此时系统将会认为是未找到组件方法,系统的exit code为100

注意事项

在上面应用级操作资源级操作中,我们不难发现,同样是某些组件不包括对应方法,但是在应用级操作资源级操作中的表现形式却不同,这里的设计思路主要是为了保证应用级操作的流畅性。所以其规律通常如下:

  1. 应用级操作更多是一种批量操作,会按照Serverless User Model所定义的服务顺序对应用下的所有服务进行分别操作;所以,此时如果出现某个服务对应的组件不包括当前方法,会以”批量操作”作为理由,跳过该服务,进行警告后继续执行,此时,系统的exit code为0;
  2. 资源级操作更多是一种针对某个应用下的某个服务的特定操作,此时如果找不到对应的方法,则意味着本次操作没有意义,将会惊醒错误报告,此时,系统的exit code为100;