证书部署可选择跳过重复部署

pull/79/head^2
zhangchenhao 2025-05-14 19:59:53 +08:00
parent d333c7a9af
commit b9abdb0f72
3 changed files with 78 additions and 6 deletions

View File

@ -55,13 +55,84 @@ func deploy(params map[string]any) (any, error) {
logger.Info("=============部署失败=============")
return nil, errors.New("证书不存在")
}
err := certDeploy.Deploy(params, logger)
certStr, ok := certificate.(string)
if !ok {
logger.Error("证书格式错误")
logger.Info("=============部署失败=============")
return nil, errors.New("证书格式错误")
}
nowSha256, err := public.GetSHA256(certStr)
if err != nil {
logger.Error("解析证书sha256失败" + err.Error())
logger.Info("=============部署失败=============")
return nil, err
}
s, err := public.NewSqlite("data/data.db", "")
if err != nil {
logger.Error("新建数据库连接失败" + err.Error())
logger.Info("=============部署失败=============")
return nil, err
}
defer s.Close()
s.TableName = "workflow_history"
historyData, err := s.Where("id=?", []any{params["_runId"]}).Find()
if err != nil {
logger.Error("查询表workflow_history失败" + err.Error())
logger.Info("=============部署失败=============")
return nil, err
}
workflowId := historyData["workflow_id"]
s.TableName = "workflow_deploy"
deployData, err := s.Where("workflow_id=? and id=?", []any{workflowId, params["NodeId"]}).Select()
if err != nil {
logger.Error("查询表workflow_deploy失败" + err.Error())
logger.Info("=============部署失败=============")
return nil, err
}
if params["skip"] != nil {
var skip int
switch v := params["skip"].(type) {
case int:
skip = v
case float64:
skip = int(v)
case string:
skip, _ = strconv.Atoi(v)
}
if skip == 1 {
if len(deployData) > 0 {
beSha256, ok := deployData[0]["cert_hash"].(string)
if !ok {
logger.Error("证书hash格式错误")
logger.Info("=============部署失败=============")
return nil, errors.New("证书hash格式错误")
}
if beSha256 == nowSha256 && deployData[0]["status"].(string) == "success" {
logger.Info("与上次部署的证书sha256相同且上次部署成功跳过重复部署")
logger.Info("=============部署成功=============")
return nil, nil
}
}
}
}
err = certDeploy.Deploy(params, logger)
var status string
if err != nil {
status = "fail"
logger.Error(err.Error())
logger.Info("=============部署失败=============")
} else {
status = "success"
logger.Info("=============部署成功=============")
}
if len(deployData) > 0 {
s.Where("workflow_id=? and id=?", []any{workflowId, params["NodeId"]}).Update(map[string]interface{}{"cert_hash": nowSha256, "status": status})
} else {
s.Insert(map[string]interface{}{"cert_hash": nowSha256, "workflow_id": workflowId, "id": params["NodeId"], "status": status})
}
return nil, err
}

View File

@ -218,6 +218,7 @@ func RunNode(node *WorkflowNode, ctx *ExecutionContext) error {
}
node.Config["_runId"] = ctx.RunID
node.Config["logger"] = ctx.Logger
node.Config["NodeId"] = node.Id
// 执行当前节点
result, err := Executors(node.Type, node.Config)

View File

@ -185,14 +185,14 @@ func init() {
workflow_id TEXT not null
);
create table IF NOT EXISTS workflow_deploy
create table workflow_deploy
(
id TEXT
constraint workflow_deploy_pk
primary key,
id TEXT,
workflow_id TEXT,
cert_hash TEXT,
status TEXT
status TEXT,
constraint workflow_deploy_pk
primary key (id, workflow_id)
);
`)