Jenkins + Docker 完整部署指南

我看了一些别人发的博客也用AI提供部署步骤,然后完整的部署配置了一遍,可以成功运行啦!PS:我的服务器是阿里云有折扣买的


第一部分:升级JDK到Java 21

我的jdk版本太低了,所以要升级一下

步骤1:检查当前Java版本

bash 复制代码
# 查看当前Java版本
java -version
​
# 查看所有已安装的Java版本
update-alternatives --display java

步骤2:安装Java 21

bash 复制代码
# 更新软件包列表
sudo apt update
​
# 安装OpenJDK 21
sudo apt install -y openjdk-21-jdk openjdk-21-jre
​
# 验证安装
java -version

预期输出:

复制代码
openjdk version "21.0.x" 2024-xx-xx
OpenJDK Runtime Environment (build 21.0.x+xx-Ubuntu-...)
OpenJDK 64-Bit Server VM (build 21.0.x+xx-Ubuntu-..., mixed mode, sharing)

步骤3:配置系统默认Java版本

如果系统中有多个Java版本,需要设置默认版本:

bash 复制代码
# 配置默认Java版本
sudo update-alternatives --config java
​
# 会显示类似以下内容:
# Selection    Path                                         Priority   Status
# ------------------------------------------------------------
#   0            /usr/lib/jvm/java-21-openjdk-amd64/bin/java   2111      auto mode
#   1            /usr/lib/jvm/java-11-openjdk-amd64/bin/java   1111      manual mode
# * 2            /usr/lib/jvm/java-21-openjdk-amd64/bin/java   2111      manual mode
​
# 输入序号选择Java 21(通常是最新版本的序号)
# 例如输入:0 或 2
# 同样配置javac
sudo update-alternatives --config javac

步骤4:配置JAVA_HOME环境变量

bash 复制代码
# 查找Java 21安装路径
sudo update-alternatives --config java
# 记下Java 21的路径,例如:/usr/lib/jvm/java-21-openjdk-amd64
​
# 编辑环境配置文件
sudo nano /etc/environment

在文件中添加或修改 JAVA_HOME

bash 复制代码
JAVA_HOME="/usr/lib/jvm/java-21-openjdk-amd64"

保存并退出(Ctrl + OEnterCtrl + X

bash 复制代码
# 使配置生效
source /etc/environment
​
# 验证JAVA_HOME
echo $JAVA_HOME
java -version

步骤5:卸载旧版本Java

注意:确认新版本工作正常后再卸载旧版本

bash 复制代码
# 列出所有Java相关包
dpkg -l | grep -i jdk
​
# 卸载JDK 11
sudo apt remove -y openjdk-11-jdk openjdk-11-jre
​
# 清理残留配置
sudo apt autoremove -y
sudo apt autoclean

步骤6:验证升级结果

bash 复制代码
# 检查Java版本
java -version
​
# 检查javac版本
javac -version
​
# 检查JAVA_HOME
echo $JAVA_HOME
​
# 检查PATH
which java

全部显示Java 21即为成功!


第二部分:安装Docker

步骤1:卸载旧版本Docker(如果存在)

bash 复制代码
sudo apt remove docker docker-engine docker.io containerd runc

步骤2:更新系统并安装依赖

bash 复制代码
# 更新软件包索引
sudo apt update
​
# 安装必要的依赖包
sudo apt install -y \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release \
    software-properties-common

步骤3:添加Docker官方GPG密钥

bash 复制代码
# 创建密钥目录
sudo mkdir -p /etc/apt/keyrings
​
# 下载并添加Docker GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
​
# 设置密钥权限
sudo chmod a+r /etc/apt/keyrings/docker.gpg

步骤4:添加Docker仓库

bash 复制代码
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu jammy stable" | sudo tee /etc/apt/sources.list.d/docker.list

步骤5:安装Docker Engine

bash 复制代码
# 更新软件包索引
sudo apt update
​
# 安装Docker及相关组件
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

步骤6:启动并设置Docker开机自启

bash 复制代码
# 启动Docker服务
sudo systemctl start docker
​
# 设置开机自启动
sudo systemctl enable docker
​
# 检查Docker状态
sudo systemctl status docker

步骤7:配置Docker权限(重要)

bash 复制代码
# 创建docker用户组(通常已存在)
sudo groupadd docker 2>/dev/null || true
​
# 将当前用户添加到docker组
sudo usermod -aG docker $USER
​
# 刷新用户组权限(二选一)
# exit 后重新连接服务器

步骤8:验证Docker安装

bash 复制代码
# 检查Docker版本
docker --version
​
# 运行测试容器
docker run hello-world

预期输出:

复制代码
Hello from Docker!
This message shows that your installation appears to be working correctly.

如果看到以上信息,说明Docker安装成功!✅

网络问题,无法连接到Docker Hub,因为Docker Hub在国内访问不稳定「failed to resolve reference "docker.io/library/hello-world:latest":」

解决方案:配置阿里云个人镜像加速器

我买的阿里云的服务器所以可以登录阿里云控制台 → 容器镜像服务 → 镜像工具 → 镜像加速器,会看到类似这样的地址:https://xxxxx.mirror.aliyuncs.com

bash 复制代码
# 直接运行命令:
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://地址.mirror.aliyuncs.com",//替换成你的镜像加速的地址
    "https://docker.1panel.live",
    "https://docker.rainbond.cc"
  ]
}
EOF
​
# 重启Docker
sudo systemctl daemon-reload
sudo systemctl restart docker
​
# 验证
docker info | grep -A 10 "Registry Mirrors"
# 测试拉取镜像
docker run hello-world
# 如果成功,应该看到:
# Hello from Docker!
# This message shows that your installation appears to be working correctly.

