using Dpz.Core.EnumLibrary.Pipeline;
namespace Dpz.Core.Public.Entity.Pipeline;
/// <summary>
/// 构建执行的单个步骤(服务器 x 项目 的一个日志面板)
/// </summary>
public class PipelineStep
{
/// <summary>
/// 阶段
/// </summary>
[BsonRepresentation(BsonType.String)]
public PipelineStage Stage { get; set; }
/// <summary>
/// 项目(None 表示「总览」,即拉取代码等通用输出)
/// </summary>
[BsonRepresentation(BsonType.String)]
public BuildProject Project { get; set; }
/// <summary>
/// 服务器(构建机 Host 或部署服务器别名)
/// </summary>
public string? Server { get; set; }
/// <summary>
/// 步骤状态
/// </summary>
[BsonRepresentation(BsonType.String)]
public PipelineStatus Status { get; set; }
/// <summary>
/// 步骤开始时间
/// </summary>
[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public DateTime? StartTime { get; set; }
/// <summary>
/// 步骤结束时间
/// </summary>
[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public DateTime? EndTime { get; set; }
/// <summary>
/// 步骤耗时(毫秒)
/// </summary>
public long? DurationMs { get; set; }
/// <summary>
/// 步骤失败原因
/// </summary>
public string? Error { get; set; }
/// <summary>
/// 终端输出行
/// </summary>
public List<string> Lines { get; set; } = [];
}
⚠⚠ 以下内容为AI分析的结果,请根据实际情况进行判断。
这段代码定义了一个与 CI/CD(持续集成/持续部署)流水线执行相关的实体类 PipelineStep,它用于表示流水线中某个具体步骤的执行记录,并且该实体很可能用于 MongoDB 持久化(因为用到了 Bson* 特性)。下面逐一拆解。
1. 命名空间与引用
- 命名空间:
Dpz.Core.Public.Entity.Pipeline
属于Dpz.Core项目中的Public实体层,专门服务于流水线(Pipeline)功能。 - 引用了
Dpz.Core.EnumLibrary.Pipeline,说明该类用到了PipelineStage、BuildProject、PipelineStatus等枚举类型。
2. 类说明
public class PipelineStep
这个类用于描述构建执行的单个步骤。注释中写得很清楚:
(服务器 x 项目 的一个日志面板)
意思是:一个步骤可以理解为在某个服务器上,针对某个项目执行某阶段任务后产生的日志集合。它通常对应流水线中的一个原子操作,例如拉取代码、编译、部署、测试等。
3. 属性详解
① Stage —— 阶段
[BsonRepresentation(BsonType.String)]
public PipelineStage Stage { get; set; }
PipelineStage是一个枚举,表示当前步骤属于哪个阶段(如检查、构建、部署等)。BsonRepresentation(BsonType.String)告诉 MongoDB:当存储该枚举时,使用枚举的字符串名称而非数字索引,这样在数据库里更容易阅读和调试。
② Project —— 项目
[BsonRepresentation(BsonType.String)]
public BuildProject Project { get; set; }
BuildProject是一个枚举,代表被构建/部署的具体项目。- 注释说:
None 表示「总览」,即拉取代码等通用输出
说明存在一个None值,用来表示不针对特定项目,而是整个流水线的通用动作(比如 git pull、环境准备等)。 - 同样以字符串形式存入 MongoDB。
③ Server —— 服务器
public string? Server { get; set; }
- 字符串类型,允许
null。 - 注释表示:
构建机 Host 或部署服务器别名
也就是记录这个步骤是在哪台机器上执行的。可能是构建机的地址,也可能是部署目标服务器的名称。
④ Status —— 步骤状态
[BsonRepresentation(BsonType.String)]
public PipelineStatus Status { get; set; }
PipelineStatus是另一个枚举,表示步骤当前状态,例如成功、失败、运行中等。- 同样以字符串形式存储。
⑤ StartTime / EndTime —— 开始/结束时间
[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public DateTime? StartTime { get; set; }
[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public DateTime? EndTime { get; set; }
- 两个可空的
DateTime,分别记录步骤的开始和结束时间。 BsonDateTimeOptions(Kind = DateTimeKind.Local)指定 MongoDB 在序列化/反序列化时将该时间作为本地时间处理,避免时区混乱。?允许为null,例如尚未结束的步骤EndTime就应为空。
⑥ DurationMs —— 耗时
public long? DurationMs { get; set; }
long?可空长整型,单位是毫秒,记录步骤总耗时。- 可以由
EndTime - StartTime计算得出,也可以单独存储以便快速查询。
⑦ Error —— 失败原因
public string? Error { get; set; }
- 字符串,可为
null。 - 当步骤失败时,这里保存失败的原因或错误信息,便于排查问题。
⑧ Lines —— 终端输出行
public List<string> Lines { get; set; } = [];
List<string>类型,保存该步骤执行过程中输出的日志行(终端文本)。- 初始化使用 C# 12 的集合表达式
[],等价于new List<string>(),简洁且高效。 - 注释说“终端输出行”,意味着这个列表就是日志面板中逐行显示的内容。
4. 特性(Attribute)补充说明
Bson* 系列特性来自 MongoDB 的 .NET 驱动程序(MongoDB.Bson 命名空间),用于控制实体如何映射到 BSON 文档。
[BsonRepresentation(BsonType.String)]:让枚举以字符串存储,提高可读性(例如存"Success"而不是0)。[BsonDateTimeOptions(Kind = DateTimeKind.Local)]:指定时间字段的DateTimeKind为本地时间,保证时区信息不丢失。
这些特性让实体既能自然地在 C# 中使用,又能与 MongoDB 的文档结构良好匹配。
5. 整体用途
PipelineStep 很可能是流水线日志模块的核心实体。
每次构建运行会产生多个 PipelineStep,每个步骤记录:
- 在哪个服务器上
- 针对哪个项目
- 处于哪个阶段
- 运行状态和耗时
- 输出日志和错误信息
这种设计可以支持前端仪表盘按“服务器 × 项目”分组展示步骤日志,或者按流水线运行 ID 查询某次构建的完整过程。
6. 小结
- 这是一个 MongoDB 持久化用的实体类,用于描述流水线中的单个执行步骤。
- 它使用枚举加字符串转换、可空时间、耗时、错误信息和日志行集合,完整覆盖了日志面板所需的数据。
- 代码简洁,符合现代 C# 风格,使用集合表达式初始化,配合 MongoDB 特性,方便序列化和存储。
如果需要进一步解释某个具体字段如何被写入或读取,或给出使用示例,也可以继续提问。
AI 正在分析代码…
评论加载中...