流程编排,你还不知道建木还可以这么用?

275 阅读2分钟

介绍

企业的发展越来越快,企业内部需要使用到的企业级应用也越来越多。有些需求和流程与流程编程相关。每当遇到这种需求都会去找流程编排相关的框架,毕竟没必要为了做了一个应用来造个轮子。使用建木来作为底层流程编排是一个不错的选择。

如何做

  1. 在建木平台上创建流程,获得流程的webhook地址

  2. 使用自己的平台来触发建木流程

  3. 在建木第一个节点回调到自己的系统,感知到流程已经开始执行

  4. 流程其他节点执行业务逻辑

  5. 建木流程最后一个节点回到自己系统,感知到流程执行结束

示例

用建木在多台机器上执行脚本

  1. 编写一个流程执行shell脚本,DSL如下:
name: 远程执行shell脚本

trigger:
  type: webhook
  param:
    - name: task_id
      type: STRING
      exp: $.body.json.id
    - name: task_record_id
      type: STRING
      exp: $.body.json.taskExecRecordDetailId
    - name: shell_script
      type: STRING
      exp: $.body.json.script
    - name: ssh_ip
      type: STRING
      exp: $.body.json.sshIp
    - name: ssh_port
      type: NUMBER
      exp: $.body.json.sshPort
    - name: ssh_user
      type: STRING
      exp: $.body.json.sshUser
    - name: ssh_private_key_name
      type: STRING
      exp: $.body.json.sshKeySecretName
global:
  tag: ${trigger.tag}
  concurrent: true
  param:
    callback_url: http://10.11.12.13

pipeline:
  startx:
    type: local/autoops_callback:1.0.1
    param:
      callback_url: ${global.callback_url}
      callback_api: /api/v1/task_exec/start/${trigger.task_id}/${trigger.task_record_id}
      callback_params_env: '{"recordId":"JM_INSTANCE_ID","triggerId":"JM_TRIGGER_ID","projectId":"JM_PROJECT_ID"}'
      callback_type: start
  get_uuid:
    type: local/get_uuid:1.0.0
  scp_shell_script:
    type: "scp_resource:1.3.0"
    param:
      ssh_private_key: "((${trigger.ssh_private_key_name}))"
      ssh_ip: "${trigger.ssh_ip}"
      ssh_port: "${trigger.ssh_port}"
      ssh_user: "${trigger.ssh_user}"
      remote_file: "/tmp/${get_uuid.uuid}.sh"
      file_content: "${trigger.shell_script}"
  remote_execution:
    type: local/remote_execution:1.0.0
    param:
      ssh_private_key: "((${trigger.ssh_private_key_name}))"
      ssh_ip: "${trigger.ssh_ip}"
      ssh_port: (${trigger.ssh_port})
      ssh_user: "${trigger.ssh_user}"
      execution_cmd: "sh /tmp/${get_uuid.uuid}.sh"
  clear_remote_file:
    type: ssh_cmd:1.0.2
    param:
      ssh_private_key: "((${trigger.ssh_private_key_name}))"
      ssh_ip: "${trigger.ssh_ip}"
      ssh_port: "${trigger.ssh_port}"
      ssh_user: "${trigger.ssh_user}"
      ssh_cmd: "rm -f /tmp/${get_uuid.uuid}.sh"
  finish:
    type: local/autoops_callback:1.0.1
    param:
      callback_url: ${global.callback_url}
      callback_api: /api/v1/task_exec/finish/${trigger.task_id}/${trigger.task_record_id}
      callback_params_files: '{"log":"${remote_execution.log_path}"}'
      callback_type: finish
      work_status: (${remote_execution.inner.execution_status} == "EXECUTION_SUCCEEDED")
      status_true_flag: "SUCCEEDED"

image-20221116175708794.png

  1. 在自己系统触发建木执行

image-20221116180019898.png

在自己系统看到建木执行状态

image-20221116180357896.png

使用到的接口

接口说明
POST /webhook/**触发项目,执行流程
GET /view/workflow_instance/{triggerId}根据triggerId查询流程实例
PUT /workflow_instances/stop/{instanceId}流程终止接口

注意事项

正常情况下,在第一个节点回调平台传回triggerId instanceId等数据,平台感觉到流程开始执行。在最后一个节点回调平台,平感知到流程执行完毕。但是这中间只要有一个节点执行不成功,就会导致平台无法感知流程状态。为此需要使用定时任务去查询流程状态来补偿状态信息。如果查询出流程已经失败,是否需要终止流程、重试节点等操作,需要根据业务自行处理。这里会有一个问题,就是第一个节点也执行失败,那定时也是白费,因为没法获取本次执行的triggerId导致流程无法控制。目前最新版本已经支持在webhook触发时返回triggerId了。

图片

“建木”是上古先民崇拜的一种圣树,传说建木是沟通天地人神的桥梁。伏羲、黄帝等众帝都是通过这一神圣的梯子上下往来于人间天庭。《淮南子·墬形训》亦曰:“建木在都广,众帝所自上下。日中无景,呼而无响,盖天地之中也。”

建木是一个面向DevOps领域的极易扩展的开源无代码(图形化)/低代码(GitOps)工具。可以帮助用户轻松编排各种DevOps流程并分发到不同平台执行。

官方交流群

图片