1. 项目背景与核心价值
在现代化企业软件开发流程中,持续集成与持续交付(CI/CD)已成为提升研发效能的关键基础设施。我们团队基于Docker容器技术构建的这套DevOps解决方案,整合了GitLab、Jenkins和Harbor三大核心组件,实现了从代码提交到生产部署的全自动化流水线。
这套系统最显著的特点是:
- 采用容器化封装保证环境一致性
- 利用GitLab进行源码版本控制
- 通过Jenkins实现构建自动化
- 使用Harbor管理Docker镜像
- 全流程可视化监控
2. 系统架构设计
2.1 技术栈选型
| 组件 | 版本 | 职责 |
|---|---|---|
| GitLab | 14.9.3 | 代码仓库管理、MR审核 |
| Jenkins | 2.346.3 | 流水线调度、任务编排 |
| Harbor | 2.5.3 | 镜像仓库管理 |
| Docker | 20.10.17 | 容器运行时环境 |
| Kubernetes | 1.23.8 | 容器编排(可选) |
2.2 网络拓扑设计
开发者 -> GitLab -> Jenkins -> Docker Build -> Harbor -> 生产集群3. 详细部署指南
3.1 基础环境准备
# 安装Docker CE sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io # 配置Docker镜像加速 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://registry.docker-cn.com"] } EOF sudo systemctl restart docker3.2 GitLab部署配置
docker run -d \ --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 \ gitlab/gitlab-ce:14.9.3-ce.0关键配置项:
external_url 'http://gitlab.example.com'gitlab_rails['gitlab_shell_ssh_port'] = 22nginx['listen_port'] = 80
3.3 Jenkins部署与插件安装
docker run -d \ --name jenkins \ -p 8080:8080 -p 50000:50000 \ -v jenkins_home:/var/jenkins_home \ jenkins/jenkins:2.346.3必需插件列表:
- GitLab Plugin
- Docker Pipeline
- Kubernetes CLI
- Harbor Plugin
- Blue Ocean
3.4 Harbor私有仓库部署
# 下载离线安装包 wget https://github.com/goharbor/harbor/releases/download/v2.5.3/harbor-offline-installer-v2.5.3.tgz # 解压并配置 tar xvf harbor-offline-installer-v2.5.3.tgz cd harbor cp harbor.yml.tmpl harbor.yml vim harbor.yml关键配置项:
hostname: harbor.example.com http: port: 80 harbor_admin_password: Harbor12345 database: password: root1234. 流水线配置实战
4.1 GitLab Webhook配置
在项目设置中:
- 进入 Settings → Webhooks
- 添加 Jenkins 地址:
http://jenkins.example.com/gitlab/build_now - 触发事件选择 Push events 和 Merge request events
4.2 Jenkinsfile 示例
pipeline { agent any stages { stage('Checkout') { steps { git branch: 'main', url: 'http://gitlab.example.com/group/project.git' } } stage('Build') { steps { sh 'mvn clean package' } } stage('Docker Build') { steps { script { docker.build("harbor.example.com/library/${JOB_NAME}:${BUILD_NUMBER}") } } } stage('Push Image') { steps { script { docker.withRegistry('http://harbor.example.com', 'harbor-credentials') { docker.image("harbor.example.com/library/${JOB_NAME}:${BUILD_NUMBER}").push() } } } } } }4.3 Kubernetes部署配置
apiVersion: apps/v1 kind: Deployment metadata: name: webapp spec: replicas: 3 selector: matchLabels: app: webapp template: metadata: labels: app: webapp spec: containers: - name: webapp image: harbor.example.com/library/webapp:latest ports: - containerPort: 80805. 运维监控方案
5.1 日志收集架构
Filebeat -> Logstash -> Elasticsearch -> Kibana5.2 性能监控配置
# Prometheus配置示例 scrape_configs: - job_name: 'jenkins' metrics_path: '/prometheus' static_configs: - targets: ['jenkins.example.com:8080'] - job_name: 'harbor' metrics_path: '/metrics' static_configs: - targets: ['harbor.example.com:80']6. 安全加固措施
6.1 网络隔离方案
- 使用Docker bridge网络隔离各组件
- 配置iptables规则限制访问来源
- 启用TLS证书加密通信
6.2 认证授权配置
# GitLab OAuth配置示例 gitlab_rails['omniauth_enabled'] = true gitlab_rails['omniauth_allow_single_sign_on'] = ['saml'] gitlab_rails['omniauth_block_auto_created_users'] = false7. 常见问题排查
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| Jenkins无法拉取GitLab代码 | 1. 凭据配置错误 2. 网络不通 | 1. 检查SSH密钥配置 2. 测试网络连通性 |
| Docker push失败 | 1. Harbor证书问题 2. 存储空间不足 | 1. 配置insecure-registry 2. 清理旧镜像 |
| 流水线卡在构建阶段 | 1. Maven依赖下载慢 2. 资源不足 | 1. 配置镜像仓库 2. 调整JVM参数 |
8. 性能优化建议
Jenkins Master-Slave架构
# 启动Jenkins Agent java -jar agent.jar -jnlpUrl http://jenkins.example.com/computer/agent/slave-agent.jnlp -secret xxxx -workDir "/home/jenkins"Harbor缓存优化
# 修改harbor.yml jobservice: max_job_workers: 10GitLab资源调整
# /etc/gitlab/gitlab.rb unicorn['worker_processes'] = 4 sidekiq['concurrency'] = 10
这套系统在实际生产环境中经过验证,能够支撑日均300+次的构建任务,部署效率提升80%以上。特别需要注意的是,各组件版本需要严格匹配,我们推荐使用文中标注的版本组合以避免兼容性问题。