Jenkins+Docker+SVN实现SpringBoot项目半自动化部署

news2025/7/14 9:02:03

起因:入职后公司需要的技能,全部项目都使用的Jenkins+Docker部署

Jenkins详细教程:知乎大佬写的文章
Docker详细教程:一个大佬的博客
SVN使用教程:一个大佬的博客

深入了解Jenkins、Docker、SVN,去上面三个大佬的文章里看,我只总结使用步骤:

部署需求:父子依赖关系的SpringBoot项目,子系统依赖父工程中的内容,要求部署子系统,父子系统均放在SVN同级目录中(下图所示)

在这里插入图片描述

一. Jenkins新建任务:

  1. 进入Jenkins主界面,选择一个视图(如果没有视图新建一个视图,视图包含多个任务,建立视图的过程很简单,可无脑操作 不多说),点击左侧的 ”新建任务‘
    在这里插入图片描述
  2. 选择"流水线",填写任务的名称,可随意,最好是能区分项目是干什么的,填完后往下滑,还有很多要填的,不说的内容即默认无需修改。
    在这里插入图片描述
    第2步有需要注意的地方,就是这个SVN的路径,不可以只写一个子工程的路径,需要其上级路径,也就是同时包含父子工程的那层路径。
  3. 翻到 “流水线” 这一步,首先选择使用 Pipeline script from SCM 类型的脚本,下面选择 Subversion 作为代码拉取的平台类型,即SVN。下面填写项目的SVN路径,以及拉取代码所使用的 SVN的账户,没有就添加一个,都是无脑选项 不多说。
    在这里插入图片描述
  4. 接着往下翻,这里自定义脚本所在的路径,待会儿新建一个名字叫 Jenkinsfile 的文件放在这个目录下,这个Jenkinsfile就是脚本。
    在这里插入图片描述
    第4条这里,脚本路径是相对于SVN拉取代码的路径而言的相对路径。举个例子,比如说,我代码拉取的SVN路径是 http://192.168.110.56/scm/ADMIN-BACK,ADMIN-BACK 是项目的根路径,ADMIN-BACK 内有两个父子依赖关系的项目 xxx-base 和 xxx-scm,并且是同级路径,(上面 项目结构带文件夹的那个图所示的结构),现在我在子工程 xxx-scm 下面新建个文件夹,叫 nmsl,nmsl文件夹下面我放两个文件,一个叫 Dockerfile,一个叫 Jenkinsfile,现在那个脚本路径就写成 xxx-scm/nmsl/Jenkinsfile
  5. 下面就是 去编写脚本文件 Jenkinsfile 和 Dockerfile
---- Jenkinsfile // 这句就不用写上了

pipeline {
    agent none
    environment {
        VERSION = 'V1.0.0'
    }
    stages {
        stage('build') {
            agent {
				docker {
					image 'maven:3-alpine'
					args '-v /root/.m2:/root/.m2'
				}
			}
            steps {
                sh 'cd xxx-base; mvn clean install'
                sh 'cd xxx-scm; mvn clean package -U'
            }
        }
        stage('docker') {
        	agent any
        	steps {
        		sh 'cd xxx-scm; docker build -f xxx-scm/Dockerfile -t reg.xxx.com/dev/xxx-scm:${SVN_REVISION} xxx-scm-system/target'
        		sh 'docker push reg.xxx.com/dev/xxx-scm:${SVN_REVISION}'
        	}
        }

    }
}

在这里插入图片描述

主要解释下面两句,上面两句比较死:

sh 'cd xxx-scm; docker build -f xxx-scm/Dockerfile -t reg.xxx.com/dev/xxx-scm:${SVN_REVISION} xxx-scm-system/target'

这句说的是,切换到子工程所在的路径,然后在子工程的 xxx-scm-system/target 目录下,根据Dockerfile构建一个容器,并取名为 reg.xxx.com/dev/xxx-scm,并设置tag为${SVN_REVISION},这里的 xxx-scm-system 即为项目启动类所在的模块,子工程打包后的jar包存放路径即为 xxx-scm-system/target。

