在中小型团队的持续集成实践中,Jenkins 作为老牌自动化引擎依然占据重要地位。本文将分享我在生产环境中使用 Docker Compose 部署 Jenkins 的标准化方案,特别针对 CentOS 7 系统优化了配置流程。相比传统安装方式,容器化部署具有以下优势:
实测环境:华为云 N1 规格服务器(2核4G),CentOS 7.9 内核版本 3.10.0-1160
执行部署前请确认:
bash复制docker --version
bash复制docker-compose -v
合理的存储规划能避免后期权限问题:
bash复制sudo mkdir -p /opt/jenkins/{home,plugins,certs}
sudo chown -R 1000:1000 /opt/jenkins # 适配Jenkins容器UID
关键目录作用:
home:Jenkins 工作目录(包含 jobs、workspace 等)plugins:插件缓存目录(加速后续安装)certs:SSL 证书存放位置(如需 HTTPS)在 /opt/jenkins/home/hudson.model.UpdateCenter.xml 中配置国内镜像源:
xml复制<?xml version='1.1' encoding='UTF-8'?>
<sites>
<site>
<id>huawei</id>
<url>https://mirrors.huaweicloud.com/jenkins/updates/update-center.json</url>
</site>
</sites>
该配置会覆盖默认的 Jenkins 官方更新中心,解决插件安装超时问题
创建 /opt/jenkins/docker-compose.yml:
yaml复制version: '3.7'
services:
jenkins:
image: jenkins/jenkins:lts-jdk11
container_name: jenkins
user: "1000" # 匹配之前创建的目录属主
ports:
- "8080:8080"
- "50000:50000" # JNLP端口
volumes:
- /opt/jenkins/home:/var/jenkins_home
- /opt/jenkins/plugins:/var/jenkins_home/plugins
- /var/run/docker.sock:/var/run/docker.sock # 允许容器内调用宿主机Docker
environment:
- JAVA_OPTS=-Djenkins.install.runSetupWizard=false
- JENKINS_OPTS=--argumentsRealm.passwd.admin=yourpassword --argumentsRealm.roles.admin=admin
restart: unless-stopped
关键参数说明:
user: "1000":避免容器用户与宿主机权限冲突JAVA_OPTS:跳过初始安装向导(生产环境建议启用)启动服务:
bash复制cd /opt/jenkins
docker-compose up -d
检查日志:
bash复制docker-compose logs -f --tail=100
当看到如下输出时表示启动成功:
code复制Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:
*************************************************************
http://服务器IP:8080 进入解锁页面bash复制docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
核心插件列表:
通过预下载插件加速安装:
bash复制wget https://mirrors.huaweicloud.com/jenkins/plugins/{插件名}/{版本}/插件名.hpi \
-P /opt/jenkins/plugins/
推荐使用 thin-backup 插件实现:
/var/jenkins_home/backups恢复时只需将备份文件解压到新实例的 Jenkins_home 目录即可。
在 /opt/jenkins/home/config.xml 中调整 JVM 参数:
xml复制<executor>
<heapSize>1024</heapSize> <!-- 单位MB -->
<permGen>512</permGen>
</executor>
根据服务器配置建议:
典型错误:
code复制java.net.UnknownHostException: updates.jenkins.io
解决方案:
/opt/jenkins/home/hudson.model.UpdateCenter.xml 配置正确bash复制docker exec jenkins cat /etc/resolv.conf
bash复制docker exec -e http_proxy=http://host.docker.internal:1080 jenkins curl -v https://mirrors.huaweicloud.com
当出现 JNLP 节点连接超时时:
bash复制sudo firewall-cmd --list-ports | grep 50000
yaml复制# 在docker-compose.yml中添加
networks:
default:
driver: bridge
name: jenkins_net
我在实际运维中发现,使用独立的 bridge 网络能显著降低网络问题的发生概率。对于需要频繁创建销毁的构建环境,建议将 Docker 的存储驱动改为 overlay2,能有效改善磁盘I/O性能:
bash复制sudo vi /etc/docker/daemon.json
{
"storage-driver": "overlay2"
}