From e66330de8f02a42dac2d2dac10aa29d9fecfb9ca Mon Sep 17 00:00:00 2001 From: ethan-liu Date: Tue, 23 Apr 2024 16:50:39 +0800 Subject: [PATCH 01/11] =?UTF-8?q?update:=20=E6=9B=B4=E6=96=B0=E6=96=87?= =?UTF-8?q?=E4=BB=B6=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index 550894ade..42df55ba3 100644 --- a/README.md +++ b/README.md @@ -114,9 +114,7 @@ openssl rand -hex 16 若,使用过程中遇到问题,开issue反馈给我们。 -* 建木:https://gitee.com/jianmu-dev/jianmu/issues -* 建木Worker:https://gitee.com/organizations/jianmu-workers/issues -* 建木节点:https://gitee.com/organizations/jianmu-runners/issues +* 建木:https://gitcode.com/jianmu-dev/jianmu/issues [官方示例](https://ci.jianmu.dev) -- Gitee From f60fce943b870ddf0cc94ca1a7025a17ef0f3221 Mon Sep 17 00:00:00 2001 From: liamjung Date: Mon, 1 Jul 2024 17:41:29 +0800 Subject: [PATCH 02/11] refactor: version base url --- ui/src/api/view-no-auth.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/src/api/view-no-auth.ts b/ui/src/api/view-no-auth.ts index e78543071..fab1a7e3c 100644 --- a/ui/src/api/view-no-auth.ts +++ b/ui/src/api/view-no-auth.ts @@ -32,7 +32,7 @@ export const baseUrl = { parameter: '/view/parameters', triggerEvent: '/view/trigger_events', trigger: '/view/trigger', - version: 'https://jianmu.dev/versions/ci', + version: 'https://api.jianmu.dev/versions/ci', cache: '/view/caches', }; const hubUrl = import.meta.env.VITE_JIANMU_HUB_API_BASE_URL; -- Gitee From 8d698d79928778c027c77a593c50d9ec907d5280 Mon Sep 17 00:00:00 2001 From: liamjung Date: Mon, 1 Jul 2024 17:42:07 +0800 Subject: [PATCH 03/11] fix: main image url --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 42df55ba3..4bc151ee8 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ > 建木是一个面向DevOps领域的极易扩展的开源无代码(图形化)/低代码(GitOps)工具。可以帮助用户轻松编排各种DevOps流程并分发到不同平台执行。 -![](https://jianmu-blog.assets.dghub.cn/jianmu-blog/1.29.0/assets/blog-source/%E7%AC%AC%E4%B8%80%E5%B1%8F%E5%9B%BE.png) +![](https://jianmu-blog.assets.dghub.cn/jianmu-blog/1.80.1/assets/blog-source/%E7%AC%AC%E4%B8%80%E5%B1%8F%E5%9B%BE.png) 在线体验:[devops.jianmuhub.com](https://devops.jianmuhub.com) -- Gitee From 0b9a9b313fd46efbf678638ae8e507d8e40a981c Mon Sep 17 00:00:00 2001 From: ethan-liu Date: Fri, 23 Aug 2024 16:51:23 +0800 Subject: [PATCH 04/11] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0JM=5FTASK=5FREF?= =?UTF-8?q?=E5=86=85=E7=BD=AE=E5=8F=98=E9=87=8F=20=20feat:=20=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0JM=5FTASK=5FREF=E5=86=85=E7=BD=AE=E5=8F=98=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/internal/WorkerInternalApplication.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/application/src/main/java/dev/jianmu/application/service/internal/WorkerInternalApplication.java b/application/src/main/java/dev/jianmu/application/service/internal/WorkerInternalApplication.java index 5bd0d8a3d..aa20f7cf6 100644 --- a/application/src/main/java/dev/jianmu/application/service/internal/WorkerInternalApplication.java +++ b/application/src/main/java/dev/jianmu/application/service/internal/WorkerInternalApplication.java @@ -284,7 +284,7 @@ public class WorkerInternalApplication { .map(entry -> Map.entry("JIANMU_" + entry.getKey(), entry.getValue())) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); } - parameterMap.putAll(this.getEnvVariable(worker, taskInstance.getTriggerId(), taskInstance.getBusinessId(), taskInstance.getDefKey())); + parameterMap.putAll(this.getEnvVariable(worker, taskInstance.getTriggerId(), taskInstance.getBusinessId(), taskInstance.getDefKey(), taskInstance.getAsyncTaskRef())); this.addFeatureParam(parameterMap); parameterMap = parameterMap.entrySet().stream() .filter(entry -> entry.getKey() != null) @@ -409,7 +409,7 @@ public class WorkerInternalApplication { * @param worker * @return */ - private HashMap getEnvVariable(Worker worker, String triggerId, String businessId, String defKey) { + private HashMap getEnvVariable(Worker worker, String triggerId, String businessId, String defKey, String taskRef) { HashMap env = new HashMap<>(); env.put("JM_RESULT_FILE", "/" + triggerId + "/" + businessId); @@ -421,6 +421,7 @@ public class WorkerInternalApplication { env.put("JM_BUSINESS_ID", businessId); env.put("JM_TRIGGER_ID", triggerId); env.put("JM_DEF_KEY", defKey); + env.put("JM_TASK_REF", taskRef); var triggerEvent = this.triggerEventRepository.findById(triggerId) .orElseThrow(() -> new DataNotFoundException("未找到该触发事件")); @@ -692,7 +693,7 @@ public class WorkerInternalApplication { .findFirst() .orElseThrow(() -> new RuntimeException("未找到对应的异步任务实例:")); envs.put("JM_RESULT_FILE", "/" + asyncTaskInstance.getTriggerId() + "/" + asyncTaskInstance.getId()); - var map = this.getEnvVariable(worker, asyncTaskInstance.getTriggerId(), asyncTaskInstance.getId(), asyncTaskInstance.getAsyncTaskType()); + var map = this.getEnvVariable(worker, asyncTaskInstance.getTriggerId(), asyncTaskInstance.getId(), asyncTaskInstance.getAsyncTaskType(), asyncTaskInstance.getAsyncTaskRef()); envs.putAll(map); if (nodeDef.getImage() != null) { envs.put("JIANMU_SCRIPT", "JIANMU_SCRIPT"); -- Gitee From dfc1f9bdd982c71a81996ce33e4d3b1f22560bde Mon Sep 17 00:00:00 2001 From: ethan Date: Sat, 16 Nov 2024 11:50:42 +0800 Subject: [PATCH 05/11] =?UTF-8?q?feat(worker):=20=E5=A2=9E=E5=8A=A0=20Work?= =?UTF-8?q?er=20=E5=9C=A8=E7=BA=BF=E7=8A=B6=E6=80=81=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 Worker 实体中添加 online 和 offline 方法,用于更新 Worker 状态 - 在 WorkerController 中添加在线和离线通知接口 - 在 WorkerInternalApplication 中实现在线和离线状态更新逻辑 - 修改 join 接口描述,更准确地反映其功能 --- .../api/controller/WorkerController.java | 21 ++++++++++++++++++- .../internal/WorkerInternalApplication.java | 16 ++++++++++++++ .../dev/jianmu/worker/aggregate/Worker.java | 8 +++++++ 3 files changed, 44 insertions(+), 1 deletion(-) diff --git a/api/src/main/java/dev/jianmu/api/controller/WorkerController.java b/api/src/main/java/dev/jianmu/api/controller/WorkerController.java index 15a09185c..6824543cb 100644 --- a/api/src/main/java/dev/jianmu/api/controller/WorkerController.java +++ b/api/src/main/java/dev/jianmu/api/controller/WorkerController.java @@ -71,7 +71,7 @@ public class WorkerController { } @PutMapping("{workerId}/join") - @Operation(summary = "连接Server接口", description = "连接Server接口") + @Operation(summary = "Worker注册接口", description = "Worker注册接口") @Parameters({ @Parameter(name = "X-Jianmu-Token", in = ParameterIn.HEADER, description = "认证token") }) @@ -79,6 +79,25 @@ public class WorkerController { this.workerApplication.join(workerId, dto.getType(), dto.getName(), dto.getTag()); } + @PutMapping("{workerId}/online") + @Operation(summary = "通知Worker已经Online", description = "通知Worker已经Online") + @Parameters({ + @Parameter(name = "X-Jianmu-Token", in = ParameterIn.HEADER, description = "认证token") + }) + public void online(@PathVariable("workerId") String workerId) { + this.workerApplication.online(workerId); + } + + @PutMapping("{workerId}/offline") + @Operation(summary = "通知Worker已经Offline", description = "通知Worker已经Offline") + @Parameters({ + @Parameter(name = "X-Jianmu-Token", in = ParameterIn.HEADER, description = "认证token") + }) + public void offline(@PathVariable("workerId") String workerId) { + this.workerApplication.offline(workerId); + } + + @GetMapping("{workerId}/ping") @Operation(summary = "ping Server接口", description = "ping Server接口") @Parameters({ diff --git a/application/src/main/java/dev/jianmu/application/service/internal/WorkerInternalApplication.java b/application/src/main/java/dev/jianmu/application/service/internal/WorkerInternalApplication.java index aa20f7cf6..952ae7ffd 100644 --- a/application/src/main/java/dev/jianmu/application/service/internal/WorkerInternalApplication.java +++ b/application/src/main/java/dev/jianmu/application/service/internal/WorkerInternalApplication.java @@ -153,6 +153,22 @@ public class WorkerInternalApplication { .build()); } + @Transactional + public void online(String workerId) { + var worker = this.workerRepository.findById(workerId) + .orElseThrow(() -> new RuntimeException("未找到Worker")); + worker.online(); + this.workerRepository.updateStatus(worker); + } + + @Transactional + public void offline(String workerId) { + var worker = this.workerRepository.findById(workerId) + .orElseThrow(() -> new RuntimeException("未找到Worker")); + worker.offline(); + this.workerRepository.updateStatus(worker); + } + @Transactional public void dispatchTask(TaskInstanceCreatedEvent event) { var taskInstance = this.taskInstanceRepository.findById(event.getTaskInstanceId()) diff --git a/worker-core/src/main/java/dev/jianmu/worker/aggregate/Worker.java b/worker-core/src/main/java/dev/jianmu/worker/aggregate/Worker.java index ba05e9a7b..ab2121ee1 100644 --- a/worker-core/src/main/java/dev/jianmu/worker/aggregate/Worker.java +++ b/worker-core/src/main/java/dev/jianmu/worker/aggregate/Worker.java @@ -31,6 +31,14 @@ public class Worker { private Status status; private final LocalDateTime createdTime = LocalDateTime.now(); + public void online() { + this.status = Status.ONLINE; + } + + public void offline() { + this.status = Status.OFFLINE; + } + public String getId() { return id; } -- Gitee From 2d26ead077525c5aac1dafa8a17ddc0f88f201f2 Mon Sep 17 00:00:00 2001 From: ethan Date: Sat, 16 Nov 2024 12:40:25 +0800 Subject: [PATCH 06/11] =?UTF-8?q?feat(api):=20=E6=B7=BB=E5=8A=A0=20Worker?= =?UTF-8?q?=20=E5=88=97=E8=A1=A8=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 ViewController 中新增 findWorkerList 方法,用于查询 Worker 列表 - 创建 WorkerApplication 类,提供 Worker 相关的业务逻辑 - 在 WorkerRepository 和 WorkerMapper 中添加 findAll 方法,用于获取所有 Worker - 创建 WorkerVo 类,作为 Worker 的视图模型 --- .../jianmu/api/controller/ViewController.java | 24 +++++++++++++++++- .../main/java/dev/jianmu/api/vo/WorkerVo.java | 25 +++++++++++++++++++ .../service/WorkerApplication.java | 22 ++++++++++++++++ .../mapper/task/WorkerMapper.java | 5 ++++ .../mybatis/task/WorkerRepositoryImpl.java | 5 ++++ .../worker/repository/WorkerRepository.java | 2 ++ 6 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 api/src/main/java/dev/jianmu/api/vo/WorkerVo.java create mode 100644 application/src/main/java/dev/jianmu/application/service/WorkerApplication.java diff --git a/api/src/main/java/dev/jianmu/api/controller/ViewController.java b/api/src/main/java/dev/jianmu/api/controller/ViewController.java index 0ee52f3e1..456f7a2c1 100644 --- a/api/src/main/java/dev/jianmu/api/controller/ViewController.java +++ b/api/src/main/java/dev/jianmu/api/controller/ViewController.java @@ -7,6 +7,7 @@ import dev.jianmu.api.vo.*; import dev.jianmu.application.dsl.DslParser; import dev.jianmu.application.exception.DataNotFoundException; import dev.jianmu.application.service.*; +import dev.jianmu.application.service.internal.WorkerInternalApplication; import dev.jianmu.application.service.internal.WorkflowInternalApplication; import dev.jianmu.infrastructure.storage.StorageService; import dev.jianmu.infrastructure.storage.vo.LogVo; @@ -16,6 +17,7 @@ import dev.jianmu.secret.aggregate.Namespace; import dev.jianmu.task.aggregate.InstanceParameter; import dev.jianmu.task.aggregate.Volume; import dev.jianmu.trigger.event.TriggerEvent; +import dev.jianmu.worker.aggregate.Worker; import dev.jianmu.workflow.aggregate.definition.Workflow; import dev.jianmu.workflow.aggregate.parameter.Parameter; import dev.jianmu.workflow.aggregate.process.ProcessStatus; @@ -59,6 +61,7 @@ public class ViewController { private final ProjectGroupApplication projectGroupApplication; private final CacheApplication cacheApplication; private final WorkflowInternalApplication workflowInternalApplication; + private final WorkerApplication workerApplication; public ViewController( ProjectApplication projectApplication, @@ -72,7 +75,8 @@ public class ViewController { StorageService storageService, ProjectGroupApplication projectGroupApplication, CacheApplication cacheApplication, - WorkflowInternalApplication workflowInternalApplication + WorkflowInternalApplication workflowInternalApplication, + WorkerApplication workerApplication ) { this.projectApplication = projectApplication; this.triggerApplication = triggerApplication; @@ -86,6 +90,7 @@ public class ViewController { this.projectGroupApplication = projectGroupApplication; this.cacheApplication = cacheApplication; this.workflowInternalApplication = workflowInternalApplication; + this.workerApplication = workerApplication; } @GetMapping("/parameters/types") @@ -632,4 +637,21 @@ public class ViewController { .isDefaultGroup(DEFAULT_PROJECT_GROUP_NAME.equals(projectGroup.getName())) .build(); } + + @GetMapping("/workers") + @Operation(summary = "查询Worker列表", description = "查询Worker列表") + public List findWorkerList() { + var workers = this.workerApplication.findAll(); + return workers.stream().map(worker -> WorkerVo.builder() + .id(worker.getId()) + .name(worker.getName()) + .type(worker.getType()) + .tags(worker.getTags()) + .os(worker.getOs()) + .arch(worker.getArch()) + .capacity(worker.getCapacity()) + .createdTime(worker.getCreatedTime()) + .build()) + .collect(Collectors.toList()); + } } diff --git a/api/src/main/java/dev/jianmu/api/vo/WorkerVo.java b/api/src/main/java/dev/jianmu/api/vo/WorkerVo.java new file mode 100644 index 000000000..e5b979330 --- /dev/null +++ b/api/src/main/java/dev/jianmu/api/vo/WorkerVo.java @@ -0,0 +1,25 @@ +package dev.jianmu.api.vo; + +import dev.jianmu.worker.aggregate.Worker; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Schema(description = "Worker定义VO") +public class WorkerVo { + private String id; + private String name; + private String tags; + private Integer capacity; + private String os; + private String arch; + private Worker.Type type; + private Worker.Status status; + private LocalDateTime createdTime; +} diff --git a/application/src/main/java/dev/jianmu/application/service/WorkerApplication.java b/application/src/main/java/dev/jianmu/application/service/WorkerApplication.java new file mode 100644 index 000000000..985ec9bdd --- /dev/null +++ b/application/src/main/java/dev/jianmu/application/service/WorkerApplication.java @@ -0,0 +1,22 @@ +package dev.jianmu.application.service; + +import dev.jianmu.worker.aggregate.Worker; +import dev.jianmu.worker.repository.WorkerRepository; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Slf4j +@Service +public class WorkerApplication { + private final WorkerRepository workerRepository; + + public WorkerApplication(WorkerRepository workerRepository) { + this.workerRepository = workerRepository; + } + + public List findAll() { + return this.workerRepository.findAll(); + } +} diff --git a/infrastructure/src/main/java/dev/jianmu/infrastructure/mapper/task/WorkerMapper.java b/infrastructure/src/main/java/dev/jianmu/infrastructure/mapper/task/WorkerMapper.java index eca0c2817..df9a82878 100644 --- a/infrastructure/src/main/java/dev/jianmu/infrastructure/mapper/task/WorkerMapper.java +++ b/infrastructure/src/main/java/dev/jianmu/infrastructure/mapper/task/WorkerMapper.java @@ -27,6 +27,10 @@ public interface WorkerMapper { @Update("update worker set tags = #{tags} where id = #{id}") void updateTag(Worker worker); + @Select("select * from worker") + @Result(column = "created_time", property = "createdTime") + List findAll(); + @Select("select * from worker where id = #{workerId}") @Result(column = "created_time", property = "createdTime") Optional findById(String workerId); @@ -41,6 +45,7 @@ public interface WorkerMapper { "") @Result(column = "created_time", property = "createdTime") List findByTypeInAndCreatedTimeLessThan(@Param("types") List types, @Param("createdTime") LocalDateTime createdTime); + @Select("