第二部分:安装Docker Compose

Docker Compose已经作为插件安装,验证一下:

bash 复制代码
# 检查Docker Compose版本
docker compose version

如果显示版本信息(如 Docker Compose version v2.x.x),说明已经安装成功!

如果没有安装,手动安装:

bash 复制代码
# 下载Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
​
# 添加执行权限
sudo chmod +x /usr/local/bin/docker-compose
​
# 创建软链接
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
​
# 验证安装
docker-compose --version

第三部分:使用Docker部署Jenkins(持久化配置,Java 21)

步骤1:创建项目目录结构

bash 复制代码
# 创建Jenkins项目目录(可以在你自己想放的目录下,我的在/root/mynane/main下面创建的)
mkdir -p jenkins-docker
cd jenkins-docker
​
# 创建数据持久化目录(一定要在jenkins-docker目录下运行哦)
mkdir -p jenkins_home
​
# 查看当前目录结构
pwd  # 应该显示:/root/你的用户名/jenkins-docker

步骤2:设置目录权限

bash 复制代码
# Jenkins容器内使用UID 1000运行
# 需要给jenkins_home目录正确的权限
sudo chown -R 1000:1000 jenkins_home
​
# 验证权限
ls -la jenkins_home

步骤3:创建docker-compose.yml配置文件

bash 复制代码
# 使用nano编辑器创建配置文件
vim docker-compose.yml

将以下内容粘贴到文件中:

bash 复制代码
version: '3.8'
​
services:
  jenkins:
    image: jenkins/jenkins:lts-jdk21
    container_name: jenkins
    restart: unless-stopped
    privileged: true
    user: root
    ports:
      - "8080:8080"      # Jenkins Web界面
      - "50000:50000"    # Jenkins代理通信端口
    volumes:
      # 持久化Jenkins数据
      - ./jenkins_home:/var/jenkins_home
      # 允许Jenkins使用主机的Docker
      - /var/run/docker.sock:/var/run/docker.sock
      # 挂载Docker二进制文件(可选,用于在Jenkins中执行docker命令)
      - /usr/bin/docker:/usr/bin/docker
    environment:
      - JAVA_OPTS=-Duser.timezone=Asia/Shanghai -Dhudson.model.DirectoryBrowserSupport.CSP=
      - JENKINS_OPTS=--prefix=/jenkins
    networks:
      - jenkins-network
​
networks:
  jenkins-network:
    driver: bridge
重要说明:
  • 使用 jenkins/jenkins:lts-jdk21 镜像(支持最新的Jenkins LTS版本)

  • 如果想使用 Java 17,可以改为 jenkins/jenkins:lts-jdk17

保存文件:

  • 按 esc

  • 输入:wq 保存退出

步骤4:启动Jenkins容器

bash 复制代码
# 启动容器(后台运行)
docker compose up -d
​
# 查看容器状态
docker compose ps
​
# 查看容器日志
docker compose logs -f jenkins

预期输出:

复制代码
[+] Running 2/2
 ✔ Network jenkins-docker_jenkins-network  Created
 ✔ Container jenkins                       Started

我运行docker compose up -d失败了「unknown: failed to resolve reference "docker.io/jenkins/jenkins:lts-jdk21":」

bash 复制代码
#解决方法:是网络原因,修改一下镜像就行
sudo tee /etc/docker/daemon.json <<'EOF'
{
  "registry-mirrors": [
    "https://x1doswo1.mirror.aliyuncs.com",
    "https://docker.1panel.live",
    "https://docker.rainbond.cc",
    "https://docker.m.daocloud.io",
    "https://docker.mirrors.ustc.edu.cn",
    "https://docker.nju.edu.cn",
    "https://mirror.baidubce.com"
  ]
}
EOF

然后在重启一下:

sudo systemctl daemon-reload

sudo systemctl restart docker

再次执行:

docker compose up -d

预期:Running from: /usr/share/jenkins/jenkins.war等

