36-environment-module-architecture by TencentBlueKing
Environment 构建机环境模块架构指南,涵盖构建机节点管理、环境变量配置、节点状态监控、第三方构建机接入。当用户开发环境管理功能、配置构建机节点、处理环境变量或接入第三方构建机时使用。
Coding
2.5K Stars
514 Forks
Updated Jan 9, 2026, 09:52 AM
Why Use This
This skill provides specialized capabilities for TencentBlueKing's codebase.
Use Cases
- Developing new features in the TencentBlueKing repository
- Refactoring existing code to follow TencentBlueKing standards
- Understanding and working with TencentBlueKing's codebase structure
Skill Snapshot
Auto scan of skill assets. Informational only.
Valid SKILL.md
Checks against SKILL.md specification
Source & Community
Skill Stats
SKILL.md 260 Lines
Total Files 1
Total Size 0 B
License NOASSERTION
---
name: 36-environment-module-architecture
description: Environment 构建机环境模块架构指南,涵盖构建机节点管理、环境变量配置、节点状态监控、第三方构建机接入。当用户开发环境管理功能、配置构建机节点、处理环境变量或接入第三方构建机时使用。
---
# Environment 构建机环境模块架构指南
> **模块定位**: Environment 是 BK-CI 的构建机环境管理模块,负责管理构建节点(Node)、构建环境(Env)、第三方构建机(Agent)的注册、状态监控、分组等功能。
## 一、模块整体结构
### 1.1 子模块划分
```
src/backend/ci/core/environment/
├── api-environment/ # API 接口定义层
│ └── src/main/kotlin/com/tencent/devops/environment/
│ ├── api/ # REST API 接口
│ │ └── thirdpartyagent/ # 第三方构建机接口
│ ├── constant/ # 常量定义
│ ├── exception/ # 异常定义
│ └── pojo/ # 数据对象
│ ├── enums/ # 枚举
│ ├── slave/ # 从属节点
│ └── thirdpartyagent/ # 第三方构建机
│
├── biz-environment/ # 业务逻辑层
├── model-environment/ # 数据模型层
└── boot-environment/ # Spring Boot 启动模块
```
### 1.2 核心概念
| 概念 | 说明 |
|------|------|
| **Node(节点)** | 构建机节点,可以是物理机、虚拟机或容器 |
| **Env(环境)** | 节点分组,一个环境包含多个节点 |
| **Agent** | 第三方构建机上运行的代理程序 |
## 二、核心枚举
### 2.1 节点类型
```kotlin
enum class NodeType(val type: String) {
THIRDPARTY("thirdPartyAgentId"), // 第三方构建机
CMDB("cmdb"), // CMDB 导入
DEVCLOUD("devcloud"), // DevCloud
OTHER("other"), // 其他
}
```
### 2.2 节点状态
```kotlin
enum class NodeStatus(val status: String) {
NORMAL("NORMAL"), // 正常
ABNORMAL("ABNORMAL"), // 异常
DELETED("DELETED"), // 已删除
CREATING("CREATING"), // 创建中
RUNNING("RUNNING"), // 运行中
STARTING("STARTING"), // 启动中
STOPPING("STOPPING"), // 停止中
STOPPED("STOPPED"), // 已停止
RESTARTING("RESTARTING"), // 重启中
DELETING("DELETING"), // 删除中
BUILD_FAIL("BUILD_FAIL"), // 构建失败
}
```
### 2.3 环境类型
```kotlin
enum class EnvType(val type: String) {
DEV("DEV"), // 开发环境
TEST("TEST"), // 测试环境
BUILD("BUILD"), // 构建环境
}
```
### 2.4 操作系统类型
```kotlin
enum class OsType(val os: String) {
LINUX("LINUX"),
MACOS("MACOS"),
WINDOWS("WINDOWS"),
}
```
## 三、核心数据库表
### 3.1 节点表
| 表名 | 说明 | 核心字段 |
|------|------|----------|
| `T_NODE` | 节点信息表 | `NODE_ID`, `PROJECT_ID`, `NODE_IP`, `NODE_NAME`, `NODE_STATUS`, `NODE_TYPE` |
| `T_ENV` | 环境信息表 | `ENV_ID`, `PROJECT_ID`, `ENV_NAME`, `ENV_TYPE`, `ENV_VARS` |
| `T_ENV_NODE` | 环境-节点关联表 | `ENV_ID`, `NODE_ID`, `PROJECT_ID`, `ENABLE_NODE` |
### 3.2 第三方构建机表
| 表名 | 说明 | 核心字段 |
|------|------|----------|
| `T_ENVIRONMENT_THIRDPARTY_AGENT` | 第三方构建机信息 | `ID`, `NODE_ID`, `PROJECT_ID`, `HOSTNAME`, `IP`, `OS`, `STATUS`, `SECRET_KEY` |
| `T_ENVIRONMENT_THIRDPARTY_AGENT_ACTION` | 构建机操作记录 | `AGENT_ID`, `PROJECT_ID`, `ACTION`, `ACTION_TIME` |
| `T_ENVIRONMENT_AGENT_PIPELINE` | 构建机流水线关联 | `AGENT_ID`, `PROJECT_ID`, `PIPELINE` |
### 3.3 其他表
| 表名 | 说明 |
|------|------|
| `T_ENVIRONMENT_SLAVE_GATEWAY` | 从属网关配置 |
| `T_ENV_SHARE_PROJECT` | 环境共享项目 |
| `T_PROJECT_CONFIG` | 项目配置 |
| `T_NODE_TAG` | 节点标签 |
### 3.4 字段说明
> ⚠️ **重要**: `PROJECT_ID` 是 `T_PROJECT.english_name`
## 四、API 接口速查
### 4.1 用户接口
| 类名 | 路径前缀 | 职责 |
|------|----------|------|
| `UserEnvironmentResource` | `/user/environment` | 用户环境管理 |
| `UserNodeResource` | `/user/node` | 用户节点管理 |
| `UserThirdPartyAgentResource` | `/user/thirdPartyAgent` | 用户第三方构建机管理 |
| `UserNodeTagResource` | `/user/node/tag` | 节点标签管理 |
### 4.2 服务间接口
| 类名 | 路径前缀 | 职责 |
|------|----------|------|
| `ServiceEnvironmentResource` | `/service/environment` | 服务间环境查询 |
| `ServiceNodeResource` | `/service/node` | 服务间节点查询 |
| `ServiceThirdPartyAgentResource` | `/service/thirdPartyAgent` | 服务间构建机查询 |
### 4.3 构建机接口
| 类名 | 路径前缀 | 职责 |
|------|----------|------|
| `BuildAgentThirdPartyAgentResource` | `/build/agent/thirdPartyAgent` | Agent 心跳上报 |
| `BuildAgentThirdPartyAgentUpgradeResource` | `/build/agent/upgrade` | Agent 升级 |
## 五、核心流程
### 5.1 第三方构建机安装流程
```
用户在界面创建构建机
│
▼
UserThirdPartyAgentResource.generateLink()
│
├─► 生成安装脚本和 Secret Key
│
└─► 返回安装命令
用户在目标机器执行安装脚本
│
▼
Agent 启动并注册
│
▼
BuildAgentThirdPartyAgentResource.agentStartup()
│
├─► 验证 Secret Key
├─► 创建 Agent 记录
└─► 返回 Agent ID
```
### 5.2 Agent 心跳流程
```
Agent 定期发送心跳
│
▼
BuildAgentThirdPartyAgentResource.agentHeartbeat()
│
├─► 更新 Agent 状态
├─► 检查是否有待执行任务
└─► 返回心跳响应(包含任务信息)
```
### 5.3 环境创建流程
```
用户创建环境
│
▼
UserEnvironmentResource.create()
│
├─► 参数校验
├─► 创建环境记录
└─► 关联节点(如有)
```
## 六、与其他模块的关系
```
┌─────────────────────────────────────────────────────────────────┐
│ Environment 模块关系 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌───────────┐ ┌───────────┐ │
│ │ process │ │ dispatch │ │
│ │(流水线配置)│ │(构建调度) │ │
│ └─────┬─────┘ └─────┬─────┘ │
│ │ │ │
│ └────────┬───────┘ │
│ ▼ │
│ ┌───────────────┐ │
│ │ environment │ │
│ └───────┬───────┘ │
│ │ │
│ ┌───────┴───────┐ │
│ ▼ ▼ │
│ ┌───────────┐ ┌───────────┐ │
│ │ project │ │ auth │ │
│ └───────────┘ └───────────┘ │
│ │
│ 被依赖:agent(构建机注册和心跳) │
└─────────────────────────────────────────────────────────────────┘
```
## 七、服务间调用示例
```kotlin
// Dispatch 模块获取环境下的 Agent 列表
client.get(ServiceThirdPartyAgentResource::class).getAgentsByEnvId(
projectId = projectId, // english_name
envId = envId
)
// Process 模块获取节点信息
client.get(ServiceNodeResource::class).listByHashIds(
userId = userId,
projectId = projectId,
nodeHashIds = nodeHashIds
)
```
## 八、常见问题
**Q: Agent 如何与服务端通信?**
A: Agent 通过 HTTP 心跳与 Environment 服务通信,定期上报状态并获取任务。
**Q: 环境和节点的关系?**
A: 一个环境可以包含多个节点,一个节点也可以属于多个环境。
**Q: 如何判断 Agent 是否在线?**
A: 检查 `T_ENVIRONMENT_THIRDPARTY_AGENT.STATUS` 字段和最近心跳时间。
---
**版本**: 1.0.0 | **更新日期**: 2025-12-11
Name Size