4. 环境准备:搭建CI/CD实验环境
本章聚焦于构建一套可复现的CI/CD实验环境,涵盖容器运行时、Kubernetes集群、代码仓库及Webhook联动配置。所有操作均基于开源工具,确保你能够在本地或云环境中快速复现后续流水线实验。
4.1 环境全景概览
实验环境由四个核心层组成,各层之间的依赖关系与数据流向如下图所示:
环境对齐建议:如果你使用云厂商的托管Kubernetes(如ACK、EKS、GKE),可跳过4.2节本地集群安装,但需确保kubectl上下文正确指向远程集群。
4.2 安装Docker容器运行时
Docker是CI/CD流水线中最基础的镜像构建与容器执行环境。以下步骤适用于Ubuntu 22.04 LTS,其他发行版请参考官方文档调整包管理器命令。
| 步骤 | 命令 / 操作 | 说明 |
|---|---|---|
| 1 | sudo apt-get update |
更新软件包索引 |
| 2 | sudo apt-get install ca-certificates curl gnupg lsb-release |
安装依赖工具 |
| 3 | curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg |
添加Docker官方GPG密钥 |
| 4 | sudo apt-get install docker-ce docker-ce-cli containerd.io |
安装Docker引擎 |
| 5 | sudo usermod -aG docker $USER |
将当前用户加入docker组(需重新登录生效) |
| 6 | docker --version && docker run hello-world |
验证安装成功 |
常见陷阱:如果使用rootless模式运行Docker,请确保
/etc/docker/daemon.json中配置了正确的存储驱动(推荐overlay2),否则镜像构建可能因磁盘空间不足而失败。
4.3 部署Kubernetes集群(Minikube)
为降低实验门槛,我们使用Minikube搭建单节点Kubernetes集群。Minikube支持多种驱动(Docker、KVM、VirtualBox),推荐使用Docker驱动以保持环境一致性。
# 下载并安装 Minikube(v1.32+)
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
# 启动集群(指定驱动为 docker,分配 4GB 内存)
minikube start --driver=docker --memory=4096 --cpus=2
# 验证集群状态
kubectl cluster-info
kubectl get nodes -o wide
集群启动后,需要启用必要的附加组件以支持CI/CD场景:
- Ingress Controller:
minikube addons enable ingress,用于外部流量接入。 - Metrics Server:
minikube addons enable metrics-server,提供Pod资源监控数据。 - Dashboard(可选):
minikube addons enable dashboard,提供可视化界面。
生产环境替代方案:若需模拟多节点集群,可使用
kind(Kubernetes in Docker)或 k3d(Rancher K3s in Docker),两者均支持通过配置文件快速定义集群拓扑。
4.4 配置代码仓库与Webhook
Webhook是CI/CD流水线的触发器。当开发者向仓库推送代码或创建合并请求时,代码平台会向CI引擎发送HTTP回调,触发流水线执行。以下以GitLab为例进行配置。
4.4.1 创建测试项目并配置访问令牌
# 在 GitLab 中创建新项目(示例:cicd-demo)
# 生成 Personal Access (权限:api, read_repository, write_repository)
# 将令牌保存至 CI 引擎的凭据管理器中
# 克隆项目到本地
git clone https://gitlab.example.com/yourname/cicd-demo.git
cd cicd-demo
# 创建基础文件结构
mkdir -p src/ k8s/
echo "print('Hello CI/CD')" > src/app.py
cat <<EOF > Dockerfile
FROM python:3.11-slim
WORKDIR /app
COPY src/ .
CMD ["python", "app.py"]
EOF
4.4.2 配置Webhook回调地址
在GitLab项目设置中,进入 Settings → Webhooks,填写以下参数:
| 字段 | 值 | 说明 |
|---|---|---|
| URL | http://jenkins.example.com/project/cicd-demo |
CI引擎的Webhook接收端点(Jenkins为/project/<job-name>) |
| Secret | 自定义随机字符串 | 用于验证请求来源,防止伪造回调 |
| Trigger | Push events / Merge request events | 选择触发流水线的事件类型 |
| SSL Verification | Enable / Disable | 内网环境可暂时禁用 |
调试技巧:配置完成后,点击 Test → Push events 发送测试请求。在CI引擎端查看访问日志(如Jenkins的
/var/log/jenkins/jenkins.log),确认Webhook是否成功到达。
4.4.3 验证Webhook联动
在本地仓库中执行一次推送操作,观察CI引擎是否自动触发流水线:
# 修改代码并推送
echo "# 新增功能模块" >> src/app.py
git add .
git commit -m "feat: 触发CI流水线测试"
git push origin main
# 预期结果:
# 1. GitLab 显示 Webhook 最近投递状态为 200 OK
# 2. Jenkins/GitLab Runner 开始执行对应 Job
# 3. 流水线日志中显示 "Started by GitLab push by yourname"
4.5 环境验证清单
完成上述步骤后,请逐项确认以下检查点,确保实验环境就绪:
| 检查项 | 验证命令 / 方法 | 预期结果 |
|---|---|---|
| Docker运行正常 | docker info |
输出包含Server Version,无错误 |
| Kubernetes集群就绪 | kubectl get nodes |
节点状态为 Ready |
| kubectl上下文正确 | kubectl config current-context |
显示 minikube 或目标集群名称 |
| Webhook可达 | GitLab Webhook 测试 → 查看CI引擎日志 | HTTP 200,流水线被触发 |
| 镜像构建测试 | docker build -t test:latest . |
构建成功,无错误退出 |
网络注意事项:如果CI引擎与代码仓库不在同一网络(例如Jenkins在本地,GitLab在公网),请确保Jenkins所在机器具有公网访问能力,或通过反向代理(如Nginx)暴露Webhook接收端口。防火墙需放行对应端口(默认Jenkins 8080,GitLab 80/443)。