2024最新 Jenkins + Docker 实战教程(四) - 编写自己的Springboot项目实现自动化部署

news2024/11/19 18:40:37

在这里插入图片描述

😄 19年之后由于某些原因断更了三年,23年重新扬帆起航,推出更多优质博文,希望大家多多支持~
🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志
🎐 个人CSND主页——Micro麦可乐的博客
🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门到实战
🌺《RabbitMQ》本专栏主要介绍使用JAVA开发RabbitMQ的系列教程,从基础知识到项目实战
🌸《设计模式》专栏以实际的生活场景为案例进行讲解,让大家对设计模式有一个更清晰的理解
💕《Jenkins实战》专栏主要介绍Jenkins+Docker+Git+Maven的实战教程,让你快速掌握项目CI/CD,是2024年最新的实战教程
如果文章能够给大家带来一定的帮助!欢迎关注、评论互动~

Jenkins + Docker + Git + Maven 实战教程(四) - 编写自己的Springboot项目实现自动化部署

  • 前言
  • 构建前准备
  • 开始配置Jenkins
  • 构建测试
  • 结语

前言

上一章节中虽然我们实现了自动化的部署,但是官方的DEMO中并没有Dockerfile文件,我们还是需要手动构建,本章节我们自己编写一个简单的SpringBoot项目实现自动化部署,从代码编写到上传Gitee再到Jenkins自动化部署。

整体流程如下:

在这里插入图片描述

构建前准备

在开始Jenkins自动化部署前,我们需要执行如下操作

1、注册Gitee账号
2、创建Git仓库
3、IDEA安装Gitee插件
4、Gitee插件配置账户信息
5、IDEA创建SpringBoot项目
6、SpringBoot项目编写Dockerfile文件
7、get push项目到Gitee

注册Gitee账号以及创建仓库这里我们就忽略了

博主以Mac为例,找到 IntelliJ IDEA - Preferences - Plugins 搜索gitee安装插件
在这里插入图片描述
Gitee插件配置账户信息,可以选择授权登陆以及账号密码登陆等,大家根据情况自行选择
在这里插入图片描述
创建一个简单的SpringBoot项目
在这里插入图片描述
项目根目录创建Dockerfile文件

FROM openjdk:11
# 设置工作目录
WORKDIR /app
# 将宿主机的目录挂载到容器的/app目录
VOLUME /app
# 复制.jar文件到工作目录
COPY jenkins-demo-project-0.0.1-SNAPSHOT.jar /app/jenkins-demo.jar
# 设置容器启动时执行的命令
CMD ["java", "-jar", "jenkins-demo.jar" ,"--server.port=9090"]

调整pom.xml设置maven将Dockerfile一并打包到target目录下
在这里插入图片描述
最后通过IDEA提交代码到Gitee仓库
由于博主的仓库是公开的,小伙伴们也可以直接使用博主的demo 【仓库地址】

开始配置Jenkins

找到左侧菜单 - 新建任务 - jenkins-demo
在这里插入图片描述
创建完成后,点击对应任务进入
在这里插入图片描述
在左侧找到配置
在这里插入图片描述
配置Git Repository URL
在这里插入图片描述
找到 Post Steps 选项,,选择仅构建成功执行
在这里插入图片描述
设置我们的sell命令,需要判断对应容器是否存在,存在则需要停止并删除

# 默认操作在Jenkins工作目录下的项目名目录 即 workspace/jenkins-demo/target
cd target
#构建镜像
docker build -t jenkins-demo .
# 使用docker ps和grep来检查容器是否存在
if docker ps -a | grep "my-jenkins-demo" > /dev/null; then
    echo "容器存在"
    #容器存在则停止并删除容器
    docker stop my-jenkins-demo
    docker rm my-jenkins-demo
else
    echo "容器不存在"
fi
#运行容器
docker run -d -p 9090:9090 --name my-jenkins-demo jenkins-demo

注意
上一章节我们已经处理了将宿主机的Docker引擎挂载到Jenkins容器上,即Jenkins容器调用宿主机的Docker
如果你没有看过上一章教程 可以点击 查看上一章内容

构建测试

配置完成,点击左侧立即构建,在下方的构建历史点击对应构建编号进入查看控制台输出
在这里插入图片描述
输出如下
在这里插入图片描述
测试访问
在这里插入图片描述

结语

本章节从创建SprongBoot项目 -> 上传gitee -> Jenkins自动化部署进行演示,小伙伴们可以跟着博主的教程操作自己走一遍,过程中如果出现其它问题,欢迎留言大家一起交流!

下一章节:2024最新 Jenkins + Docker 实战教程(五) - 配置Webhooks实现自动构建及运行项目


在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1683305.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

v-md-editor和SSE实现ChatGPT的打字机式输出

概述 不论是GPT还是文心一言,在回答的时候类似于打字机式的将答案呈现给我们,这样的交互一方面比较友好,另一方面,当答案比较多、生成比较慢的时候也能争取一些答案的生成时间。本文后端使用express和stream,使用SSE将…

一文读懂Linux

前言 为了便于理解,本文从常用操作和概念开始讲起。虽然已经尽量做到简化,但是涉及到的内容还是有点多。在面试中,Linux 知识点相对于网络和操作系统等知识点而言不是那么重要,只需要重点掌握一些原理和命令即可。为了方便大家准…

【BSP开发经验】用户态栈回溯技术

前言 在内核中有一个非常好用的函数dump_stack, 该函数在我们调试内核的过程中可以打印出函数调用关系,该函数可以帮助我们进行内核调试,以及让我们了解内核的调用关系。同时当内核发生崩溃的时候就会自己将自己的调用栈输出到串口。 栈回溯非常有利于我…

Java基础(三)- 多线程、网络通信、单元测试、反射、注解、动态代理