sh 'docker push reg.xxx.com/dev/xxx-scm:${SVN_REVISION}'

这句是,推送镜像到远程仓库,远程仓库可能是自己公司搭建的

---- Dockerfile // 这句就不用写上了

FROM reg.xxx.com/dev/xxx-jre:8.1

WORKDIR /xxx

VOLUME /xxx-log

COPY xxx-scm-system-*-SNAPSHOT.jar xxx-scm.jar
EXPOSE 8877

ENTRYPOINT java $JAVA_OPTS -jar xxx-scm.jar

在这里插入图片描述
6. 把Dockerfile和Jenkinsfile上传到SVN路径下,进入Jenkins,点击“立即构建”打包项目并上传到远程仓库。绿了就对了,没绿就是错。
在这里插入图片描述
7. 下载镜像:打包完成后,鼠标放到 docker列上,选择 logs,选择上方的最后一行。在这里插入图片描述
这里是点击进入后的界面,复制镜像名,下图所示在这里插入图片描述
登录装有Docker镜像的服务器,把镜像拉取下来:执行docker pull reg.xxx.com/dev/xxx-scm:45469,查看拉取状况 docker images在这里插入图片描述
如果要下载镜像到windows,可以这样,执行 docker save -o xxx-scm:45469.tar reg.xxx.com/dev/xxx-scm:45469,将镜像保存到了当前目录下,然后使用ftp工具down到window就行了在这里插入图片描述
8. 运行容器,docker run -p 8877:8877 -v /root/SCM/config:/xxx/config -v /opt:/opt -d --name xxx-scm reg.xxx.com/dev/xxx-scm:45469
这句是说,映射容器的8877端口到物理机的8877端口,将容器的 /xxx/config 路径挂载到物理机的 /root/SCM/config 路径,将容器的 /opt 挂载到物理机的 /opt 路径,-d 表示以守护进程的模式运行容器,容器的名字叫 xxx-scm,建立容器 使用的镜像是 reg.xxx.com/dev/xxx-scm:45469。至于挂载哪个容器哪个目录,这里有句话要说,在 Dockerfile里有个配置项,叫WORKDIR /xxx,这里的 /xxx,就是下图的 /xxx。在这里插入图片描述

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

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

相关文章

图书管理系统【java】

