当前位置: 首页 > news >正文

从混合部署到高可用:在内网环境下搭建 GitLab-Jenkins-OpenResty的完整实战复盘20251014

🚀 从混合部署到高可用:我在内网环境下搭建 GitLab + Jenkins + OpenResty 的完整实战复盘

💡 作者注:本文记录了在构建企业内网 CI/CD 环境中的全过程,从「一体化混合部署」到「分层独立高可用」,完整涵盖 Docker 架构规划、插件离线化、镜像迁移与初始化陷阱等实战经验。


🧭 摘要(Summary)

在内网环境中,GitLab、Jenkins、OpenResty 等组件往往无法联网直接访问外部资源。本文记录了我从最初 单一 docker-compose 统一部署分模块独立部署、离线插件打包、初始化优化 的完整演进过程。
最终实现了一个可稳定运行的企业级 CI/CD 架构,解决了插件下载失败、日志难排查、镜像路径冲突等关键问题。


在这里插入图片描述

一、背景与目标

目标:在公司内网环境下构建一套可稳定运行的 CI/CD 系统,包括:

  • GitLab 代码仓库
  • Jenkins 持续集成与任务编排
  • OpenResty 反向代理与 HTTPS 支撑
  • 插件离线加载与日志分层管理

二、第一阶段:单一 docker-compose 尝试

version: "3.8"services:gitlab:image: gitlab/gitlab-ce:latestcontainer_name: gitlabrestart: alwaysports:- "8081:8081"- "2222:22"environment:GITLAB_OMNIBUS_CONFIG: |external_url 'https://gitlab.example.local'gitlab_rails['gitlab_shell_ssh_port'] = 2222volumes:- ./gitlab/config:/etc/gitlab- ./gitlab/logs:/var/log/gitlab- ./gitlab/data:/var/opt/gitlabjenkins:image: jenkins/jenkins:ltscontainer_name: jenkinsrestart: alwaysports:- "28002:8080"- "50000:50000"volumes:- ./jenkins_home:/var/jenkins_homeenvironment:JAVA_OPTS: "-Djenkins.install.runSetupWizard=false"openresty:image: openresty/openresty:alpinecontainer_name: openrestyrestart: alwaysports:- "80:80"- "443:443"volumes:- ./conf:/etc/nginx/conf.d- ./logs:/usr/local/openresty/nginx/logs

问题:

  • 日志混杂,异常难排查;
  • Jenkins 插件下载失败(受限于内网环境);
  • 镜像耦合度高。

三、第二阶段:独立部署与日志分层

/usr/local/docker/
├─ gitlab/
│  ├─ docker-compose.gitlab.yml
│  ├─ config/
│  ├─ logs/
│  └─ data/
├─ jenkins/
│  ├─ docker-compose.jenkins.yml
│  ├─ offline-plugins/
│  └─ jenkins_home/
└─ openresty/├─ docker-compose.openresty.yml├─ conf/└─ logs/

独立启动:

docker-compose -f docker-compose.gitlab.yml up -d
docker-compose -f docker-compose.jenkins.yml up -d
docker-compose -f docker-compose.openresty.yml up -d

四、第三阶段:离线 Jenkins 镜像打包

# 海外服务器执行
docker pull jenkins/jenkins:lts
docker run -u root -it jenkins/jenkins:lts /bin/bash
jenkins-plugin-cli --plugins workflow-aggregator git-client token-macro
docker commit <container_id> jenkins-offline:latest
docker save jenkins-offline:latest -o jenkins-offline.tar.gz# 内网导入
docker load -i jenkins-offline.tar.gz

⚠️ 问题:镜像路径差异导致 Jenkins 启动异常。


五、第四阶段:回归插件离线化方案

方案要点:

  • 使用官方 Jenkins 镜像;
  • 挂载离线插件目录 /usr/share/jenkins/ref/plugins
  • 避免重新构建镜像。
