现代交付链路涉及 SCM、CI runner、制品仓库、策略检查、部署引擎、云目标、日志系统和审计记录。各系统独立维护各自的 state 和 identity 语义,导致交付状态碎片化,artifact identity、approval record 和 rollback context 缺乏统一视图。
Nivora 提供控制平面模型:PipelineRun、Release、DeploymentRun、Artifact、Environment、Policy、AuditLog。与底层工具集成,而非替代,将各系统的 delivery state 纳入统一查询和审计范围。
现状
- 部署状态分散在各子系统
- 制品依赖 mutable tag,identity 不可追溯
- 审批和策略门控缺乏统一标准
- 回滚时上下文丢失
Nivora
- 统一 delivery timeline 查询接口
- 制品绑定不可变 digest / 签名
- 策略和审批作为一等模型实体
- 每次部署生成完整 audit trail
控制平面 / 执行平面分离
控制平面负责 API、state、orchestration、policy 和 audit。执行平面负责 job execution、log capture、heartbeat 和 runtime result reporting。API Server 不直接执行部署作业。
Runner ≠ Executor
Runner 定义作业执行的上下文和环境(who),Executor 定义具体的执行机制(how)。该分离使编排层无需为每种执行环境重写调度逻辑。
Runner
- Local Runner
- Host Runner
- Kubernetes Runner
- GitOps Runner
- Cloud Runner
Executor
- Shell Executor
- SSH Executor
- K8s Job Executor
- Helm / YAML Executor
- Argo CD Executor
- Webhook Executor
Ports & Adapters
外部系统通过 Port 接口接入核心。Use case 依赖 capability interface,不依赖具体厂商 SDK。
端到端交付流
从 trigger 到 timeline 的完整 delivery lifecycle。当前实现覆盖 shell-based PipelineRun 子集。
核心概念
领域模型覆盖交付全生命周期。
Application
Nivora 管理的产品或服务实体
Environment
交付上下文(dev / staging / prod)
Pipeline
可复用的 stage / job / step 定义
PipelineRun
Pipeline 的一次执行实例
Release
版本化交付意图,关联不可变制品
DeploymentRun
发布或部署计划的一次执行
Runner
接收并执行作业的组件
Executor
Runner 使用的具体执行机制
Policy
允许、拒绝或要求审批的门控
AuditLog
关键操作的持久化记录
Event
交付生命周期中的运行时事件
LogChunk
有序的 stdout / stderr 日志段
技术栈
Go 1.22,最小化外部依赖。
核心
- Go 1.22
- go-chi/chi (HTTP router)
- spf13/cobra (CLI)
- log/slog (structured logging)
存储
- jackc/pgx (PostgreSQL)
- goose / golang-migrate (migrations)
- S3 / MinIO / local (object store)
- Memory / NATS (event bus)
协议
- REST + OpenAPI
- AsyncAPI (events)
- Protobuf (gRPC)
- CloudEvents (envelopes)
依赖原则
模块化单体
以模块化单体架构起步,内部边界稳定后支持服务拆分。四个二进制对应四个独立运行时角色。
nivora-server
API Server
控制平面入口。REST / gRPC API、state management、policy decision、audit logging。
nivora-worker
Worker
消费队列中的 PipelineRun,构建 runtime plan,分发给 Runner。
nivora-runner
Runner
接收作业,委托 Executor 执行,上报 logs、heartbeats 和 status。
nivora
CLI
本地操作入口。pipeline run、deployment plan、release deploy。
目录结构
分层规则
Domain 定义含义。Use case 定义编排。Ports 定义契约。Adapters 实现外部集成。Infra 提供技术管道。API 处理传输。
当前能力状态
当前处于 beta-candidate foundation 阶段。以下列表反映代码和文档的实际状态,不夸大已完成功能。
部署
支持 Docker Compose、Helm Chart 和 Kubernetes manifests。当前阶段适用于本地开发和评估。
Docker Compose
Server + worker + runner + PostgreSQL 本地组合。
Helm Chart
Production profile、rolling update、health probes。
Kubernetes
Native YAML manifests。
$ make build
go build ./cmd/...
✓ nivora-server
✓ nivora-worker
✓ nivora-runner
✓ nivora CLI
$ make run-server
Server ready at :8080
$ go run ./cmd/nivora pipeline run --local
examples/pipelines/simple-shell.yamlAPI
REST + OpenAPI。未实现端点返回 not_implemented 结构化响应,不返回 mock 数据。