DartOpsHub第一个预览版本

1,447 阅读2分钟

DartOpsHub第一个预览版本

经过一天的摸索和打造,终于完成了自动化引擎dart_ops_engine的第一个预览版本0.2.0

⚠️由于目前自动化流程还没有完成,下面只说明自动化流程的魅力。

待完善的流程

  • 开发Desktop/Web App支持创建和解析自动化流程配置文件
  • 开发插件市场支持发布插件和安装插件

功能预览

插件

由于目前插件市场没有做好,我们将准备一个本地插件Sample

void main(List<String> arguments) {
  DartOpsEngine('sample', arguments)
    ..addAction('calculate', CalculateAction())
    ..run();
}

class CalculateAction extends ActionRun {
  @override
  Future<Map> run(Env env, Map request) {
    final a = JSON(request)['a'].intValue;
    final b = JSON(request)['b'].intValue;
    return Future.value({'result': calculate(a, b)});
  }

  int calculate(int a, int b) {
    return a * b;
  }
}

这个插件很简单,我们可以通过传入两个a,b计算结果。之后我们通过dcm将插件编译到本地,你现在就可以调用插件。

/Users/king/.dcm/bin/sample/main/sample.exe calculate --id 1715416659876 --index sample@main_calculate_0 --args=a=10 --args=b=20

你可能会想--id--index怎么得到,这个交给自动化引擎,它会自动处理的。

--args是我们设置的值,不但支持我们手动输入,还支持--env自动获取环境变量,并且支持--res支持拿着上一次插件运行的返回结果来输入。

配置文件

引擎的运行需要一个配置文件,比如我们想做到下面的功能。

  • 第一步将10和20相乘
  • 第二步拿着第一步结果和20相乘

我们可以配置一个下面的配置

[
    {
        "name": "sample@main", // 插件的名称
        "commandName": "calculate", // 插件运行的命令名称
        "argument": [ // 参数
            "--args=a=10", 
            "--args=b=20"
        ],
        "actionType": "dart" // 运行的类型 目前支持dart/shell
    },
    {
        "name": "sample@main",
        "commandName": "calculate",
        "argument": [
            "--res=a|0|result",
            "--args=b=20"
        ],
        "actionType": "dart"
    }
]

现在我们执行

dart_ops_engine execute --path [配置文件路径]

结果

这个自动化运行完毕会在本地产生缓存文件

image-20240511165425940

.env是当前执行过程中的环境变量

config.json是运行的配置

sample@main_calculate0sample@main_calculate0是执行过程产生的文件夹,分别保存着对应的请求内容和返回内容

sample@main_calculate0

request.json

{"a":"10","b":"20"}

response.json

{"result":200}

sample@main_calculate0

request.json

{"a":"200","b":"20"}

response.json

{"result":4000}

总结

你是不是感到这个自动化的神奇之处,这个不但可以将以后各种插件混合在一起组成一个流程。比如发布版本,自动化上传。

而且可以部署后台服务,将云代码通过这种服务进行部署,可以做到实时更新代码的能力。