目录 🥇1.设计背景 🔎2.设计思路 🔑3.book包 📗3.1 Book类的实现 📕3.2 BookList类的实现(书架) 🔑4.user包 📙4.1 User类的实现 📒4.2 AdminUser(管理员&#x…

MySQL导出csv数据文件

之前使用MySQL导出过一次线上数据,当时解决了乱码和数据没有正常分隔的问题。 参见这篇文章: 记一次“曲折“的MySQL数据导出 前几个月换了工作电脑,这几天又需要导出几十万的线上数据,在导出过程中还是出现了一些问题,再记录一…

OpenWrt 固件编译教程

一、编译环境准备 编译平台 阿里云 Ubuntu 20.04.5 LTS 安装编译环境依赖 sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch python3 python2.7 unzip zlib1g-dev lib32gcc1 libc6-dev-i386 subversion f…

ICME 会议介绍

官网翻译来的,具体内容还是看官网:IEEE ICME23 Author Information and Submission Instructions 目录 常会和特别会议 研讨会 行业/应用文件 演示 一般信息 示例文件、格式化指南和模板 电子论文提交 提交论文的分步说明 感兴趣的主题包括但不…

右键发送到菜单+批处理实现批量自动化为文件名添加统一的后缀

WinR打开运行,并输入shell:sendto,打开系统右键发送到菜单的所在文件夹。 新建记事本文档,修改文件名为公开.bat,编辑并保存如下内容: echo off :loop if not "%~1" "" (ren "%~1" &…

[附源码]SSM计算机毕业设计在线二手车交易信息管理系统JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Linux系统配置 Samba客户端

配置 Samba客户端 1.Windows 客户端访问 samba 共享 无论Samba共享服务是部署在Windows系统上,还是部署在Linux系统上,通过Windows系统进行访问时,其步骤和方法都是一样的。下面假设Samba共享服务部署在Linux系统上,并通过Wind…

11返场钜惠,格式转换、图片/视频压缩免费小技巧

📣 话不多说,直接上干货! 🔥 11返场钜惠,牛学长转码大师免费送!!!🔥 那么牛学长转码大师能帮助您些什么呢?一起看看吧~ 一、格式转换 作为一款专业的格式…

Redis集群部署的三种模式

一、Redis简介 Redis 是一款完全开源免费、遵守BSD协议的高性能(NOSQL)的key-value数据库。它使用ANSI C语言编写,支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 Redis的使用场景有如下一些: 读写效率要…

计算机网络复习——第四章网络层

9月开始学习的一个月,I hope everthing be fine. 相关知识见,感觉比较容易入手 《计算机网络》(谢希仁)内容总结 | JavaGuide 重点知识: TCP/IP 协议中的网络层向上只提供简单灵活的,无连接的&#xff…

[附源码]SSM计算机毕业设计在线购物商城JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

C/C++多进程高并发框架分享【内附可执行源码注释完整】

文章目录🚀前言🍎源码分享🎂总结🚀前言 多进程高并发的设计的思想体现在:电脑物理CPU有多少个核(core)就创建多少个子进程,并且把各个子进程平均分配到各个核(core&…

【JavaSE】多态、抽象类

文章目录1. 向上转型2. 重写3. 多态4. 向下转型5. 抽象类1. 向上转型 我们来看看以下程序 class Animal {public String name;public int age;public void eat() {System.out.println("父类的方法");} } class Cat extends Animal {public String hire;public void…

Birdboot第六天 jar包 数据库

实际应用birdboot框架 1.BirdBoot导包 1.新建maven BirdBoot------pom替换 2.删掉static 和 Springboot里面写的(controller entity) rebuild之后把无用的导包都删掉 主启动类里面把main方法改为run方法 传参:类名和参数(复制sp…

动力节点索引优化解决方案学习笔记——索引介绍

1.索引介绍 1.1什么是MySQL的索引 MySQL官方对于索引的定义:索引是帮助MySQL高效获取数据的数据结构。 MySQL在存储数据之外,数据库系统中还维护着满足特定查找算法的数据结构,这些数据结构以某种引用(指向)表中的数据,这样我们…

决策树算法

目录 ​分类算法 决策树算法 外卖订餐决策树 分支处理 分类算法 分类算法是利用训练样本集获得分类函数即分类模型(分类器),从而实现将数据集中的样本划分到各个类中。分类模型通过学习训练样本中属性集与类别之间的潜在关系,并以此为依据对新样本属…

测试基础——数据库及数据库表的SQL操作(了解即可)

目录 1.数据库基础概念 2.SQL介绍 3.MySQL介绍 4.数据库连接工具Navicat 5.数据类型 6.约束 7.对数据库操作的SQL语句 7.1创建数据库 7.2使用/打开/切换数据库 7.3修改数据库 7.4删除数据库 7.5查看所有数据库 7.6数据库备份 8.数据库表操作的SQL语句 8.1创建数据…

VisualSFM的配置与使用 MeshLab的网格生成与纹理添加

前言 本实验环境如下: VisualSFM版本V0.5.26 MeshLab版本2022.02 操作系统Windows10,64bit 0 VisualSFM配置 0.1 下载 VisualSFM下载链接:VisualSFM : A Visual Structure from Motion System Cmvs-Pmvs下载链接:GitHub -…

[附源码]SSM计算机毕业设计郑工校园二手交易平台网站JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

有限自动机字符串匹配

上一篇文章正则表达式,提到正则表达式是一种用来表示有限自动机所接受单词组合的语言,那么什么是有限自动机呢,以及它是如何进行字符串匹配的,下面来做详细介绍 什么是有限自动机 目前程序上利用不同的编程语言通过正则表达式进…