从 Coding (Jenkinsfile) 到 Docker:全流程自动化部署 Spring Boot 实战指南(简化篇)

前言

本文记录使用 Coding (以 Jenkinsfile 为核心) 和 Docker 部署 Springboot 项目的过程,分享设置细节和一些注意问题。


1. 配置服务器环境

在实施此过程前,确保服务器已配置好 Docker、MySQL 和 Redis,可参考下列链接进行操作:

  1. Docker 安装图文细节
  2. MySQL 安装图文细节
  3. Redis 安装图文细节

2. 创建一个 Springboot 项目

示例项目:Ruoyi-Vue-Pro 开源框架

此框架需要 JDK、MySQL 和 Redis,参考官方文档完成配置。

环境配置:
  1. 以 JDK 21、MySQL 8.0、Redis 7.4 为例
    • 拉取代码,切换分支为master-jdk17 (如需 JDK 8,则使用默认分支 master),完成 Maven 依赖下载。
    • 修改配置文件:
      • application.yaml 中的 spring.profiles.active 设置为 dev,确保配置文件同步。
      • 根据服务器上实际的 MySQL 和 Redis 地址,修改 application-dev.yaml 配置。
    • 测试配置:
      运行项目,可访问 http://127.0.0.1:48080/ 确认是否正常启动,解决各种启动问题。

3. 将代码提交到 Coding

  1. 创建 Coding 本地仓库,实现将 Git 远程地址修改后上传。
  2. 确保已提交到指定分支。

4. 编写 Jenkinsfile 脚本

核心配置
  • 选择构建计划:Java + Spring + Docker,按需配置流程和派配详情如下:
groovy 复制代码
pipeline {
  agent any
  stages {
    stage('检出') {
      steps {
        checkout([$class: 'GitSCM',
        branches: [[name: GIT_BUILD_REF]],
        userRemoteConfigs: [[
          url: GIT_REPO_URL,
          credentialsId: CREDENTIALS_ID
        ]]])
      }
    }
    stage('编译') {
      agent {
        docker {
          reuseNode true
          registryUrl 'https://coding-public-docker.pkg.coding.net'
          image 'public/docker/openjdk:21-2024.03'
          args '-v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker --entrypoint='
        }
      }
      steps {
        sh 'mvn clean install -DskipTests -Dmaven.test.skip=true'
      }
    }
    stage('构建镜像并推送到 CODING Docker 制品库') {
      steps {
        script {
          docker.withRegistry(
            "${CCI_CURRENT_WEB_PROTOCOL}://${CODING_DOCKER_REG_HOST}",
            "${CODING_ARTIFACTS_CREDENTIALS_ID}"
          ) {
            echo "Current directory: ${env.WORKSPACE}"
            dir('yudao-server') {
              def dockerImage = docker.build("${CODING_DOCKER_IMAGE_NAME}:${DOCKER_IMAGE_VERSION}", "-f Dockerfile ${DOCKER_BUILD_CONTEXT}")
              dockerImage.push()
            }
          }
        }
      }
    }
    stage('部署到远程服务') {
      steps {
        script {
          def remoteConfig = [:]
          remoteConfig.name = "my-remote-ltby"
          remoteConfig.host = "${REMOTE_HOST}"
          remoteConfig.port = 22
          remoteConfig.allowAnyHosts = true

          withCredentials([
              usernamePassword(
                credentialsId: "${REMOTE_CRED}",
                passwordVariable: 'password',
                usernameVariable: 'userName'
              ),
            ]) {
                remoteConfig.user = userName
                remoteConfig.password = password
                sshCommand(
                  remote: remoteConfig,
                  command: "docker rm -f spring-boot | true",
                  sudo: true,
                )
                DOCKER_IMAGE_URL = sh(
                  script: "echo ${CODING_DOCKER_REG_HOST}/${CODING_DOCKER_IMAGE_NAME}:${DOCKER_IMAGE_VERSION}",
                  returnStdout: true
                )
                sshCommand(
                  remote: remoteConfig,
                  command: "docker run -d -p 48080:48080 --name spring-boot ${DOCKER_IMAGE_URL}",
                  sudo: true,
                )
                echo "部署成功,请访问 http://${REMOTE_HOST}:48080 查看效果"
              }
          }
        }
      }
    }
  }
  environment {
    CODING_DOCKER_REG_HOST = "${CCI_CURRENT_TEAM}-docker.pkg.${CCI_CURRENT_DOMAIN}"
    CODING_DOCKER_IMAGE_NAME = "${PROJECT_NAME.toLowerCase()}/${DOCKER_REPO_NAME}/${DOCKER_IMAGE_NAME}"
  }
}

5. 开始构建和测试

根据需求设置解决问题,确保部署正常。


6. 构建成功与访问

  1. 等待时间:一般构建需要 5-10 分钟,请耐心等待。
  2. 访问地址 :访问部署的服务,地址格式为 http://<服务器IP>:48080,例如:
  3. 成功示例截图
  • 服务正常运行时的页面应如图所示。

完整细节篇:Coding + Docker + SpringBoot集成自动化部署


结束语

通过 Coding (Jenkinsfile) 集成 Docker 自动化部署 Springboot 项目,可以大幅提高开发与部署效率,尤其是对小型团队而言,集中管理代码和部署是一种高效方案。

------如果此文章对您有帮助,👏点赞支持一下!------

相关推荐
逝水无殇2 小时前
C# 异常处理详解
开发语言·后端·c#
其实防守也摸鱼2 小时前
运维--学习阶段问题解答(1)(自测)
linux·运维·服务器·数据库·学习·自动化·命令模式
懒鸟一枚3 小时前
深入理解 Linux 内存、Swap 交换分区与分页机制的关系
java·linux·数据库
GJGCY3 小时前
财务智能体落地实践:RPA、大模型与规则引擎如何构建业财自动化闭环?
经验分享·ai·自动化·财务·智能体
我命由我123454 小时前
执行 Gradle 指令报错,无法将“grep”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
考虑考虑4 小时前
Sentinel安装
java·后端·微服务
IT_陈寒4 小时前
SpringBoot自动配置失灵?你可能忘了这个关键注解
前端·人工智能·后端
碎碎念_4924 小时前
SpringBoot + Vue 前后端分离从 0 到 1 完整环境配置流程
vue.js·spring boot·后端
逝水无殇5 小时前
C# 文件的输入与输出详解
开发语言·数据库·后端·c#
YIAN5 小时前
从手写 Agent 工具到 MCP 协议:一文搞懂大模型跨进程跨语言工具调用
后端·agent·mcp