架构

    下图展示了DevStream是如何执行一个用户命令的。

    DevStream主要由三大块组成:

    • Plugin engine: 插件引擎,通过调用其他组件(config manager, plugin manager, state manager, backend manager)来实现DevStream的核心功能。
    • 插件:实现某个DevOps工具的CRUD接口。

    注意:为了简单起见,CLI被命名为(DevOps Toolchain Manager)。

    用户运行dtm时,会调用包中的一个命令。所有命令的源文件定义都在这个文件夹中。

    pluginengine首先调用,将本地YAML配置文件读取到一个结构体中,然后调用pluginmanager来下载所需的插件。

    之后,pluginengine调用statemanager来计算config、状态和实际DevOps工具的状态之间的”差异”。最后,根据这变更执行对应的操作,并更新状态。在执行过程中,pluginengine加载每个插件(*.so文件)并根据每个变更调用相应的接口。

    pluginengine有以下各种职责:

    • 根据配置文件来决定需要哪些插件,以及确保这些插件的存在
    • 根据配置、状态和工具的实际状态来生成变更

    Plugin engine通过调用以下模块来实现目标:

    configmanager包中的模型结构体用来表示顶级配置的结构。

    如果本地已存在所需版本的插件,则不会再次下载。

    是用来管理“状态”的,即哪些变更已经成功完成,哪些失败。

    将状态存储在backend中。

    backend包是“后端”管理器,在这里,“后端”指的是状态的实际存储。目前,DevStream已经支持本地和远程(与AWS S3兼容)状态。

    一个 plugin 实现了上述的预定义接口。

    要开发一个新的插件,请参阅创建一个插件