3、环境准备:安装Docker、Docker Compose、Jenkins、GitLab、Prometheus、Alertmanager
本章节将完成事件触发Runbook联动Jenkins管道工程所需的基础环境搭建。所有组件均采用容器化部署,确保环境一致性、可移植性与快速恢复能力。部署顺序遵循依赖关系:先安装容器运行时(Docker),再安装编排工具(Docker Compose),最后依次部署GitLab、Jenkins、Prometheus与Alertmanager。
3.1 安装 Docker 与 Docker Compose
Docker 是容器化基础,Docker Compose 用于定义和运行多容器应用。以下步骤在 Ubuntu 22.04 上完成安装。
3.1.1 安装 Docker Engine
# 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc
# 更新包索引并安装依赖
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg lsb-release
# 添加 Docker 官方 GPG 密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 设置稳定版仓库
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装 Docker Engine
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 启动 Docker 并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
# 验证安装
sudo docker --version
sudo docker run hello-world
3.1.2 安装 Docker Compose
Docker Compose v2 已作为 Docker 插件集成,通过 docker compose 命令使用。若需独立二进制版本,可执行以下命令:
# 下载最新稳定版 Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 验证安装
docker-compose --version
3.2 部署 GitLab
GitLab 作为代码仓库与 Webhook 事件源,采用 Docker 单容器部署。数据持久化至宿主机目录,映射 SSH、HTTP 与 HTTPS 端口。
# 创建 GitLab 数据目录
sudo mkdir -p /srv/gitlab/{config,logs,data}
# 启动 GitLab 容器
sudo docker run --detach \
--hostname gitlab.example.com \
--publish 443:443 --publish 80:80 --publish 22:22 \
--name gitlab \
--restart always \
--volume /srv/gitlab/config:/etc/gitlab \
--volume /srv/gitlab/logs:/var/log/gitlab \
--volume /srv/gitlab/data:/var/opt/gitlab \
--shm-size 256m \
gitlab/gitlab-ce:16.6.0-ce.0
sudo docker logs -f gitlab 监控启动进度。
3.2.1 获取初始 root 密码
# 等待 GitLab 完全启动后,获取初始密码
sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
访问 http://<宿主机IP>,使用用户名 root 与上述密码登录。首次登录后建议立即修改密码。
3.3 部署 Jenkins
Jenkins 作为管道引擎与 Runbook 执行器,同样采用容器化部署。需映射 8080(Web UI)与 50000(代理节点)端口。
# 创建 Jenkins 数据目录
sudo mkdir -p /srv/jenkins
# 启动 Jenkins 容器
sudo docker run --detach \
--name jenkins \
--restart always \
--publish 8080:8080 \
--publish 50000:50000 \
--volume /srv/jenkins:/var/jenkins_home \
--volume /var/run/docker.sock:/var/run/docker.sock \
--group-add $(stat -c '%g' /var/run/docker.sock) \
jenkins/jenkins:lts-jdk17
/var/run/docker.sock) 使 Jenkins 容器内可直接执行 Docker 命令,实现“容器内运行容器”(DooD)模式,便于管道中构建镜像。
3.3.1 获取初始管理员密码
# 查看 Jenkins 初始密码
sudo docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
浏览器访问 http://<宿主机IP>:8080,输入初始密码后,选择“安装推荐的插件”完成初始化。创建第一个管理员用户后,进入系统管理页面。
3.4 部署 Prometheus 与 Alertmanager
Prometheus 负责采集指标与评估告警规则,Alertmanager 处理告警去重、分组与通知。两者通过 Docker Compose 统一管理,便于配置联动。
3.4.1 创建目录与配置文件
# 创建 Prometheus 与 Alertmanager 数据目录
sudo mkdir -p /srv/monitoring/{prometheus,alertmanager}
# 创建 Prometheus 配置文件
sudo tee /srv/monitoring/prometheus/prometheus.yml << 'EOF'
global:
scrape_interval: 15s
evaluation_interval: 15s
alerting:
alertmanagers:
- static_configs:
- targets: ['alertmanager:9093']
rule_files:
- "alert_rules.yml"
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'jenkins'
metrics_path: '/prometheus'
static_configs:
- targets: ['jenkins:8080']
- job_name: 'gitlab'
static_configs:
- targets: ['gitlab:9090']
EOF
# 创建告警规则文件(示例)
sudo tee /srv/monitoring/prometheus/alert_rules.yml << 'EOF'
groups:
- name: jenkins_alerts
rules:
- alert: JenkinsDown
expr: up{job="jenkins"} == 0
for: 1m
labels:
severity: critical
annotations:
summary: "Jenkins 服务不可用"
- name: gitlab_alerts
rules:
- alert: GitLabDown
expr: up{job="gitlab"} == 0
for: 1m
labels:
severity: critical
annotations:
summary: "GitLab 服务不可用"
EOF
# 创建 Alertmanager 配置文件
sudo tee /srv/monitoring/alertmanager/alertmanager.yml << 'EOF'
global:
resolve_timeout: 5m
route:
group_by: ['alertname']
group_wait: 10s
group_interval: 1m
repeat_interval: 3h
receiver: 'webhook'
receivers:
- name: 'webhook'
webhook_configs:
- url: 'http://jenkins:8080/generic-webhook-trigger/invoke'
send_resolved: true
EOF
3.4.2 编写 Docker Compose 文件
# 创建 Docker Compose 文件
sudo tee /srv/monitoring/docker-compose.yml << 'EOF'
version: '3.8'
services:
prometheus:
image: prom/prometheus:v2.48.0
container_name: prometheus
restart: always
ports:
- "9090:9090"
volumes:
- ./prometheus:/etc/prometheus
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
alertmanager:
image: prom/alertmanager:v0.26.0
container_name: alertmanager
restart: always
ports:
- "9093:9093"
volumes:
- ./alertmanager:/etc/alertmanager
- alertmanager_data:/alertmanager
command:
- '--config.file=/etc/alertmanager/alertmanager.yml'
- '--storage.path=/alertmanager'
volumes:
prometheus_data:
alertmanager_data:
EOF
3.4.3 启动监控栈
# 进入监控目录并启动
cd /srv/monitoring
sudo docker compose up -d
# 验证服务状态
sudo docker compose ps
# 查看日志
sudo docker compose logs -f prometheus
sudo docker compose logs -f alertmanager
http://<宿主机IP>:9090,Alertmanager UI 地址 http://<宿主机IP>:9093。在 Prometheus 的“Status → Targets”页面确认所有采集目标均为 UP 状态。
3.5 环境验证清单
完成所有组件部署后,执行以下验证步骤确保环境就绪:
| 组件 | 验证命令 / 操作 | 预期结果 |
|---|---|---|
| Docker | sudo docker info |
显示 Server Version ≥ 24.0 |
| Docker Compose | docker compose version |
显示 v2.24.0 或更高 |
| GitLab | 浏览器访问 http://<IP> |
显示 GitLab 登录页面 |
| Jenkins | 浏览器访问 http://<IP>:8080 |
显示 Jenkins 登录页面 |
| Prometheus | 浏览器访问 http://<IP>:9090 |
显示 Prometheus UI,Targets 全部 UP |
| Alertmanager | 浏览器访问 http://<IP>:9093 |
显示 Alertmanager UI,无告警 |
3.6 配置 Jenkins 插件与 GitLab 集成
环境基础就绪后,需在 Jenkins 中安装必要插件并配置 GitLab 连接,为后续事件触发管道做准备。
3.6.1 安装 Jenkins 插件
在 Jenkins 管理页面中,进入“系统管理 → 插件管理 → 可选插件”,搜索并安装以下插件:
| 插件名称 | 用途 |
|---|---|
| GitLab Plugin | 集成 GitLab Webhook 与 MR/Commit 触发 |
| Generic Webhook Trigger Plugin | 接收任意 Webhook 请求并解析参数触发管道 |
| Pipeline: Stage View Plugin | 可视化管道阶段执行状态 |
| Docker Pipeline Plugin | 在管道中构建与推送 Docker 镜像 |
| Prometheus Metrics Plugin | 暴露 Jenkins 指标供 Prometheus 采集 |
3.6.2 配置 GitLab API
# 在 GitLab 中生成 Personal Access
# 路径:User Settings → Access Tokens → 勾选 api, read_repository, write_repository
# 复制生成的
# 在 Jenkins 中添加 GitLab 凭据
# 路径:系统管理 → 凭据 → 系统 → 全局凭据 → 添加凭据
# 类型:GitLab API
# API :粘贴上述
# ID:gitlab-api-
3.6.3 配置 Prometheus 采集 Jenkins 指标
在 Jenkins 系统管理中找到“Prometheus”配置项,确保“Path”设置为 /prometheus,与 Prometheus 配置文件中 metrics_path 一致。重启 Jenkins 后,Prometheus 即可采集 Jenkins 指标。