本文讲解通过Docker部署Jenkins过程及遇到的问题。
通过 Docker 部署 Jenkins
使用 Docker 来部署 Jenkins 是一个快速且高效的方式。以下是使用 Docker 部署 Jenkins 的分步骤指南:
1. 安装 Docker
如果你的系统上还没有安装 Docker,请根据操作系统执行以下操作:
-
对于 Linux(以 Ubuntu 为例):
sudo apt update sudo apt install docker.io -y sudo systemctl start docker sudo systemctl enable docker
检查 Docker 是否安装成功,查看版本:
docker --version
2. 拉取 Jenkins Docker 镜像
从 Docker Hub 拉取Jenkins的镜像(lts 长期支持版本):
docker pull jenkins/jenkins:lts
如果你想要最新版本,可以拉取:
docker pull jenkins/jenkins
3. 运行 Jenkins 容器
运行 Jenkins 时,需要暴露一些端口并挂载一个卷以保持 Jenkins 的数据持久性。
使用以下命令运行 Jenkins:
docker run -d -p 8080:8080 -p 50000:50000 --name jenkins \
-v jenkins_home:/var/jenkins_home jenkins/jenkins:lts
命令详解:
-
-d
: 以后台模式运行容器。 -
-p 8080:8080
: 将 Jenkins 内部的 8080 端口映射到主机的 8080 端口。 -
-p 50000:50000
: 映射 50000 端口,用于 Jenkins 代理通信。 -
--name jenkins
: 为容器命名为 “jenkins”。 -
-v jenkins_home:/var/jenkins_home
: 将 Docker 卷jenkins_home
挂载到容器内的 Jenkins 主目录。这样可以确保数据在容器重启后不会丢失。
现在你可以通过浏览器访问 Jenkins,地址为 http://localhost:8080
。
4. 解锁 Jenkins
首次运行 Jenkins 时,你需要输入初始管理员密码进行解锁。
-
查看日志以找到管理员密码:
docker logs jenkins
在日志中查找以下内容:
Jenkins initial setup is required. Please use the following password to proceed to installation: <initialAdminPassword>
-
复制密码并在 Jenkins Web 界面中输入(
http://localhost:8080
)。
5. 安装插件和创建管理员用户
解锁 Jenkins 后:
- 系统会提示你安装推荐的插件。你可以选择安装推荐的插件,或手动选择特定的插件。
- 插件安装完成后,根据提示创建管理员用户。
6. 数据持久化和自定义配置
在前面创建的 Docker 容器中,使用的卷(jenkins_home
)用于保持 Jenkins 的配置和任务数据持久化。这可以确保即使删除或停止容器,Jenkins 的数据仍然保留。
- 你可以查看挂载的卷:
docker volume inspect jenkins_home
如果想使用本地目录来保存数据,可以将 jenkins_home:/var/jenkins_home
替换为主机上的一个目录路径:
docker run -d -p 8080:8080 -p 50000:50000 --name jenkins \
-v /path/to/your/jenkins_home:/var/jenkins_home jenkins/jenkins:lts
7. 也可以使用 Docker Compose 部署 Jenkins
如果你希望通过 Docker Compose 更方便地管理 Jenkins,可以创建一个 docker-compose.yml
文件:
version: '3'
services:
jenkins:
image: jenkins/jenkins:lts
container_name: jenkins
ports:
- "8080:8080"
- "50000:50000"
volumes:
- jenkins_home:/var/jenkins_home
volumes:
jenkins_home:
然后使用 Docker Compose 启动 Jenkins:
docker-compose up -d
8. 常见问题
- Jenkins 端口无法访问
解决办法:
- 检查容器是否运行:
docker ps
如果没有运行,检查启动日志:
docker logs jenkins
- 确保端口没有被占用
sudo lsof -i -P -n | grep LISTEN
- 无法获取Jenkins初始管理员密码
解决办法:
- 检查启动日志
docker logs jenkins
- 如果没有日志,确保jenkins_home目录的权限正确,尝试修改主机目录权限:
sudo chown -R 1000:1000 /path/jenkins_home
- Jenkins 插件安装失败或速度很慢时
解决方法:
一般为网络问题,通过设置代理服务器解决:在Jenkins的"Manage Jenkins" -> “Manage Plugins” ->
“Advanced” 中的“Update Site”将默认更新站点替换为国内镜像源:
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
- Jenkins意外停止
Jenkins Docker容器启动后一直正常,但一段时间后自动停止 。
可能的原因:
- 内存不足,Jenkins使用大量内存导致Docker容器崩溃。
- 容器资源分配不足
解决办法
- 查看容器日志
docker logs jenkins
- 容器资源不足时,动态的增加分配给容器内存或CPU
docker run -d -p 8080:8080 -p 50000:50000 --name jenkins \
-v jenkins_home:/var/jenkins_home \
--memory=2g jenkins/jenkins:lts
- Jenkins数据丢失或无法保存配置时
有时重启Jenkins后,任务丢失。
可能原因:
- Docker容器未正确挂载
- 文件系统权限有问题
解决办法
- 确保正确挂载Jenkins容器的Jenkins_home目录,保证数据持久化:
docker run -d -p 8080:8080 -p 50000:50000 --name jenkins \
-v /path/to/your/jenkins_home:/var/jenkins_home jenkins/jenkins:lts
- 检查挂载目录权限,确保容器有写入权限:
sudo chown -R 1000:1000 /pat/jenkins_home