Docker 安装 Jenkins 最新版 + Gitee 自动化部署 Spring Boot 项目到远程服务器详细教程
一、环境准备
服务器要求:
- 一台 Linux 服务器(Ubuntu/CentOS 等,本文以 Ubuntu 22.04 为例)
- 已安装 Docker 和 Docker Compose
- 开放端口:8080(Jenkins)、50000(Jenkins Agent)
- 远程目标服务器(需开放 SSH 端口)
软件依赖:
- Docker 20.10+
- JDK 11(Spring Boot 项目要求)
- Maven 3.8+(可选,可用容器内 Maven)
二、安装 Jenkins 最新版(Docker 方式)
1. 创建数据卷(持久化存储)
mkdir -p /opt/jenkins_home
chmod 777 /opt/jenkins_home # 确保容器有写入权限
2. 拉取并运行 Jenkins 容器
docker run -d \
--name jenkins \
--restart=always \
-u root \
-p 8080:8080 \
-p 50000:50000 \
-v /opt/jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \ # 允许容器内使用 Docker 命令
jenkins/jenkins:lts-jdk11 # 使用官方 LTS 镜像
3. 查看初始密码
docker logs jenkins # 找到类似 "Please use the following password to proceed to installation" 的输出
4. 访问 Jenkins
浏览器打开 http://your-server-ip:8080
,输入初始密码完成安装。
三、配置 Jenkins 基础环境
1. 安装推荐插件
首次登录后选择 “Install suggested plugins”,等待插件安装完成。
2. 安装必要插件
进入 Manage Jenkins → Plugins → Available plugins,搜索并安装:
- Gitee Plugin(连接 Gitee 仓库)
- Docker Pipeline(Docker 集成)
- Publish Over SSH(远程服务器部署)
- Maven Integration(构建 Java 项目)
3. 配置全局工具
- JDK:进入 Manage Jenkins → Tools → JDK,勾选自动安装或指定路径。
- Maven:同上,选择版本(如 3.8.6)。
- Git:确保 Git 路径正确(默认
/usr/bin/git
)。
四、连接 Gitee 仓库
1. 生成 Gitee SSH 密钥
在 Jenkins 容器内执行:
docker exec -it jenkins bash
ssh-keygen -t rsa -C "jenkins@gitee.com" # 容器内生成密钥,回车默认路径
cat /var/jenkins_home/.ssh/id_rsa.pub # 复制公钥
2. 添加公钥到 Gitee
登录 Gitee → 个人设置 → SSH 公钥 → 粘贴公钥。
3. 配置 Jenkins 凭据
进入 Manage Jenkins → Credentials → System → Global credentials → Add Credentials:
- 类型:SSH Username with private key
- ID:
gitee-ssh
- Private Key:从容器中复制私钥
/var/jenkins_home/.ssh/id_rsa
五、配置远程服务器 SSH 连接
1. 在目标服务器生成 SSH 密钥(若未配置)
ssh-keygen -t rsa # 在目标服务器执行
2. Jenkins 配置 SSH Server
进入 Manage Jenkins → System Configuration → Publish over SSH:
- Name:
deploy-server
- Hostname:目标服务器 IP
- Username:远程用户名(如
root
) - Remote Directory:
/data/app
(部署目录) - Advanced → 勾选 Use password authentication 或粘贴私钥
六、创建 Jenkins 流水线任务
1. 新建任务
- 任务名称:
springboot-gitee-docker
- 类型:Pipeline
2. 配置 Gitee 仓库
- SCM:选择 Git
- Repository URL:
git@gitee.com:your-username/your-repo.git
- Credentials:选择之前创建的
gitee-ssh
- Branches:
*/master
(按需修改)
3. 配置 Pipeline 脚本
在 Pipeline 部分选择 Pipeline script from SCM:
- SCM:Git
- Script Path:
Jenkinsfile
(需在仓库根目录创建此文件)
4. 创建 Jenkinsfile(示例)
pipeline {
agent any
environment {
DOCKER_REGISTRY = "your-registry.com" // 可选:私有镜像仓库
REMOTE_DIR = "/data/app"
}
stages {
// 阶段 1:代码拉取与编译
stage('Checkout & Build') {
steps {
git credentialsId: 'gitee-ssh', url: 'git@gitee.com:your-username/your-repo.git'
sh 'mvn clean package -DskipTests'
}
}
// 阶段 2:构建 Docker 镜像
stage('Docker Build') {
steps {
script {
docker.build("my-springboot-app:${env.BUILD_ID}").push()
}
}
}
// 阶段 3:部署到远程服务器
stage('Deploy') {
steps {
sshPublisher(
publishers: [
sshPublisherDesc(
configName: 'deploy-server',
transfers: [
sshTransfer(
sourceFiles: 'target/*.jar',
removePrefix: 'target',
remoteDirectory: "$REMOTE_DIR",
execCommand: """
cd $REMOTE_DIR
docker stop my-app || true
docker rm my-app || true
docker run -d --name my-app -p 8080:8080 my-springboot-app:${env.BUILD_ID}
"""
)
]
)
]
)
}
}
}
}
七、配置 Gitee Webhook 自动化触发
1. Jenkins 生成 API Token
进入用户设置 → API Token → Add new Token → 记录生成的 Token。
2. Gitee 配置 Webhook
进入仓库 → 管理 → WebHooks → 添加 WebHook:
- URL:
http://<jenkins-ip>:8080/gitee-project/<project-name>
- 密钥:在 Jenkins 任务中配置的 Gitee 插件 Token
- 触发事件:选择 Push 事件
3. Jenkins 任务启用触发器
在任务配置中勾选 Gitee webhook → 输入与 Gitee Webhook 相同的密钥。
八、验证部署流程
1. 手动触发构建
在 Jenkins 任务页面点击 立即构建。
2. 观察日志
控制台输出应显示:
- 代码拉取成功
- Maven 编译无错误
- Docker 镜像构建成功
- 文件传输到远程服务器
- 容器启动成功
3. 访问服务
在目标服务器执行 docker ps
确认容器运行。
访问 http://remote-server-ip:8080/your-api
验证接口。
九、常见问题解决
1. Docker 权限问题
- 错误:
Got permission denied while trying to connect to the Docker daemon socket
- 解决:确保容器运行时有
-v /var/run/docker.sock:/var/run/docker.sock
。
2. SSH 连接超时
- 检查目标服务器防火墙是否开放 SSH 端口。
- 确认 Jenkins 的 SSH 配置中私钥正确。
3. Gitee Webhook 不触发
- 检查 Jenkins URL 是否为外网可访问地址。
- 在 Jenkins 系统设置中允许匿名读取权限(测试时可临时开启)。
Jenkins 新建 Maven 项目发布 Spring Boot 到远程服务器详细流程(补充篇)
一、新建 Maven 项目
进入 Jenkins 主页点击左侧菜单 新建 Item → 输入任务名称(例如 springboot-maven-deploy
)→ 选择 Maven 项目 → 点击确定。
二、配置源码管理(Gitee 仓库)
- 配置 Git 仓库:在 源码管理 部分选择 Git:
- Repository URL:
git@gitee.com:your-username/your-repo.git
(SSH 地址) - Credentials:选择之前创建的
gitee-ssh
(Gitee SSH 密钥凭据) - Branch:
*/master
(按需修改分支)
- Repository URL:
- 配置代码拉取策略:勾选 Poll SCM(定时检查代码更新,可选)或后续通过 Gitee Webhook 自动触发(推荐)。
三、配置构建触发器(自动化构建)
- Gitee Webhook 自动触发:在 构建触发器 部分勾选 Gitee webhook → 输入与 Gitee 仓库 Webhook 中相同的密钥。
- 手动触发(可选):保留 Build whenever a SNAPSHOT dependency is built(按需启用)。
四、配置 Maven 构建环境
- 指定 Maven 版本:在 Build 部分的 Root POM 输入:
pom.xml
(默认根目录)。- Maven 版本:选择在 Global Tool Configuration 中配置的 Maven(如 Maven 3.8.6)。
- Goals and options:输入
clean package -DskipTests
(跳过测试,加速构建)。
- 高级配置(按需):
- Settings file:指定自定义
settings.xml
(如私有仓库配置)。 - Global MAVEN_OPTS:可添加内存参数(例如
-Xmx512m -XX:MaxPermSize=256m
)。
- Settings file:指定自定义
五、配置 Post Steps(部署到远程服务器)
- 添加构建后操作:在 Post Steps 部分选择 Run only if build succeeds → 点击 Add post-build step → 选择 Send files or execute commands over SSH。
- 配置 SSH Server:
- Name:选择之前配置的
deploy-server
(远程服务器连接)。 - Source files:
target/*.jar
(编译后的 JAR 包路径)。 - Remove prefix:
target
(去除路径前缀,避免远程目录嵌套)。 - Remote directory:
/data/app
(目标服务器部署目录,需提前创建)。 - Exec command:输入部署脚本(示例):
#!/bin/bash cd /data/app # 备份旧版本(可选) cp your-app.jar your-app.jar.bak # 停止并删除旧容器 docker stop my-springboot-app || true docker rm my-springboot-app || true # 启动新容器(假设已提前构建镜像) docker run -d --name my-springboot-app -p 8080:8080 -v /data/app/your-app.jar:/app.jar openjdk:11 java -jar /app.jar
- Name:选择之前配置的
六、保存并触发构建
- 点击页面底部 Save 保存所有配置。
- 返回任务页面 → 点击 立即构建。
- 查看控制台输出,确认以下流程:
[INFO] Building jar: /var/jenkins_home/workspace/springboot-maven-deploy/target/your-app.jar SSH: Connecting from host [jenkins] SSH: Transferred 1 file(s) Executing script on remote server... [SUCCESS] Container my-springboot-app started
七、结合 Docker 镜像构建(高级)
若需在 Jenkins 中直接构建 Docker 镜像并推送到仓库,需额外配置:
- 在 Post Steps 中添加 Docker 构建命令:
# 构建 Docker 镜像 docker build -t my-registry.com/your-app:${BUILD_NUMBER} . # 推送镜像(需提前登录仓库) docker push my-registry.com/your-app:${BUILD_NUMBER} # 在远程服务器拉取并运行 ssh root@remote-server "docker pull my-registry.com/your-app:${BUILD_NUMBER} && docker run -d -p 8080:8080 my-registry.com/your-app:${BUILD_NUMBER}"
- 配置 Docker 凭据:
- 在 Jenkins 凭据中添加 Docker 仓库账号(Username with password 类型)。
- 在 Exec command 中添加登录命令:
docker login -u $DOCKER_USER -p $DOCKER_PASSWORD my-registry.com
八、常见问题解决
- Maven 依赖下载失败:
- 现象:
Could not resolve dependencies
- 解决:检查
settings.xml
配置,或添加阿里云镜像:<mirror> <id>aliyun</id> <url>https://maven.aliyun.com/repository/public</url> <mirrorOf>central</mirrorOf> </mirror>
- 现象:
- SSH 传输文件失败:
- 现象:
SSH: Transferred 0 file(s)
- 解决:检查 Source files 路径是否正确,确认编译后的 JAR 包是否存在。
- 现象:
- Docker 命令权限不足:
- 现象:
Permission denied while trying to connect to Docker daemon
- 解决:将 Jenkins 用户加入
docker
组:sudo usermod -aG docker jenkins
- 现象:
最终效果
每次向 Gitee 仓库提交代码后,Jenkins 自动拉取代码 → Maven 编译 → 生成 JAR 包 → 通过 SSH 传输到远程服务器 → 重启 Docker 容器完成发布。