云原生持续交付平台 Zadig 在 Ubuntu 24.04 上的部署及使用指南

从零搭建一套属于自己的 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 界面

安装前的必做准备

  1. 确保使用 root 用户

    bash 复制代码
    sudo -i   # 切换到 root

    因为安装脚本会创建系统服务、修改网络配置,必须具有最高权限。

  2. 检查系统是否干净

    如果之前安装过 Docker、K3s 或 Kubernetes,建议重装系统或彻底清理,避免端口与版本冲突。

  3. 关闭防火墙或开放端口(以 UFW 为例)

    bash 复制代码
    ufw 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 状态为 RunningCompleted):

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.htmlDockerfile

注:本演示中,我们使用一个公开的 GitHub 仓库(你可以 fork 或自己创建),但为了简化,我们直接在 Zadig 构建脚本中动态生成 index.html,免除外部仓库依赖。


步骤 1:创建项目

  1. 登录 Zadig Web UI。
  2. 左侧导航栏点击 "项目""新建项目"
  3. 填写:
    • 项目名称demo-project
    • 项目类型 :选择 K8s YAML 项目(这是最通用的模式)
  4. 点击 "立即新建",进入项目向导。

步骤 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(本演示可填任意有效地址,因为我们用内联脚本生成文件)
默认分支 mainmaster

💡 如果不想依赖外部仓库 :可以勾选 "不使用代码库" ,但为了展示完整流程,我们建议你准备一个最小仓库,里面只放一个空的 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:执行工作流并观察

  1. 在工作流列表页面,点击 deploy-nginx 右侧的 "执行" 按钮。
  2. 在弹出的对话框中,选择要部署的服务版本(默认使用最新代码),然后点击 "执行"
  3. 页面会跳转到执行详情,你可以实时查看每一步的日志:
    • 克隆代码
    • 构建镜像(会显示 docker build 输出)
    • 推送镜像
    • 应用 K8s YAML(实际调用了 kubectl apply
  4. 等待所有阶段显示 ✅ 成功,即表示部署完成。

步骤 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)隔离
  • 设置自动化测试与质量门禁
  • 利用灰度发布实现无风险上线
相关推荐
哎呦,帅小伙哦1 小时前
Linux 系统监控核心:/proc/stat 文件全解析
linux·服务器
云川之下2 小时前
【k8s】sriov‑device‑plugin、sriov‑network‑config‑daemon详解
云原生·容器·kubernetes
爱和冰阔落2 小时前
【Linux】两个毫无关系的进程怎么通信?命名管道 FIFO 从原理到 Server/Client 实战
android·linux·数据库·c++·vim
ltl2 小时前
Windows 内核与 Linux 的关键差异
linux
ltl2 小时前
CentOS 停服与生态重组:Rocky、Alma、openEuler、龙蜥
linux
Anesthesia丶3 小时前
PromoxVE安装笔记
笔记·ubuntu·server·promox
ltl10 小时前
eBPF 可观测性全景:bcc、bpftrace、libbpf 的工程路径
linux
2401_8685347810 小时前
数仓开发落地手册
linux·运维
正在走向自律12 小时前
使用atop工具监控Linux系统指标
linux·运维·php·实时监控·atop分析内存