1. 镜像和插件导入手册:轻量CI/CD系统搭建的关键一步
在搭建轻量级CI/CD系统的过程中,镜像和插件的导入往往是第一个拦路虎。作为一名经历过无数次环境搭建的老手,我深知在国内网络环境下直接拉取官方镜像的痛苦——要么速度慢如蜗牛,要么干脆连接超时。本文将手把手教你如何通过预下载的镜像包快速完成环境部署,避开网络问题的坑。
我们这次用到的核心组件包括:
- Gitea:轻量级的自托管Git服务
- Jenkins:老牌CI/CD工具
- Maven:Java项目构建利器
- MySQL:关系型数据库
这些组件都已经打包成Docker镜像,你只需要按照下面的步骤导入,就能快速拥有一个可用的CI/CD环境。相比从零开始安装配置,这种方法能节省你至少80%的时间。
2. 准备工作与环境检查
2.1 系统要求确认
在开始之前,请确保你的系统满足以下最低要求:
- 操作系统:Linux (推荐Ubuntu 20.04+) 或 macOS
- Docker版本:20.10.0+
- Docker Compose版本:1.29.0+
- 磁盘空间:至少5GB可用空间
- 内存:建议4GB以上
提示:可以通过
docker --version和docker-compose --version命令检查当前安装的版本。
2.2 下载镜像包
我已经将所有需要的镜像打包上传到百度网盘:
下载链接:https://pan.baidu.com/s/1SwisIEdOOSRo8Z2s2cJUgg
提取码:5432
网盘包含以下文件:
| 文件名 | 大小 | 说明 |
|---|---|---|
| gitea.tar | 173.31MB | Gitea代码仓库镜像 |
| jenkins.tar | 483.73MB | Jenkins CI/CD镜像 |
| jenkins-plugins.tar.gz | 154.09MB | Jenkins插件包 |
| maven.tar | 485.75MB | Maven构建工具镜像 |
| mysql.tar | 761.64MB | MySQL数据库镜像 |
下载完成后,建议使用md5sum或sha256sum校验文件完整性:
bash复制md5sum gitea.tar jenkins.tar jenkins-plugins.tar.gz maven.tar mysql.tar
3. 镜像导入详细步骤
3.1 Docker镜像导入
所有.tar文件都是标准的Docker镜像导出包,可以通过docker load命令导入:
bash复制# 导入Gitea镜像
docker load -i gitea.tar
# 导入Jenkins镜像
docker load -i jenkins.tar
# 导入Maven镜像
docker load -i maven.tar
# 导入MySQL镜像
docker load -i mysql.tar
导入完成后,使用以下命令检查镜像是否成功加载:
bash复制docker images
你应该能看到类似这样的输出:
code复制REPOSITORY TAG IMAGE ID CREATED SIZE
gitea/gitea latest a1b2c3d4e5f6 2 weeks ago 173MB
jenkins/jenkins latest b2c3d4e5f6g7 3 weeks ago 484MB
maven 3.8.4 c3d4e5f6g7h8 1 month ago 486MB
mysql 5.7 d4e5f6g7h8i9 2 months ago 762MB
3.2 Jenkins插件安装
Jenkins插件包是一个压缩文件,需要解压后放入Jenkins的插件目录:
bash复制# 创建插件目录
mkdir -p ~/jenkins_home/plugins
# 解压插件包
tar -xzvf jenkins-plugins.tar.gz -C ~/jenkins_home/plugins/
注意:这里假设你的Jenkins home目录是~/jenkins_home。如果你使用Docker运行Jenkins,需要确保这个目录被挂载为volume。
4. 容器启动与配置
4.1 使用Docker Compose启动服务
创建一个docker-compose.yml文件,内容如下:
yaml复制version: '3'
services:
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: your_secure_password
MYSQL_DATABASE: gitea
MYSQL_USER: gitea
MYSQL_PASSWORD: gitea_password
volumes:
- mysql_data:/var/lib/mysql
ports:
- "3306:3306"
restart: always
gitea:
image: gitea/gitea:latest
depends_on:
- mysql
environment:
DB_TYPE: mysql
DB_HOST: mysql:3306
DB_NAME: gitea
DB_USER: gitea
DB_PASSWD: gitea_password
volumes:
- gitea_data:/data
ports:
- "3000:3000"
- "2222:22"
restart: always
jenkins:
image: jenkins/jenkins:latest
volumes:
- jenkins_home:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
ports:
- "8080:8080"
- "50000:50000"
restart: always
volumes:
mysql_data:
gitea_data:
jenkins_home:
然后启动服务:
bash复制docker-compose up -d
4.2 初始配置
Gitea配置:
- 访问 http://localhost:3000
- 按照向导完成初始设置
- 建议修改管理员账号密码
Jenkins配置:
- 访问 http://localhost:8080
- 从日志中获取初始管理员密码:
bash复制
docker logs <jenkins_container_id> - 选择"安装推荐的插件"
- 创建管理员账户
5. 常见问题与解决方案
5.1 镜像导入失败
问题现象:
code复制open /var/lib/docker/tmp/docker-import-123456789: no space left on device
解决方案:
- 清理Docker无用资源:
bash复制
docker system prune -a - 增加Docker存储空间:
- 修改/etc/docker/daemon.json
- 添加
"data-root": "/path/to/larger/disk"
5.2 Jenkins插件不生效
问题现象:插件已放入目录但Jenkins中看不到
解决方案:
- 检查插件目录权限:
bash复制chown -R 1000:1000 ~/jenkins_home/plugins - 重启Jenkins容器:
bash复制
docker restart <jenkins_container_id> - 在Jenkins管理界面检查"插件管理"
5.3 MySQL连接问题
问题现象:Gitea无法连接MySQL
解决方案:
- 检查MySQL容器是否正常运行:
bash复制
docker ps | grep mysql - 测试MySQL连接:
bash复制docker exec -it mysql_container mysql -ugitea -pgitea_password - 确保docker-compose.yml中的环境变量一致
6. 性能优化建议
6.1 资源限制
在生产环境中,建议为容器设置资源限制:
yaml复制services:
jenkins:
deploy:
resources:
limits:
cpus: '2'
memory: 4G
6.2 数据备份
定期备份重要数据:
bash复制# 备份Gitea数据
docker run --rm --volumes-from gitea -v $(pwd):/backup busybox tar cvf /backup/gitea_backup.tar /data
# 备份Jenkins数据
docker run --rm --volumes-from jenkins -v $(pwd):/backup busybox tar cvf /backup/jenkins_backup.tar /var/jenkins_home
6.3 网络优化
使用自定义网络提高容器间通信效率:
yaml复制networks:
ci_net:
driver: bridge
services:
mysql:
networks:
- ci_net
7. 进阶配置技巧
7.1 Jenkins与Gitea集成
- 在Gitea中创建访问令牌
- 在Jenkins中安装"Gitea插件"
- 配置Jenkins系统设置中的Gitea服务器
7.2 使用Maven容器构建项目
创建一个Jenkins Pipeline,使用Maven容器进行构建:
groovy复制pipeline {
agent {
docker {
image 'maven:3.8.4'
args '-v $HOME/.m2:/root/.m2'
}
}
stages {
stage('Build') {
steps {
sh 'mvn clean package'
}
}
}
}
7.3 配置HTTPS访问
使用Nginx反向代理配置HTTPS:
nginx复制server {
listen 443 ssl;
server_name your.domain.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://jenkins:8080;
proxy_set_header Host $host;
}
}
8. 维护与监控
8.1 日志管理
集中查看容器日志:
bash复制# 查看所有容器日志
docker-compose logs -f
# 查看特定容器日志
docker logs -f <container_id>
8.2 健康检查
为容器添加健康检查:
yaml复制services:
mysql:
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 3
8.3 资源监控
使用cAdvisor监控容器资源使用情况:
bash复制docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--publish=8081:8080 \
--detach=true \
--name=cadvisor \
google/cadvisor:latest
访问 http://localhost:8081 查看监控数据