首页主机资讯Ubuntu Jenkins与Docker如何结合使用

Ubuntu Jenkins与Docker如何结合使用

时间2025-11-29 02:36:03发布访客分类主机资讯浏览696
导读: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
    • 注意权限与安全性(见下文“安全建议”)
  • 可选插件与系统配置
    • 安装插件:Docker PipelinePipelineSSH Pipeline Steps(如需远程部署)
    • 在“Manage Jenkins → Configure System”添加 Docker 主机 URL(如 unix:///var/run/docker.sock)并测试连接

四 示例 Jenkinsfile 流水线

  • 场景 A 在宿主机 Docker 构建并推送镜像
    • 将镜像标签设为 BUILD_NUMBERgit 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
Jenkins在Ubuntu上如何自定义脚本执行 Ubuntu Jenkins与其他CI/CD工具比较

游客 回复需填写必要信息