Files
bruno 8c3881bf89 🚀 feat: 企业级CI/CD基础设施完整部署方案
✨ 新功能:
- 一键自动化部署脚本 (build-infra.sh)
- 统一端口配置 (3开头端口,避免冲突)
- 多平台Docker构建支持 (AMD64 + ARM64)
- Jenkins Configuration as Code (零手动配置)
- 完整的服务验证和健康检查

🏗️ 核心组件:
- Jenkins LTS + JDK21 (端口38080)
- Gitea 1.21 (端口33000, SSH: 32222)
- Docker Registry + UI (端口35001/35002)
- 统一cicd-network网络

📋 管理工具:
- 自动化部署和验证脚本
- 健康检查和日志管理工具
- 完整的文档和故障排查指南

🎯 已验证功能:
- 所有服务正常启动和运行
- API和Web界面完全可访问
- 多平台构建环境就绪
- 完整的CI/CD流水线支持

适用环境: Mac Studio M2 + Docker Desktop
2025-08-23 22:11:50 +08:00

140 lines
4.4 KiB
YAML

services:
jenkins:
image: jenkins/jenkins:lts-jdk21
container_name: jenkins-persistent
restart: unless-stopped
ports:
- "8081:8080"
- "50000:50000"
volumes:
# ===== 核心数据持久化 =====
- jenkins-home:/var/jenkins_home # Jenkins主目录完整持久化
- jenkins-workspace:/var/jenkins_home/workspace # 构建工作空间
- jenkins-jobs:/var/jenkins_home/jobs # 作业配置
- jenkins-builds:/var/jenkins_home/builds # 构建历史
- jenkins-plugins:/var/jenkins_home/plugins # 插件数据
- jenkins-secrets:/var/jenkins_home/secrets # 密钥和凭据
- jenkins-users:/var/jenkins_home/users # 用户数据
- jenkins-logs:/var/jenkins_home/logs # 日志文件
# ===== 配置文件持久化 =====
- ./jenkins/casc:/var/jenkins_home/casc_configs:ro # Configuration as Code
- ./jenkins/init-scripts:/usr/share/jenkins/ref/init.groovy.d:ro # 初始化脚本
- ./jenkins/plugins.txt:/usr/share/jenkins/ref/plugins.txt:ro # 插件列表
# ===== 扩展数据持久化 =====
- jenkins-backup:/var/jenkins_backup # 备份目录
- jenkins-cache:/var/jenkins_home/.cache # 缓存目录
- jenkins-tmp:/var/jenkins_home/tmp # 临时文件
# ===== 外部集成 =====
- /var/run/docker.sock:/var/run/docker.sock # Docker集成
- ~/.docker:/var/jenkins_home/.docker:ro # Docker配置
- ~/.kube:/var/jenkins_home/.kube:ro # Kubernetes配置
environment:
- JENKINS_OPTS=--httpPort=8080
- JAVA_OPTS=-Xmx2g -Xms1g -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -Djenkins.install.runSetupWizard=false
- CASC_JENKINS_CONFIG=/var/jenkins_home/casc_configs
- JENKINS_ADMIN_ID=admin
- JENKINS_ADMIN_PASSWORD=admin123
- TZ=Asia/Shanghai
# ===== 持久化优化 =====
- JENKINS_SLAVE_AGENT_PORT=50000
- JENKINS_UC_EXPERIMENTAL_UPDATE_CENTER=false
- COPY_REFERENCE_FILE_LOG=/var/jenkins_home/copy_reference_file.log
user: root
networks:
- cicd-network
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/login"]
interval: 30s
timeout: 10s
retries: 5
start_period: 120s
networks:
cicd-network:
external: true
volumes:
# ===== 主要数据卷 =====
jenkins-home:
driver: local
driver_opts:
type: none
o: bind
device: /Users/brunogao/work/infra/data/jenkins/home # Jenkins主目录
jenkins-workspace:
driver: local
driver_opts:
type: none
o: bind
device: /Users/brunogao/work/infra/data/jenkins/workspace # 工作空间
jenkins-jobs:
driver: local
driver_opts:
type: none
o: bind
device: /Users/brunogao/work/infra/data/jenkins/jobs # 作业配置
jenkins-builds:
driver: local
driver_opts:
type: none
o: bind
device: /Users/brunogao/work/infra/data/jenkins/builds # 构建历史
jenkins-plugins:
driver: local
driver_opts:
type: none
o: bind
device: /Users/brunogao/work/infra/data/jenkins/plugins # 插件
jenkins-secrets:
driver: local
driver_opts:
type: none
o: bind
device: /Users/brunogao/work/infra/data/jenkins/secrets # 凭据
jenkins-users:
driver: local
driver_opts:
type: none
o: bind
device: /Users/brunogao/work/infra/data/jenkins/users # 用户
jenkins-logs:
driver: local
driver_opts:
type: none
o: bind
device: /Users/brunogao/work/infra/data/jenkins/logs # 日志
# ===== 辅助数据卷 =====
jenkins-backup:
driver: local
driver_opts:
type: none
o: bind
device: /Users/brunogao/work/infra/backup/jenkins # 备份
jenkins-cache:
driver: local
driver_opts:
type: none
o: bind
device: /Users/brunogao/work/infra/data/jenkins/cache # 缓存
jenkins-tmp:
driver: local
driver_opts:
type: none
o: bind
device: /Users/brunogao/work/infra/data/jenkins/tmp # 临时文件