从零搭建一套属于自己的 CI/CD 系统,并完成第一个微服务的部署之旅
📖 Zadig
Zadig 是一款面向云原生场景的持续交付(Continuous Delivery) 平台,它深度整合了 Kubernetes、Docker、Git 等技术栈,为研发团队提供从代码提交到服务上线的全流程自动化能力。
简单来说,Zadig 就像一个智能调度中心 ------ 当你把代码推送到仓库时,它能自动触发构建、运行测试、滚动更新容器,并将新版本部署到指定环境,整个过程清晰可视,且支持多人协作与灰度发布。


🧠 Zadig 的核心架构与原理
要理解 Zadig 的工作方式,我们可以把它想象成一个「流水线工厂」,它的核心组件及协作关系如下:
#mermaid-svg-wl6vqe8BiDvJ7aMX{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-wl6vqe8BiDvJ7aMX .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-wl6vqe8BiDvJ7aMX .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-wl6vqe8BiDvJ7aMX .error-icon{fill:#552222;}#mermaid-svg-wl6vqe8BiDvJ7aMX .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-wl6vqe8BiDvJ7aMX .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-wl6vqe8BiDvJ7aMX .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-wl6vqe8BiDvJ7aMX .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-wl6vqe8BiDvJ7aMX .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-wl6vqe8BiDvJ7aMX .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-wl6vqe8BiDvJ7aMX .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-wl6vqe8BiDvJ7aMX .marker{fill:#333333;stroke:#333333;}#mermaid-svg-wl6vqe8BiDvJ7aMX .marker.cross{stroke:#333333;}#mermaid-svg-wl6vqe8BiDvJ7aMX svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-wl6vqe8BiDvJ7aMX p{margin:0;}#mermaid-svg-wl6vqe8BiDvJ7aMX .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-wl6vqe8BiDvJ7aMX .cluster-label text{fill:#333;}#mermaid-svg-wl6vqe8BiDvJ7aMX .cluster-label span{color:#333;}#mermaid-svg-wl6vqe8BiDvJ7aMX .cluster-label span p{background-color:transparent;}#mermaid-svg-wl6vqe8BiDvJ7aMX .label text,#mermaid-svg-wl6vqe8BiDvJ7aMX span{fill:#333;color:#333;}#mermaid-svg-wl6vqe8BiDvJ7aMX .node rect,#mermaid-svg-wl6vqe8BiDvJ7aMX .node circle,#mermaid-svg-wl6vqe8BiDvJ7aMX .node ellipse,#mermaid-svg-wl6vqe8BiDvJ7aMX .node polygon,#mermaid-svg-wl6vqe8BiDvJ7aMX .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-wl6vqe8BiDvJ7aMX .rough-node .label text,#mermaid-svg-wl6vqe8BiDvJ7aMX .node .label text,#mermaid-svg-wl6vqe8BiDvJ7aMX .image-shape .label,#mermaid-svg-wl6vqe8BiDvJ7aMX .icon-shape .label{text-anchor:middle;}#mermaid-svg-wl6vqe8BiDvJ7aMX .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-wl6vqe8BiDvJ7aMX .rough-node .label,#mermaid-svg-wl6vqe8BiDvJ7aMX .node .label,#mermaid-svg-wl6vqe8BiDvJ7aMX .image-shape .label,#mermaid-svg-wl6vqe8BiDvJ7aMX .icon-shape .label{text-align:center;}#mermaid-svg-wl6vqe8BiDvJ7aMX .node.clickable{cursor:pointer;}#mermaid-svg-wl6vqe8BiDvJ7aMX .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-wl6vqe8BiDvJ7aMX .arrowheadPath{fill:#333333;}#mermaid-svg-wl6vqe8BiDvJ7aMX .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-wl6vqe8BiDvJ7aMX .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-wl6vqe8BiDvJ7aMX .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-wl6vqe8BiDvJ7aMX .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-wl6vqe8BiDvJ7aMX .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-wl6vqe8BiDvJ7aMX .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-wl6vqe8BiDvJ7aMX .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-wl6vqe8BiDvJ7aMX .cluster text{fill:#333;}#mermaid-svg-wl6vqe8BiDvJ7aMX .cluster span{color:#333;}#mermaid-svg-wl6vqe8BiDvJ7aMX div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-wl6vqe8BiDvJ7aMX .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-wl6vqe8BiDvJ7aMX rect.text{fill:none;stroke-width:0;}#mermaid-svg-wl6vqe8BiDvJ7aMX .icon-shape,#mermaid-svg-wl6vqe8BiDvJ7aMX .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-wl6vqe8BiDvJ7aMX .icon-shape p,#mermaid-svg-wl6vqe8BiDvJ7aMX .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-wl6vqe8BiDvJ7aMX .icon-shape .label rect,#mermaid-svg-wl6vqe8BiDvJ7aMX .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-wl6vqe8BiDvJ7aMX .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-wl6vqe8BiDvJ7aMX .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-wl6vqe8BiDvJ7aMX :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 配置项目/触发工作流
调度任务
拉取代码
执行构建
推送镜像
部署应用
运行服务
交互
存储元数据
👤 开发者/运维
Zadig API Server
工作流引擎
📦 Git 仓库
🔧 构建器(Jenkins/Docker)
📋 镜像仓库
☸️ Kubernetes 集群
容器 Pod
🌐 Web UI
🗄️ 数据库
- API Server:系统的中枢神经,处理所有前端请求,管理项目、服务、工作流等资源。
- 工作流引擎:负责解析用户定义的任务步骤(拉代码 → 构建 → 测试 → 部署),按顺序调度执行。
- 构建器:可以集成自带的构建系统或外部 Jenkins,执行 Docker 镜像构建。
- Kubernetes 集群:作为运行底座,Zadig 通过调用 K8s API 完成 Pod 的创建、更新和回滚。
Zadig 的设计哲学是**「声明式配置 + 可视化编排」** ------ 用户通过 YAML 定义服务部署形态,通过 Web 界面拖拽工作流步骤,极大降低了云原生技术的使用门槛。
⚙️ 安装环境要求(Ubuntu 24.04)
本指南采用官方推荐的 All-in-One 快速安装模式,它会在一台 Ubuntu 机器上自动部署一套轻量级 Kubernetes 环境(基于 K3s),并安装所有 Zadig 组件。
🧪 该模式仅适合个人学习、功能体验或 POC 验证,不可用于生产环境(不支持升级、高可用和横向扩展)。
硬件与系统最低要求
| 资源项 | 推荐配置 | 最低配置 |
|---|---|---|
| CPU | 8 核 | 4 核 |
| 内存 | 16 GB | 8 GB(如果内存不足,安装可能失败) |
| 硬盘 | 50 GB 可用空间(SSD 更佳) | 30 GB |
| 操作系统 | Ubuntu 24.04(或 20.04、22.04) | 同左,建议全新最小化安装 |
| 网络 | 需访问外网(下载镜像和脚本) | 需访问 download.koderover.com 及 Docker Hub |
| 开放端口 | 30000~32767 范围内任意端口(如 30000) | 用于外部访问 Zadig 界面 |
安装前的必做准备
-
确保使用
root用户bashsudo -i # 切换到 root因为安装脚本会创建系统服务、修改网络配置,必须具有最高权限。
-
检查系统是否干净
如果之前安装过 Docker、K3s 或 Kubernetes,建议重装系统或彻底清理,避免端口与版本冲突。
-
关闭防火墙或开放端口(以 UFW 为例)
bashufw allow 30000/tcp # 开放你选定的访问端口 ufw allow 6443/tcp # 若需要外部访问 K8s API(可选) ufw reload
📥 安装步骤详解
第一步:下载安装脚本
bash
curl -L https://download.koderover.com/install?type=all-in-one -o all_in_one_install_quickstart.sh
chmod +x all_in_one_install_quickstart.sh
第二步:配置访问地址并执行
bash
# 将 <your_server_ip> 替换为这台机器的真实 IP(公网或内网均可)
export IP=<your_server_ip>
export PORT=30000 # 可改为 30000~32767 中的任意数字
# 开始安装(整个过程约 20~40 分钟,取决于网速)
./all_in_one_install_quickstart.sh
脚本执行期间,你会看到大量日志输出,包括:
- 安装 Docker、K3s
- 拉取约 30 个容器镜像(Zadig 各微服务、中间件等)
- 初始化数据库(MySQL)和存储(MinIO)
- 启动 Zadig 核心服务(API、UI、工作流控制器等)
第三步:验证安装结果
安装完成后,终端会显示类似 Zadig installed successfully! 的提示。此时运行:
bash
kubectl -n zadig get pods
你应该看到类似下面的输出(所有 Pod 状态为 Running 或 Completed):
| NAME | READY | STATUS | RESTARTS | AGE |
|---|---|---|---|---|
| zadig-api-xxx | 1/1 | Running | 0 | 5m |
| zadig-ui-xxx | 1/1 | Running | 0 | 5m |
| mysql-xxx | 1/1 | Running | 0 | 5m |
| minio-xxx | 1/1 | Running | 0 | 5m |
| ... | ... | ... | ... | ... |
第四步:登录系统
- 浏览器访问:
http://<你的服务器IP>:<你设置的PORT> - 默认账号 :
admin - 默认密码 :
Zadig123(首次登录后建议立即修改)





