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

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 anystages {stage('检出') {steps {checkout([$class: 'GitSCM',branches: [[name: GIT_BUILD_REF]],userRemoteConfigs: [[url: GIT_REPO_URL,credentialsId: CREDENTIALS_ID]]])}}stage('编译') {agent {docker {reuseNode trueregistryUrl '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 = 22remoteConfig.allowAnyHosts = truewithCredentials([usernamePassword(credentialsId: "${REMOTE_CRED}",passwordVariable: 'password',usernameVariable: 'userName'),]) {// SSH 登录用户名remoteConfig.user = userName// 密码登录remoteConfig.password = passwordsshCommand(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.lryc.cn/news/510446.html

相关文章:

  • docker django uwsgi 报错记录
  • 数据分析思维(五):分析方法——假设检验分析方法
  • 【ES6复习笔记】集合Set(13)
  • 基础爬虫案例实战
  • 深度学习工作:从追求 SoTA 到揭示新现象
  • 学习记录—正则表达式-基本语法
  • 智慧农业物联网传感器:开启农业新时代
  • 普通人怎么入门学习并使用AI?
  • Java中处理if-else的几种高级方法
  • 前端知识补充—CSS
  • 企业架构学习笔记-数字化转型
  • Linux网络——TCP的运用
  • Vue3之状态管理Vuex
  • DPO(Direct Preference Optimization)算法解释:中英双语
  • Hostapd2.11解析笔记
  • js控制文字溢出显示省略号
  • WPF+MVVM案例实战与特效(四十七)-实现一个路径绘图的自定义按钮控件
  • 操作002:HelloWorld
  • odoo中@api.model, @api.depends和@api.onchange 装饰器的区别
  • 有哪些精益工具可以帮助企业实现转型?
  • 以太网帧结构
  • QT调用Sqlite数据库
  • 前端
  • 【Git】—— 使用git操作远程仓库(gitee)
  • Paddler负载均衡器
  • OSCP - Proving Grounds - Slort
  • YoloV9改进策略:Head改进|DynamicHead,利用注意力机制统一目标检测头部|即插即用
  • BFD综合详细实验配置案例
  • 自然语言处理与知识图谱的融合与应用
  • c# RSA加解密工具,.netRSA加解密工具