Ubuntu Jenkins如何集成Docker
导读:Ubuntu 上 Jenkins 集成 Docker 的完整实践 一 环境准备与安装 安装 Java 与 Jenkins(Ubuntu 20.04/22.04 示例) 更新软件包并安装 OpenJDK 11:sudo apt updat...
Ubuntu 上 Jenkins 集成 Docker 的完整实践
一 环境准备与安装
- 安装 Java 与 Jenkins(Ubuntu 20.04/22.04 示例)
- 更新软件包并安装 OpenJDK 11:sudo apt update & & sudo apt install -y openjdk-11-jdk
- 导入 Jenkins 仓库 GPG 并添加源,安装 Jenkins:sudo wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -;sudo sh -c ‘echo deb https://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list’;sudo apt update & & sudo apt install -y jenkins;sudo systemctl start jenkins & & sudo systemctl enable jenkins
- 安装 Docker
- 安装 Docker:sudo apt update & & sudo apt install -y docker.io;sudo systemctl enable --now docker
- 授权 Jenkins 使用 Docker
- 将 jenkins 用户加入 docker 组:sudo usermod -aG docker jenkins;sudo systemctl restart jenkins
- 验证:sudo -u jenkins docker version 应返回版本信息(无需 sudo)
二 在 Jenkins 中配置 Docker 能力
- 安装插件
- 进入 Manage Jenkins → Manage Plugins,安装:Docker Pipeline、Docker、以及项目所需的 Pipeline、SSH Pipeline Steps(如需远程部署)
- 配置 Docker 工具与凭证
- 进入 Manage Jenkins → Global Tool Configuration,配置 JDK、Git、Maven/NodeJS 等工具路径
- 进入 Manage Jenkins → Manage Credentials,添加:
- Docker Hub 账号凭证(用于推送镜像)
- 目标服务器的 SSH 私钥(如需远程部署)
- 连接 Docker 守护进程(可选)
- 进入 Manage Jenkins → Configure System → Docker,添加 Docker Host URL:unix:///var/run/docker.sock,点击 Test Connection 验证连通性
三 流水线示例与远程部署
- 示例一 在容器内构建镜像并推送到 Docker Hub
- Jenkinsfile
- pipeline { agent any environment { DOCKER_IMAGE = “your-dockerhub-username/your-app:${ BUILD_NUMBER} ” } stages { stage(‘Checkout’) { steps { git branch: ‘main’, url: ‘https://github.com/your/repo.git’ } } stage(‘Build Image’) { steps { script { dockerImage = docker.build(env.DOCKER_IMAGE) } } } stage(‘Push Image’) { steps { script { docker.withRegistry(‘https://registry.hub.docker.com’, ‘dockerhub-credential-id’) { dockerImage.push() dockerImage.push(‘latest’) } } } } } }
- Jenkinsfile
- 示例二 在目标服务器上拉取并运行(SSH 方式)
- 在目标主机预先安装 Docker,并配置免密登录(Jenkins 用 SSH 执行命令)
- Jenkinsfile 追加阶段
- stage(‘Deploy’) { steps { sshagent([‘ssh-credential-id’]) { sh “”" ssh ${ REMOTE_SERVER} “docker pull ${ DOCKER_IMAGE} ” ssh ${ REMOTE_SERVER} “docker stop your-container || true” ssh ${ REMOTE_SERVER} “docker rm your-container || true” ssh ${ REMOTE_SERVER} “docker run -d --name your-container -p 8080:8080 ${ DOCKER_IMAGE} ” “”" } } }
- 说明
- 将 dockerhub-credential-id、ssh-credential-id、REMOTE_SERVER 替换为实际凭据与主机信息
四 常见问题排查
- 无法执行 docker 命令
- 检查 Docker 是否安装并运行:sudo systemctl status docker
- 检查 jenkins 是否在 docker 组:groups jenkins;若不在,执行 sudo usermod -aG docker jenkins 并重启 Jenkins
- 在 Jenkins 任务中执行:sudo -u jenkins docker version 验证权限
- Jenkins 页面测试 Docker 连接失败
- 确认 /var/run/docker.sock 权限与属主(通常为 root:docker),Jenkins 容器或进程需要能访问该套接字
- 容器内找不到 docker 命令
- 若 Jenkins 运行在容器中,需挂载 Docker 套接字与二进制:在 docker run 或 compose 中添加 -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker(或使用 Docker-in-Docker 方案)
五 进阶 在 Docker 中运行 Jenkins 并集成宿主机 Docker
- 适用场景:希望快速交付与升级 Jenkins,同时保留对宿主机 Docker 的调用能力
- 快速启动示例(挂载 Docker 套接字)
- 准备目录:mkdir -p ~/jenkins_home & & sudo chown 1000:1000 ~/jenkins_home
- 启动容器:
- docker run -d --name jenkins
-p 8080:8080 -p 50000:50000
-v ~/jenkins_home:/var/jenkins_home
-v /var/run/docker.sock:/var/run/docker.sock
-v /usr/bin/docker:/usr/bin/docker
–restart always
jenkins/jenkins:lts
- docker run -d --name jenkins
- 进入容器验证:docker exec -it jenkins docker version
- 安全提示
- 挂载 /var/run/docker.sock 等同于赋予容器宿主机的 Docker 权限,生产环境建议结合最小权限、镜像白名单、审计等措施
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu Jenkins如何集成Docker
本文地址: https://pptw.com/jishu/757456.html