但是我的预期结果中有一个警告就是我在compose文件中写的版本号version:

「docker-compose.yml: the attribute version is obsolete, it will be ignored, please remove it to avoid potential confusion」

bash 复制代码
解决方法:sed -i '/^version:/d' docker-compose.yml

步骤5:等待Jenkins启动(约1-2分钟)

bash 复制代码
# 实时查看启动日志
docker compose logs -f jenkins
​
# 看到以下信息说明启动成功:
# Jenkins is fully up and running

Ctrl + C 退出日志查看

步骤6:获取Jenkins初始管理员密码

bash 复制代码
# 方式1:从日志中查看
docker compose logs jenkins | grep -A 5 "initialAdminPassword"
​
# 方式2:从容器内查看
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
​
# 方式3:从持久化目录查看
cat jenkins_home/secrets/initialAdminPassword

复制显示的密码 ,例如:a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6


第四部分:配置服务器防火墙和安全组

步骤1:配置Ubuntu防火墙(UFW)

bash 复制代码
# 检查防火墙状态
sudo ufw status
​
# 如果防火墙未启用,先启用
sudo ufw enable
​
# 允许SSH(防止被锁在外面!)
sudo ufw allow 22/tcp
​
# 允许Jenkins Web端口
sudo ufw allow 8080/tcp
​
# 允许Jenkins代理端口(如果需要)
sudo ufw allow 50000/tcp
​
# 重新加载防火墙
sudo ufw reload
​
# 查看规则
sudo ufw status numbered

步骤2:配置阿里云安全组

  1. 登录阿里云控制台

  2. 进入 ECS控制台

  3. 选择你的实例

  4. 点击 安全组配置

  5. 点击 配置规则入方向

  6. 点击 手动添加快速添加

添加以下规则:

端口范围 授权对象 说明
22/22 0.0.0.0/0 SSH
8080/8080 0.0.0.0/0 Jenkins Web
50000/50000 0.0.0.0/0 Jenkins Agent

注意: 0.0.0.0/0 表示允许所有IP访问,生产环境建议限制特定IP


第五部分:访问和初始化Jenkins

步骤1:访问Jenkins

在浏览器中打开:

复制代码
http://你的服务器公网IP:8080/jenkins

例如:http://186.141.86.234:8080/jenkins

步骤2:解锁Jenkins

  1. 页面会显示 "Unlock Jenkins"

  2. 粘贴之前获取的初始管理员密码

  3. 点击 Continue

步骤3:安装插件

选择 "Install suggested plugins"(安装推荐插件)

等待插件安装完成(约5-10分钟,取决于网络速度)

推荐额外安装的插件:

  • Git plugin(通常已包含)

  • Pipeline plugin(通常已包含)

  • HTML Publisher(生成测试报告)

  • Docker plugin(Docker支持)

  • Docker Pipeline(Docker Pipeline支持)

  • Blue Ocean(现代化UI)

  • Chinese (Simplified) plugin(中文支持)

步骤4:创建管理员用户

填写以下信息:

  • 用户名:admin(或自定义)

  • 密码:设置强密码

  • 全名:你的名字

  • 邮箱:你的邮箱

点击 Save and Continue

步骤5:实例配置

Jenkins URL会自动填充为:http://你的IP:8080/Jenkins

点击 Save and Finish

步骤6:开始使用Jenkins

点击 Start using Jenkins

恭喜!🎉 Jenkins已经成功安装并运行!

之后应该会写配置代码仓库然后定时构建之类的,bye~

相关推荐
一叶龙洲5 小时前
wslg打开Ubuntu24.04默认打开图形界面
linux·服务器·数据库·ubuntu
敖行客 Allthinker7 小时前
Parallels Ubuntu虚拟机项目如何让手机访问?完整解决方案
linux·运维·ubuntu
BullSmall8 小时前
Anolis OS 8.10 完整安装 Docker CE(生产可用,解决 podman 冲突)
docker·容器·podman
keyipatience8 小时前
线程栈与TLS和线程互斥
java·linux·服务器·开发语言·ubuntu
观山岳五楼9 小时前
Ubuntu 24 怎么使用Ubuntu 20 的镜像源
linux·运维·ubuntu
辰痕~10 小时前
物理机装Linux操作系统(Ubuntu为例)
linux·ubuntu
梦梦代码精11 小时前
开源AI应用平台BuildingAI解析:插件化架构、应用市场与热门案例
人工智能·机器学习·docker·开源
IT瑞先生13 小时前
Docker快速部署Mysql的三种方法——实操篇
mysql·adb·docker
梦远青城14 小时前
Docker 部署python的paddle进行OCR文字识别身份证
python·docker·ocr·paddle·身份证识别
weixin_3077791315 小时前
Linux下Jenkins数据故障的系统化排查Shell脚本
linux·运维·服务器·jenkins