☰
基于Docker的CI/CD DevOps解决方案实战
2026/10/14 12:33:54 网站建设 项目流程

1. 项目背景与核心价值

在现代化企业软件开发流程中,持续集成与持续交付(CI/CD)已成为提升研发效能的关键基础设施。我们团队基于Docker容器技术构建的这套DevOps解决方案,整合了GitLab、Jenkins和Harbor三大核心组件,实现了从代码提交到生产部署的全自动化流水线。

这套系统最显著的特点是:

  • 采用容器化封装保证环境一致性
  • 利用GitLab进行源码版本控制
  • 通过Jenkins实现构建自动化
  • 使用Harbor管理Docker镜像
  • 全流程可视化监控

2. 系统架构设计

2.1 技术栈选型

组件版本职责
GitLab14.9.3代码仓库管理、MR审核
Jenkins2.346.3流水线调度、任务编排
Harbor2.5.3镜像仓库管理
Docker20.10.17容器运行时环境
Kubernetes1.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 docker

3.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'] = 22
  • nginx['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: root123

4. 流水线配置实战

4.1 GitLab Webhook配置

在项目设置中:

  1. 进入 Settings → Webhooks
  2. 添加 Jenkins 地址:http://jenkins.example.com/gitlab/build_now
  3. 触发事件选择 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: 8080

5. 运维监控方案

5.1 日志收集架构

Filebeat -> Logstash -> Elasticsearch -> Kibana

5.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'] = false

7. 常见问题排查

问题现象可能原因解决方案
Jenkins无法拉取GitLab代码1. 凭据配置错误
2. 网络不通
1. 检查SSH密钥配置
2. 测试网络连通性
Docker push失败1. Harbor证书问题
2. 存储空间不足
1. 配置insecure-registry
2. 清理旧镜像
流水线卡在构建阶段1. Maven依赖下载慢
2. 资源不足
1. 配置镜像仓库
2. 调整JVM参数

8. 性能优化建议

  1. Jenkins Master-Slave架构

    # 启动Jenkins Agent java -jar agent.jar -jnlpUrl http://jenkins.example.com/computer/agent/slave-agent.jnlp -secret xxxx -workDir "/home/jenkins"
  2. Harbor缓存优化

    # 修改harbor.yml jobservice: max_job_workers: 10
  3. GitLab资源调整

    # /etc/gitlab/gitlab.rb unicorn['worker_processes'] = 4 sidekiq['concurrency'] = 10

这套系统在实际生产环境中经过验证,能够支撑日均300+次的构建任务,部署效率提升80%以上。特别需要注意的是,各组件版本需要严格匹配,我们推荐使用文中标注的版本组合以避免兼容性问题。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询