温馨提示×

Jenkins与Ubuntu如何实现容器化部署

小樊
33
2025-11-14 20:07:18
栏目: 智能运维

在 Ubuntu 上使用 Docker 容器化部署 Jenkins 的完整方案

一 环境准备与 Docker 安装

  • 系统建议:Ubuntu 20.04/22.04 LTS,已更新至最新补丁,具备 sudo 权限与稳定网络。
  • 安装 Docker(Ubuntu 推荐方式):
    • 安装包方式:sudo apt update && sudo apt install -y docker.io && sudo systemctl enable --now docker
    • 脚本方式:curl -fsSL https://get.docker.com | sh && sudo systemctl enable --now docker
  • 可选优化:配置镜像加速(提升拉取速度),创建 /etc/docker/daemon.json
    • 示例:{"registry-mirrors": ["https://your-aliyun-mirror.com"]},然后 sudo systemctl restart docker
  • 验证:docker versiondocker run --rm hello-world 能正常运行。

二 快速部署 Jenkins 容器

  • 准备持久化目录并修正权限(容器内 Jenkins 以 UID 1000 运行):
    • sudo mkdir -p /home/jenkins && sudo chown -R 1000:1000 /home/jenkins
  • 启动容器(推荐挂载 Docker 套接字,便于在容器内调用宿主 Docker):
    • docker run -d --name jenkins \ -p 8080:8080 -p 50000:50000 \ -v jenkins-data:/var/jenkins_home \ -v /var/run/docker.sock:/var/run/docker.sock \ -e JAVA_OPTS="-Duser.timezone=Asia/Shanghai -Xmx2g -Xms512m" \ jenkins/jenkins:lts
  • 获取初始管理员密码:
    • docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
  • 访问与初始化:浏览器打开 http://<服务器IP>:8080,粘贴密码,按向导安装常用插件并完成管理员设置。

三 在 Jenkins 内调用 Docker 构建与部署

  • 安装插件:在 Manage Jenkins → Plugins 安装 Docker pluginDocker Pipeline(或 CloudBees Docker Pipeline)。
  • 权限配置:确保运行 Jenkins 的容器用户能访问 Docker(已挂载 /var/run/docker.sock 时,容器内默认可调用宿主 Docker;如需在宿主机直接执行 docker 命令,可将 jenkins 用户加入 docker 组并重启服务)。
  • Pipeline 示例(在 Jenkinsfile 中使用 Docker 构建镜像并运行测试):
    • pipeline { agent any stages { stage(‘Build’) { steps { sh ‘docker build -t myapp:${BUILD_NUMBER} .’ } } stage(‘Test’) { steps { sh ‘docker run --rm myapp:${BUILD_NUMBER} npm test’ } } stage(‘Deploy’) { steps { sh ‘docker rm -f myapp || true’ sh ‘docker run -d --name myapp -p 3000:3000 myapp:${BUILD_NUMBER}’ } } } }
  • 说明:也可在“构建步骤”中使用“使用 Docker”类型步骤,或在代理(agent)中使用 docker 标签指定构建环境。

四 生产可用性与安全加固

  • 持久化与备份:使用 Docker 卷 jenkins-data 或绑定挂载目录(如 /home/jenkins)持久化 /var/jenkins_home,定期备份该目录与关键配置。
  • 资源与稳定性:通过 -e JAVA_OPTS 限制 JVM 内存(如 -Xmx2g -Xms512m),避免 OOM;必要时设置容器重启策略(--restart=unless-stopped)。
  • 网络安全:仅开放必要端口(如 8080/50000),配合 UFW 或云安全组限制来源 IP;反向代理(如 Nginx/Apache)启用 HTTPS/TLS
  • 镜像与更新:优先使用 jenkins/jenkins:lts,定期 docker pull 更新镜像并滚动升级;变更前在测试环境验证插件与 Pipeline 兼容性。
  • 最小权限:避免 --privileged=true 的过度授权;如需特权能力,优先采用细粒度能力或仅在特定任务阶段临时授权。

0