Docker 安装 Jenkins 最新版 + Gitee 自动化部署 Spring Boot 项目到远程服务器详细教程

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(按需修改分支)
  • 配置代码拉取策略:勾选 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)。

五、配置 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
      

六、保存并触发构建

  • 点击页面底部 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 容器完成发布。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wey chan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值