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

185 阅读3分钟

前言

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

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

  1. 节约了服务器内存,不需要单独部署 Jenkins。(Jenkins内存占用较多)
  2. 方便管理,代码和部署放在同一个地方,同时也支持其他的工作协同。
  3. Coding也支持其他的部署方式,同时文档也较为齐全。
  4. Coding自带的齐全的编译环境,不用单独给每一个项目去配置编译环境。例如:SpringBoot需要的Maven、Vue需要的Node环境,甚至是运行Jenkins的JDK环境。

1. 配置服务器环境

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

  1. Linux服务器安装docker——记录具体指令和截图

  2. Docker安装MySQL——图文细节和一些指令的作用说明使用

  3. Docker安装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分钟。

在这里插入图片描述

在这里插入图片描述

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

结语

使用Coding(Jenkinsfile)集成 Docker 自动化部署 Springboot 项目的简易配置流程梳理到这里就完成了。希望能够帮助到大家!