多线程基础 线程:一个程序内部的一条执行流程,只有一条执行流程就是单线程 java.lang.Thread代表线程 主线程退出,子线程存在,进程不会退出 可以使用jconsole查看 创建线程 有多个方法可以创建线程 继承Thread类 优点&#x…

金丝雀发布(灰度发布)介绍 及 声明式管理方法简介

目录 一 应用发布策略 1,滚动发布(k8s默认) 2,蓝绿发布 3,金丝雀发布 二 金丝雀发布(Canary Release) (灰度发布) 1,金丝雀发布图解 2&#xff0…

LeetCode700二叉搜索树中的搜索

题目描述 给定二叉搜索树(BST)的根节点 root 和一个整数值 val。你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null 。 解析 最基本的二叉搜索树的应用,递归或者while循环都可以…

PostgreSQL 连接和管理问题解决方案

在使用PostgreSQL数据库时,可能会遇到一些连接和管理方面的问题。本文将详细介绍如何解决“Peer authentication failed”和“password authentication failed”错误,并提供卸载PostgreSQL的方法。 问题一:Peer Authentication Failed Peer …

2024最新彩虹聚合DNS管理系统源码v1.3 全开源

简介: 2024最新彩虹聚合DNS管理系统源码v1.3 全开源 聚合DNS管理系统可以实现在一个网站内管理多个平台的域名解析,目前已支持的域名平台有:阿里云、腾讯云、华为云、西部数码、DNSLA、CloudFlare。 本系统支持多用户,每个用户可…

创建一个python的Django项目文件

创建一个python的Django项目文件(内含conda) 文章目录 创建一个python的Django项目文件(内含conda)前言一、conda环境的下载二、配置conda的环境变量三、激活管理环境四、下载Django五、创建Django项目文件六、启动Django文件七、用pycharm直接创建Django文件 前言 大家好,今天…

WEB转Flutter基础学习笔记(内含vue和flutter对比)

一、Widget简要概括 如果说Vue的UI是template包裹的一个个组件 那么Flutter的UI就是baseBuild中return出来的嵌套罗列的widget StatelessWidget 用于不需要维护状态的场景,它通常在build方法中通过嵌套其他 widget 来构建UI,在构建过程中会递归的构建其…

Linux: network: send 失败的时候要不要close socket?

最近遇到一个例子,说有zerowindow出现;出现的原因是接收方的CPU被其他程序吃光,导致socket的read函数处理非常慢。说明接收端的接收缓存不够用。发送端自然而然的要停止发送。 但是如果在接收方的recv buff,以及发送方的send buf…

【深度学习】YOLOv8训练,交通灯目标检测

文章目录 一、数据处理二、环境三、训练 一、数据处理 import traceback import xml.etree.ElementTree as ET import os import shutil import random import cv2 import numpy as np from tqdm import tqdmdef convert_annotation_to_list(xml_filepath, size_width, size_he…

excel里如何将数据分组转置?

这个表格怎样转换为下表?按照国家来分组,把不同年份对应的不同序列值进行转置?? 这演示用数据透视表就完成这个数据转换。 1.创建数据透视表 选中数据中任意单元格,点击插入选项卡,数据透视表,…

Java编程语言,使用迭代器Iterator实现自动分页查询

一、背景 在Java中,Iterator是一种设计模式,用于提供一种按顺序访问集合中元素的方式,而不暴露集合的底层表示。Iterator接口主要用于遍历集合,它定义了两种方法:hasNext()和next()。 借助于迭代器Iterator&#xff…

uniapp-自定义navigationBar

封装导航栏自定义组件 创建 nav-bar.vue <script setup>import {onReady} from dcloudio/uni-appimport {ref} from vue;const propsdefineProps([navBackgroundColor])const statusBarHeight ref()const navHeight ref()onReady(() > {uni.getSystemInfo({success…

modbus开源库libmodbus的C语言使用记录(实现简单的modbus主机/丛机程序,解决libmodbus库安装出现的问题)

libmodbus简介 libmodbus 是一个开源的、跨平台的C库,用于实现Modbus通讯协议。它支持Modbus RTU(RS-232/485)和Modbus TCP协议,可以使开发者方便地在项目中集成Modbus通讯功能。libmodbus的设计目标是简单、灵活和高效,适用于各种大小的嵌入式和桌面应用。 编译运行测试…

交换机连接方式

一、级联方式 级联是将多个交换机或其他网络设备依次连接&#xff0c;形成一个层次结构&#xff0c;从而扩展网络的覆盖范围和端口数量。 在级联连接中&#xff0c;数据信号会从一个设备依次传递到下一个设备。每个设备都会接收并处理来自上级设备的数据&#xff0c;并将其转…

vb.net打开CAD指指定路径文件

首先打开vsto,创建窗体&#xff0c;添加一个按钮&#xff0c;双击按钮录入代码&#xff1a; Public Class Form1Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.ClickDim cad As Objectcad CreateObject("autocad.Application")cad…

Spring Cloud整合Sentinel

1、引入依赖 链接: 点击查看依赖关系 父pom <spring.cloud.version>Hoxton.SR12</spring.cloud.version> <spring.cloud.alibaba.version>2.2.10-RC1</spring.cloud.alibaba.version>Sentinel应用直接引用starter <dependency><groupId&…

《2024中国AI大模型产业图谱1.0版》重磅发布

‍ 数据猿出品 本次“数据猿2024年度三大媒体策划活动——《2024中国数据智能产业图谱1.0版》”正式发布。下一次版本迭代将于2024年7月底发布2024年2.0版&#xff0c;敬请期待&#xff0c;欢迎报名。 大数据产业创新服务媒体 ——聚焦数据 改变商业 随着科技的飞速发展&#…