当前位置: 首页 > article >正文

Coding(Jenkinsfile)+ Docker 自动化部署 Springboot —— 图文细节和一些注意事项说明

前言:本章讲述一下我使用Coding(Jenkinsfile)+ Docker部署Springboot项目过程,记录图文细节和一些需要注意的问题。

说明:为什么要使用Coding去集成Docker?

  1. 节约了服务器内存,不需要单独部署 Jenkins。(Jenkins内存占用较多)
  2. 方便管理,代码和部署放在同一个地方,同时也支持其他的工作协同。
  3. Coding也支持其他的部署方式,同时文档也较为齐全。

1. 配置服务器环境

(前面几篇已经配置过了,可以作为参考)

  1. Docker安装的图文细节

  2. MySQL安装的图文细节

  3. Redis安装的图文细节


2. 创建一个Springboot项目

1. 这里我使用一个优秀的开源项目为例:芋道源码

(运行项目需要安装JDK,MySQL,Redis,可以参考官方文档运行)

2. 拉取代码,修改配置

(这里我使用的环境是JDK21MySQL8.0Redis7.4

  1. 拉取代码之后切换分支到master-jdk17(JDK8使用默认的master分支)
  2. 等待下载Maven依赖,同时修改application文件
    1. application.yamlspring.profiles.active修改为dev
      在这里插入图片描述

    2. application-dev.yamlMySQLRedis配置全部修改为自己的服务
      在这里插入图片描述

3. 运行项目,访问http://127.0.0.1:48080/

在这里插入图片描述
在这里插入图片描述

(如图:正常运行启动,如果不能正常启动,可以参考源码文档排查问题)


3. 把代码提交到Coding

1. 在Coding本地创建仓库
2. 修改本地代码的Git远程地址
3. 推送到Coding仓库上

4. 编写Jenkinsfile脚本

1. 选择: 构建计划 > java + Spring +Docker

在这里插入图片描述

2. 开始创建计划

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

如果你使用的系统较新的系统,推荐使用账号和密码生成凭证。

(刚开始的时候我是使用的是密钥,但是我的系统是CentOS9,不兼容较旧的Jenkins插件,这里踩坑了,我在官方的文档里也找到错误说明。)

在这里插入图片描述

3. 流程配置

在这里插入图片描述

  • 文本编辑器里我是这样配置的
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}"
            // 切换到 yudao-server 目录
            dir('yudao-server') {
              // 构建 Docker 镜像
              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'

              ),
              ]) {
                // SSH 登录用户名
                remoteConfig.user = userName
                // 密码登录
                remoteConfig.password = password
                  sshCommand(
                    remote: remoteConfig,
                    command: "docker rm -f spring-boot | true",
                    sudo: true,
                  )
                  // DOCKER_IMAGE_VERSION 中涉及到 GIT_LOCAL_BRANCH / GIT_TAG / GIT_COMMIT 的环境变量的使用
                  // 需要在本地完成拼接后,再传入到远端服务器中使用
                  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}"
        }
      }

提醒:如果你使用的也是jdk17以上的版本,需要注意编译的时候不要使用默认的构建环境因为maven版本较低,jdk17以上的版本会报错(我是用的脚本是jdk21的编译环境,如果你使用的是jdk8,需要修改第19行代码:image public/docker/openjdk:8-2024.03

4. 修改触发规则
  • 根据你的需求进行修改,也可以使用默认的
    在这里插入图片描述
5. 修改变量和缓存
  • 根据你的需求进行修改
    在这里插入图片描述
6. 修改通知提醒
  • 根据你的需求进行修改
7. 修改权限方案
  • 根据你的需求进行修改

5. 开始构建

由于系统和环境的不同,可能出现各种问题,配置的时候尽量不加太多变量。

在这里插入图片描述


6. 构建成功

  • 这里需要等待5-10分钟。

在这里插入图片描述

  • 访问地址:http://xxx.xxx.xxx.xxx:48080 (xxx替换为服务器IP)

在这里插入图片描述

  • 如图:可以正常访问到后台接口,部署成功

结束语:使用Coding(Jenkinsfile)集成 Docker 自动化部署 Springboot 项目的基础配置大致上就是这样了。因为步骤较多,所以有很多地方就简略的用图文表达了。

		——如果觉得文章有用💪,点个赞,支持一下👏!——

http://www.kler.cn/a/454313.html

相关文章:

  • 无人零售 4G 工业无线路由器赋能自助贩卖机高效运营
  • Seata AT 模式两阶段过程原理解析【seata AT模式如何做到对业务的无侵入】
  • 电子电气架构 --- 什么是自动驾驶技术中的域控制单元(DCU)?
  • 云计算时代携程的网络架构变迁
  • RTMW:实时多人2D和3D 全人体姿态估计
  • PTA数据结构编程题7-1最大子列和问题
  • 【NIFI】实现ORACLE->ORACLE数据同步
  • Springboot 整合 Duird
  • 【计算机网络安全】加密解密及其在ssh上的应用
  • 面试场景题系列:设计支付系统
  • UnoCSS 的作用与特点
  • idea配置gitee仓库
  • 讯飞语音听写WebApi(流式)【React Native版】
  • 报警推送消息升级的名厨亮灶开源了。
  • 【Django篇】--动手实践Django基础知识
  • 《Go 语言变量》
  • C语言学习笔记(1)
  • 游戏引擎学习第62天
  • Maven核心概念总结
  • Blender高效优化工作流程快捷小功能插件 Haggis Tools V1.1.5
  • jvm排查问题-实践追踪问题 与思路--堆内堆外内存泄漏排查方针
  • HarmonyOS NEXT 实战之元服务:静态案例效果---咖啡制作实况窗
  • css
  • 随时随地编码,高效算法学习工具—E时代IDE
  • PDF书籍《手写调用链监控APM系统-Java版》第10章 插件与链路的结合:SpringBoot环境插件获取应用名
  • Uniapp 微信小程序检测新版本并更新