4. 环境准备:搭建CI/CD实验环境

本章聚焦于构建一套可复现的CI/CD实验环境,涵盖容器运行时、Kubernetes集群、代码仓库及Webhook联动配置。所有操作均基于开源工具,确保你能够在本地或云环境中快速复现后续流水线实验。

4.1 环境全景概览

实验环境由四个核心层组成,各层之间的依赖关系与数据流向如下图所示:

CI/CD 实验环境分层架构 代码仓库层 GitHub / GitLab / Gitee · 存储源码、Dockerfile、K8s 清单 CI/CD 引擎层 Jenkins / GitLab Runner · 监听 Webhook、执行流水线 容器运行时层 Docker · 构建镜像、运行测试容器、推送至镜像仓库 Kubernetes 编排层 · 部署、服务发现、滚动更新
环境对齐建议:如果你使用云厂商的托管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)。