🧭 使用说明:核心概念与操作全景
Zadig 的使用围绕 "项目 → 服务 → 构建 → 工作流" 四个层次展开,我们可以用一个流程图来理解其关系:
#mermaid-svg-bIjnE3QcgJeJItIn{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-bIjnE3QcgJeJItIn .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-bIjnE3QcgJeJItIn .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-bIjnE3QcgJeJItIn .error-icon{fill:#552222;}#mermaid-svg-bIjnE3QcgJeJItIn .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-bIjnE3QcgJeJItIn .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-bIjnE3QcgJeJItIn .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-bIjnE3QcgJeJItIn .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-bIjnE3QcgJeJItIn .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-bIjnE3QcgJeJItIn .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-bIjnE3QcgJeJItIn .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-bIjnE3QcgJeJItIn .marker{fill:#333333;stroke:#333333;}#mermaid-svg-bIjnE3QcgJeJItIn .marker.cross{stroke:#333333;}#mermaid-svg-bIjnE3QcgJeJItIn svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-bIjnE3QcgJeJItIn p{margin:0;}#mermaid-svg-bIjnE3QcgJeJItIn .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-bIjnE3QcgJeJItIn .cluster-label text{fill:#333;}#mermaid-svg-bIjnE3QcgJeJItIn .cluster-label span{color:#333;}#mermaid-svg-bIjnE3QcgJeJItIn .cluster-label span p{background-color:transparent;}#mermaid-svg-bIjnE3QcgJeJItIn .label text,#mermaid-svg-bIjnE3QcgJeJItIn span{fill:#333;color:#333;}#mermaid-svg-bIjnE3QcgJeJItIn .node rect,#mermaid-svg-bIjnE3QcgJeJItIn .node circle,#mermaid-svg-bIjnE3QcgJeJItIn .node ellipse,#mermaid-svg-bIjnE3QcgJeJItIn .node polygon,#mermaid-svg-bIjnE3QcgJeJItIn .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-bIjnE3QcgJeJItIn .rough-node .label text,#mermaid-svg-bIjnE3QcgJeJItIn .node .label text,#mermaid-svg-bIjnE3QcgJeJItIn .image-shape .label,#mermaid-svg-bIjnE3QcgJeJItIn .icon-shape .label{text-anchor:middle;}#mermaid-svg-bIjnE3QcgJeJItIn .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-bIjnE3QcgJeJItIn .rough-node .label,#mermaid-svg-bIjnE3QcgJeJItIn .node .label,#mermaid-svg-bIjnE3QcgJeJItIn .image-shape .label,#mermaid-svg-bIjnE3QcgJeJItIn .icon-shape .label{text-align:center;}#mermaid-svg-bIjnE3QcgJeJItIn .node.clickable{cursor:pointer;}#mermaid-svg-bIjnE3QcgJeJItIn .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-bIjnE3QcgJeJItIn .arrowheadPath{fill:#333333;}#mermaid-svg-bIjnE3QcgJeJItIn .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-bIjnE3QcgJeJItIn .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-bIjnE3QcgJeJItIn .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-bIjnE3QcgJeJItIn .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-bIjnE3QcgJeJItIn .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-bIjnE3QcgJeJItIn .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-bIjnE3QcgJeJItIn .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-bIjnE3QcgJeJItIn .cluster text{fill:#333;}#mermaid-svg-bIjnE3QcgJeJItIn .cluster span{color:#333;}#mermaid-svg-bIjnE3QcgJeJItIn div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-bIjnE3QcgJeJItIn .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-bIjnE3QcgJeJItIn rect.text{fill:none;stroke-width:0;}#mermaid-svg-bIjnE3QcgJeJItIn .icon-shape,#mermaid-svg-bIjnE3QcgJeJItIn .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-bIjnE3QcgJeJItIn .icon-shape p,#mermaid-svg-bIjnE3QcgJeJItIn .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-bIjnE3QcgJeJItIn .icon-shape .label rect,#mermaid-svg-bIjnE3QcgJeJItIn .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-bIjnE3QcgJeJItIn .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-bIjnE3QcgJeJItIn .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-bIjnE3QcgJeJItIn :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 📁 项目
📦 服务1
📦 服务2
🔨 构建配置
☸️ K8s YAML
⏩ 工作流
🚀 部署到环境
✅ 测试
- 项目(Project):业务域的逻辑划分,例如"电商平台"、"用户中心"。一个项目可以包含多个微服务。
- 服务(Service) :代表一个独立的微服务,需要提供:
- K8s YAML:定义 Deployment、Service、Ingress 等资源(也可用 Helm Chart)。
- 构建配置:指定代码源、编译环境、构建脚本,最终产出容器镜像。
- 工作流(Workflow):定义从代码到部署的完整流水线。你可以串联多个阶段:拉取代码 → 构建镜像 → 推送仓库 → 更新 K8s 资源 → 运行集成测试。
- 环境(Environment):即 Kubernetes 命名空间,用于隔离不同阶段(dev、test、prod)的服务实例。
高级特性(快速了解)
- 灰度发布:支持金丝雀发布、蓝绿部署,通过控制流量比例实现平滑上线。
- 测试管理:内置接口测试、性能测试,可集成到工作流中自动执行。
- 权限管理:支持 RBAC,可对接企业 LDAP/OAuth。
🎬 动手演示:从零部署一个 Nginx 服务
接下来,我们通过一个实际案例,走通 创建项目 → 添加服务 → 配置构建 → 触发工作流 → 验证部署 的完整流程。
场景说明
我们将创建一个名为 demo-project 的项目,里面包含一个 nginx-demo 服务。该服务使用官方的 Nginx 镜像,并替换默认首页为自定义的 Hello from Zadig!。我们将在代码仓库中准备一个简单的 index.html 和 Dockerfile。
注:本演示中,我们使用一个公开的 GitHub 仓库(你可以 fork 或自己创建),但为了简化,我们直接在 Zadig 构建脚本中动态生成
index.html,免除外部仓库依赖。
步骤 1:创建项目
- 登录 Zadig Web UI。
- 左侧导航栏点击 "项目" → "新建项目"。
- 填写:
- 项目名称 :
demo-project - 项目类型 :选择
K8s YAML 项目(这是最通用的模式)
- 项目名称 :
- 点击 "立即新建",进入项目向导。
步骤 2:添加服务并编写 K8s YAML
在向导的 "服务" 页面,点击 "新建服务":
- 服务名称 :
nginx-demo - K8s YAML 内容(粘贴以下内容):
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-demo
labels:
app: nginx-demo
spec:
replicas: 1
selector:
matchLabels:
app: nginx-demo
template:
metadata:
labels:
app: nginx-demo
spec:
containers:
- name: nginx
image: nginx:alpine # 稍后会被构建的新镜像覆盖
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-demo-svc
spec:
selector:
app: nginx-demo
ports:
- protocol: TCP
port: 80
targetPort: 80
type: ClusterIP # 内部访问,如需外部访问可改为 NodePort
点击 "保存"。
步骤 3:配置构建(让服务拥有"灵魂")
现在我们需要告诉 Zadig 如何把代码变成镜像。回到服务列表,点击 nginx-demo 旁的 "配置构建"。
构建基础信息
| 字段 | 填写内容 |
|---|---|
| 构建名称 | nginx-demo-build(自动生成) |
| 构建环境 | 选择 Ubuntu 20.04(兼容性好) |
| 代码源 | 选择你已集成的代码仓库(若未集成,先去"系统设置" → "集成管理"添加 GitHub/GitLab) |
| 代码库地址 | 填写你的仓库地址,例如 https://github.com/yourname/nginx-demo.git(本演示可填任意有效地址,因为我们用内联脚本生成文件) |
| 默认分支 | main 或 master |
💡 如果不想依赖外部仓库 :可以勾选 "不使用代码库" ,但为了展示完整流程,我们建议你准备一个最小仓库,里面只放一个空的
README.md即可(Zadig 会克隆下来)。
构建脚本
在 "构建脚本" 文本框中,输入以下命令:
bash
#!/bin/bash
set -e
# 1. 如果代码目录不存在,则创建一个(防止克隆失败)
mkdir -p $WORKSPACE/nginx-demo
cd $WORKSPACE/nginx-demo
# 2. 生成自定义首页
cat > index.html <<EOF
<!DOCTYPE html>
<html>
<head><title>Zadig Demo</title></head>
<body>
<h1>🚀 Hello from Zadig!</h1>
<p>Deployed at $(date)</p>
</body>
</html>
EOF
# 3. 生成 Dockerfile
cat > Dockerfile <<EOF
FROM nginx:alpine
COPY index.html /usr/share/nginx/html/
EOF
# 4. 构建并推送镜像(需提前配置镜像仓库)
# 假设你已集成 Harbor 或 Docker Hub,这里用变量代替
docker build -t $REGISTRY/$PROJECT/$SERVICE:$BUILD_NUMBER .
docker push $REGISTRY/$PROJECT/$SERVICE:$BUILD_NUMBER
# 5. 输出镜像信息供后续部署使用
echo "IMAGE=$REGISTRY/$PROJECT/$SERVICE:$BUILD_NUMBER" > $WORKSPACE/image.env
⚠️ 实际使用时,你需要在 "系统设置" 中配置 "镜像仓库" (如 Docker Hub、阿里云 ACR 等),并将认证信息填入,Zadig 会自动注入
$REGISTRY等变量。
保存构建配置
点击 "保存" ,然后点击 "下一步" 完成服务配置。
步骤 4:配置工作流
在项目主页,切换到 "工作流" 标签页,点击 "新建工作流":
- 工作流名称 :
deploy-nginx - 触发方式 :选择 "手动触发"(也可以配置 Webhook 自动触发)
- 阶段添加 :点击添加 "构建" 阶段,选择我们刚才创建的构建
nginx-demo-build;再添加 "部署" 阶段,选择部署到当前项目的default环境(即命名空间)。
部署阶段的配置会自动关联服务的 K8s YAML,并用构建出的新镜像替换
image字段。
点击 "保存"。
步骤 5:执行工作流并观察
- 在工作流列表页面,点击
deploy-nginx右侧的 "执行" 按钮。 - 在弹出的对话框中,选择要部署的服务版本(默认使用最新代码),然后点击 "执行"。
- 页面会跳转到执行详情,你可以实时查看每一步的日志:
- 克隆代码
- 构建镜像(会显示 docker build 输出)
- 推送镜像
- 应用 K8s YAML(实际调用了
kubectl apply)
- 等待所有阶段显示 ✅ 成功,即表示部署完成。
步骤 6:验证服务运行
由于我们创建的 Service 类型是 ClusterIP,只能在集群内部访问。为了快速验证,我们可以通过端口转发将 Pod 的 80 端口映射到本地:
bash
# 获取 Pod 名称
kubectl -n demo-project get pods | grep nginx-demo
# 转发端口(假设 Pod 名为 nginx-demo-xxxxx)
kubectl -n demo-project port-forward pod/nginx-demo-xxxxx 8080:80
然后在浏览器访问 http://localhost:8080,你应该会看到大大的 "🚀 Hello from Zadig!"。
或者,你也可以修改 Service 类型为 NodePort,再通过 kubectl -n demo-project get svc 查看外部访问端口。