version: "3.8"services:jenkins:image: jenkins/jenkins:ltscontainer_name: jenkins-prodrestart: alwaysports:- "28002:8080"- "50000:50000"volumes:- ./jenkins_home:/var/jenkins_home- ./offline-plugins:/usr/share/jenkins/ref/pluginsenvironment:- JENKINS_ADMIN_ID=admin- JENKINS_ADMIN_PASSWORD=admin123

插件目录示例:

offline-plugins/
├─ workflow-aggregator.hpi
├─ git-client.hpi
├─ token-macro.hpi
└─ configuration-as-code.hpi

六、第五阶段:GitLab 与 Jenkins 初始化密码问题

GitLab 初始密码:

docker exec -it gitlab cat /etc/gitlab/initial_root_password

Jenkins 重置机制:

docker volume rm jenkins_jenkins_home
docker-compose up -d

七、完整部署结构与配置代码

/usr/local/docker/
├─ gitlab/
│  ├─ docker-compose.yml
│  ├─ config/
│  ├─ logs/
│  └─ data/
├─ jenkins/
│  ├─ docker-compose.yml
│  ├─ offline-plugins/
│  └─ jenkins_home/
└─ openresty/├─ docker-compose.yml├─ conf/│   ├─ default.conf│   └─ jenkins_proxy.conf└─ logs/

OpenResty 代理示例:

server {listen 443 ssl;server_name cicd.example.local;ssl_certificate /etc/nginx/certs/server.crt;ssl_certificate_key /etc/nginx/certs/server.key;location /jenkins/ {proxy_pass http://jenkins:8080/;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}location /gitlab/ {proxy_pass http://gitlab:8081/;}
}

八、经验总结

类别关键要点实践体会
架构设计模块独立、日志分层排障效率提升数倍
插件管理离线目录挂载无需二次构建镜像
网络配置统一代理层(OpenResty)安全控制点集中
初始化机制GitLab、Jenkins 差异理解避免重复初始化
路径管理容器路径一致性环境迁移更顺畅

🏁 结语

“CICD 的稳定,不在于技术多复杂,而在于层次清晰、边界分明。”
每一次部署失败,都是一次架构进化的契机。


http://www.dtcms.com/a/483136.html

相关文章:

  • 园林公司网站建设费用自适应wordpress模板
  • 使用 fcntl 系统函数在 Linux 下改变文件属性
  • Docker 容器访问宿主机 Ollama 服务配置教程
  • 可以做彩页的网站ps做图哪个网站好
  • 使用Spring Boot构建数据访问层
  • 小白测评做网站免费网页制作有哪些
  • 潍坊专业建站wordpress视频分享
  • Vue 的响应式更新时机 + 异步录音事件回调造成状态“延后更新”或异步竞态问题(race condition)
  • 台州公司网站建设可以搜索附近手机的软件
  • 东莞营销网站建设多少钱淘宝客网站源码和模版有什么区别
  • electron启动页
  • 做公众号试卷的网站网站项目验收确认书
  • 玉儿做春梦网站中信建设有限责任公司ipo
  • word、pdf文档内容提取工具类
  • 【OpenHarmony多媒体开发大总结】从播放到转码全流程+实测踩坑便签,一文打通AVPlayer/SoundPool/录屏/缩略图/元数据提取
  • 02117 信息组织【第六章】
  • 【Linux内核】Linux内核裁剪完全指南:从理论到实战的系统优化
  • 旅游公司网站难做吗外贸英文网站模板
  • 尚品本色木门网站是哪个公司做的猎头做单网站
  • Linux的动态库和静态库
  • 参透测试(1):普通权限弱口令/弱加密方式/未授权访问
  • 嘉兴专业网站排名推广网站建设的后期服务要包括什么软件
  • 统计订单总数并列出排名
  • **标题:发散创新:探索Deno框架下的应用开发之旅**摘要:本文将深入探讨Den
  • 网站icp备案新规药品网站 icp
  • Linux对象管理机制
  • 网站建设实训考试做电商的步骤
  • 微信小程序uni.request 返回值存在精度丢失问题
  • 做外贸上哪些网站鹤壁集团网站建设
  • 惠城网站建设有哪些网站建设欧美