Ubuntu Jenkins与Docker如何结合使用
导读:Ubuntu 上 Jenkins 与 Docker 的结合使用 一 架构与部署方式 方式一 宿主机安装 Docker + Jenkins:Jenkins 安装在宿主机,直接调用宿主机的 Docker Engine(推荐,简单稳妥)。 方式...
Ubuntu 上 Jenkins 与 Docker 的结合使用
一 架构与部署方式
- 方式一 宿主机安装 Docker + Jenkins:Jenkins 安装在宿主机,直接调用宿主机的 Docker Engine(推荐,简单稳妥)。
- 方式二 Docker 运行 Jenkins:将 Jenkins 也容器化,并通过挂载 /var/run/docker.sock 让容器内的 Jenkins 调用宿主机 Docker(便于迁移与隔离)。两种方式都适用于 Ubuntu 20.04/22.04/24.04。
二 快速上手步骤
- 安装 Docker(Ubuntu)
- 更新索引并安装依赖
- 添加 Docker 官方 GPG 与仓库
- 安装 docker-ce 并启动服务
- 验证:运行 docker run hello-world
- 安装 Jenkins(两种任选其一)
- 宿主机安装:添加 Jenkins 官方仓库与密钥,安装 jenkins 包,启动服务,访问 http://:8080 完成初始化
- Docker 运行:docker run -d --name jenkins -p 8080:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts
- 首次登录
- 获取初始密码:docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
- 完成插件安装与管理员设置
三 让 Jenkins 能调用 Docker
- 宿主机安装场景
- 将 jenkins 用户加入 docker 组:sudo usermod -aG docker jenkins
- 重启 Jenkins:sudo systemctl restart jenkins
- 验证:在 Jenkins 的“脚本命令行”执行:sh ‘docker ps’
- Docker 运行 Jenkins 场景
- 挂载 Docker 套接字与二进制(示例 compose)
- volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /usr/bin/docker:/usr/bin/docker
- volumes:
- 注意权限与安全性(见下文“安全建议”)
- 挂载 Docker 套接字与二进制(示例 compose)
- 可选插件与系统配置
- 安装插件:Docker Pipeline、Pipeline、SSH Pipeline Steps(如需远程部署)
- 在“Manage Jenkins → Configure System”添加 Docker 主机 URL(如 unix:///var/run/docker.sock)并测试连接
四 示例 Jenkinsfile 流水线
- 场景 A 在宿主机 Docker 构建并推送镜像
- 将镜像标签设为 BUILD_NUMBER 或 git commit,便于追踪
- 使用 withRegistry 推送至 Docker Hub 或私有仓库
- 场景 B 在容器内使用 Docker 作为构建代理
- 通过 agent { docker ‘maven:3.8-openjdk-11’ } 在指定镜像中运行各阶段
- 示例(精简版) pipeline { agent any environment { DOCKER_IMAGE = “your-registry/your-app:${ env.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() } } } } } }
- 如需远程部署,可在末尾增加 SSH 步骤(示例使用 SSH Pipeline Steps)
五 常见问题与安全建议
- 权限与用户
- 宿主机安装时务必执行:sudo usermod -aG docker jenkins;否则会报 “permission denied while trying to connect to the Docker daemon socket”
- Docker-in-Docker 场景下,挂载 /var/run/docker.sock 等价于赋予 Jenkins 宿主机 Docker 权限,需严格管控凭据与网络访问
- 目录与权限
- 持久化目录(如 /opt/jenkins_home)需确保 UID/GID 1000:1000 正确,避免启动失败或权限错误
- 网络与端口
- 开放 8080(Web)与 50000(代理)端口;云服务器需配置安全组放行
- 安全加固
- 避免以 root 运行 Jenkins 容器(示例 compose 中的 user: root 仅用于演示,生产请移除或按需配置)
- 启用 HTTPS(Nginx/Ingress + 证书)、限制构建代理权限、最小权限原则管理凭证
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu Jenkins与Docker如何结合使用
本文地址: https://pptw.com/jishu/759761.html