📊 关键配置速查表
| 配置项 | 位置 | 作用 |
|---|---|---|
| 镜像仓库凭证 | 系统设置 → 镜像仓库 | 让 Zadig 拥有 push/pull 权限 |
| 代码仓库集成 | 系统设置 → 代码集成 | 支持 GitHub/GitLab/Gerrit 等 |
| 环境管理 | 项目 → 环境 | 创建/删除/切换命名空间 |
| 服务模板 | 项目 → 服务 → 模板 | 可复用常见 Helm Chart 或 YAML |
| 工作流触发器 | 工作流 → 触发器 | 设置 Git Push 或定时触发 |
🧩 常见问题与排错
- 安装失败(内存不足):All-in-One 需要至少 8GB 内存,可尝试增加 swap 或关闭其他进程。
- 镜像拉取超时 :国内网络可配置 Docker 镜像加速器,并在安装前设置
export DOCKER_REGISTRY_MIRROR=https://xxx.mirror.aliyuncs.com。 - 登录后看不到项目 :检查
kubectl -n zadig get pods是否所有组件正常运行,尤其是zadig-api。 - 构建失败(Docker 命令未找到) :All-in-One 已内置 Docker,一般不会出现,若出现则手动安装
docker.io。
🎯 总结
Zadig 的能力远不止于此,可以探索:
- 集成 SonarQube 进行代码质量扫描
- 配置多环境(dev/staging/prod)隔离
- 设置自动化测试与质量门禁
- 利用灰度发布实现无风险上线