Springboot项目远程部署gitee仓库(docker+Jenkins+maven+git)
- 创建一个Springboot项目,勾选web
- 将该项目创建git本地仓库,再创建远程仓库推送上去
- 创建TestController
@RestController
@RequestMapping("/test")
public class TestController {
@GetMapping("/hello")
public String sayHelloJenkins(){
return "Hello Jenkins!";
}
}
- 本地测试无误
安装Maven
因为Jenkins容器没有Maven环境,如在容器内部安装Maven,由于构建的项目要下载相关的依赖这样造成一部分资源浪费。所以我这里采用的将Maven和容器通过挂载达到共享本地Maven仓库
- 去官网下载Maven,我使用的版本是3.5.0
- 上传至Docker服务所在的服务器
- 我这里放到的 /usr/local/目录下了
- 解压后进入apache-maven-3.5.0/
- 创建repository目录mkdir repository
- 进入conf目录 vim settings.xml 配置本地仓库路径(换成自己的路径和版本)和阿里镜像源
- <?xml version="1.0" encoding="UTF-8"?>
- <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
- <!--这里写自己的路径-->
- <localRepository>/usr/local/apache-maven-3.5.0/repository</localRepository>
- <pluginGroups>
- </pluginGroups>
- <proxies>
- </proxies>
- <servers>
- </servers>
- <mirrors>
- <mirror>
- <id>aliyunmaven</id>
- <mirrorOf>*</mirrorOf>
- <name>阿里云公共仓库</name>
- <url>https://maven.aliyun.com/repository/public</url>
- </mirror>
- </mirrors>
- <profiles>
- </profiles>
- </settings>
- 回到/usr/local/给apache-maven-3.5.0文件递归增加其他用户写权限
- chmod -R o+w apache-maven-3.5.0
- 查看apache-maven-3.5.0/bin/目录下的mvn是否有执行权限(绿色的),没有就添加
- 添加Maven环境变量
- vim /etc/profile
- # 将如下配置到/etc/profile,注意是你的Maven目录的位置
- export MAVEN_HOME=/usr/local/apache-maven-3.5.0
- export PATH=$PATH:$MAVEN_HOME/bin
- 配置生效: source /etc/profile
- 配置成功后关闭终端,从新连接
- 在任意目录输入mvn -version 没有提示mvn 命令找不到说明配置完成
- 如果提示找不到java 命令,只是说明你没有安装java环境。根据你自己的需要是否安装,这里可以不安(jenkins容器里有openjdk环境)
启动Jenkins容器
- 选择一个目录(我选择的是 /home目录)
- 在该目录下创建目录mkdir jenkins
- 进入目录,创建data目录 用于挂载Jenkins的数据文件
- 为其他用户添加写的权限chmod o+w data
启动jenkins:docker run -d -uroot -p 9095:8080 -p 50000:50000 --name jenkins -v /home/jenkins_home:/var/jenkins_home -v /etc/localtime:/etc/localtime jenkins/jenkins
基础配置
- 进入界面 端口是你映射的端口
- 本地地址:在浏览器中输入:http://serverIp:port/访问jenkins,serverIp为docker宿主机的ip,port即为宿主机映射的端口。
(可在控制台用ifconfig查询ip)
- 安装推荐插件
- 安装过程要等会,emmmm可以去喝杯水上个厕所。如果失败重试一下
- 直接使用admin用户
- 之后保存并完成,然后重启(如果你觉得重启慢的话,去终端另开一个端口,用docker restart 容器id 重启容器)。重启好了页面要刷新一下,不然一直等待页面
- 使用admin用户登录
全局安全配置
这里可以根据自己的需求做配置
全局工具配置
通过 docker exec -it 容器id /bin/bash 进入容器(以下参数全是容器中的参数)
- 获取Maven的settings文件路径
- 获取环境变量JAVA_HOME
- 获取环境变量MAVEN_HOME
配置JAVA_HOME时把自动安装取消就可以了
Maven同上 git直接用容器默认的
插件管理
- 安装Publish Over SSH插件 选中然后下载(我这里截图没来得及选)
- 等待下载完成重启一下容器就完成了(重启后记得刷新页面),之后要用的时候再配置
# 查看密码
[root@lj jenkins]# cat data/secrets/initialAdminPassword
a86*********************26
第一个任务
源码管理
构建
测试构建
项目在第一次打包构建时有点慢,因为要下载相关Maven依赖,别急,去喝口水走走!!
搞定了,Jenkins已经帮我们从远程仓库自动拉取代码然后打包好了,回到工程去看一下
然后点击工作区,这个目录熟不熟悉??哈哈哈。进去target目录查看打包好的jar包吧
使用Gitee来触发项目构建
上面我们完成了Jenkins的基本构建。但是,我们在实际业务中不是去手动点击立即构建让Jenkins去构建。这tm的算什么自动构建啊!我们程序员写完代码后本地测试没问题了就会通过git的git push推送到远程代码仓库,我们要做到远程代码仓库接收到了新的推送然后去触发Jenkins的构建功能达到自动构建的效果!!!别急慢慢来会很快的!
Gitee官方提供的帮助文档
安装插件
和刚才安装 Publish Over SSH插件插件一样
- 点击最上角 Dashboard 进到首页。然后 系统管理 -> 插件管理 -> 可选插件 搜索Gitee
安装完成了记得重启
插件配置
系统管理 -> 系统配置 -> Gitee 配置
先去Gitee生成API 令牌 https://gitee.com/profile/personal_access_tokens
点击高级根据你的需求选择 再点击测试连接
插件配置完成!!
任务配置
进入我们jenkins_test任务,左边导航栏有个配置点击进入
Gitee链接
选择我们刚才配置的链接
源码管理配置
在源码管理点击高级
触发器配置
保存!!!!!!!
Gitee代码仓库配置WebHook
管理 -> WebHooks -> 添加webHook
测试
去我们之前的示例项目里随便做点修改然后git push到远程仓库试试
测试成功!!!
使用GitLab触发项目构建
安装插件
安装 Gitlab 和 Gitlab Hook 过程同上。基本配置都相同,GitLab官方的配置是英文的。emmm面向有道翻译学习了。
任务配置
进入我们jenkins_test任务,左边导航栏有个配置点击进入
源码管理
要换成你GitLab的地址和密码哦(用公钥私钥免密登录也行,记得要将容器内jenkins私钥配置给凭证,还有jenkins的公钥配置给GitLab)
触发器配置
和Gitee类似。选择你的触发事件( Push Events )。点击高级还会生成 Secret token 。
记得把WebHook和生成的Secret token配置给GitLab的WebHooks
测试
测试一样啊,你把你的项目推送,然后看看有没有触发构建咯。
持续部署
在前面我们已经完成了有远程代码仓库推送代码触发项目构建的功能。但是,每次构建完了是不是还是要我们去下载然后部署到我们的目标服务器。这样未必过于麻烦,而且有些时候还会出现不及时等情况,或者部署后又上线新需求又要从新部署!!!我们能不能让Jenkins自动帮我们连接我们要部署的目标服务器帮我们自动化部署呢??? 嘿嘿嘿!懒使人进步。come on!
还记得我们前面安装了 Publish Over SSH插件吗?我们来思考一下,我们到底想让Jenkins帮我们做什么?emmm! 首先,帮我们把构建打包好的jar包发送到目标服务器上,然后连接我们的目标服务器去执行启动项目的命令(java -jar xxx,jar > /dev/null &)!
准备:
- 在你的搭建的Jenkins服务的宿主机上生成ssh秘钥ssh-keygen(生成过就别生成了或者覆盖)
- 将你的公钥发送到你们要部署的目标服务器 ssh-copy-id 目标服务器ip
插件配置
进入 系统管理 -> 系统配置 -> Publish over SSH
SSH Servers 点击新增 你也可以点击高级用目标服务器的账号密码登录它的ssh
点击保存
任务配置
进入我们jenkins_test任务,左边导航栏有个配置点击进入
构建后操作
保存
测试
去我们之前的示例项目里随便做点修改然后git push到远程仓库
......参照上面的测试
查看控制台
查看目标服务器
你可以在任务配置里面刚才脚本的位置添加相关的脚本,比如判断某个该服务是否启动启动就关闭启动新的服务,完成自动化部署 示例:
#!/bin/bash
cd jenkins_test
# 这是一个坑点 ssh远程执行命令的时候,被远程机器的有些环境变量是无法获取的,比如java环境信息,所以java命令执行不出来 !!!
source /etc/profile
# 获取jenkins_test-0.0.1-SNAPSHOT.jar服务的pid 第一次就啥都没有
PID=`ps -aux|grep jenkins_test-0.0.1-SNAPSHOT.jar|grep -v grep |awk '{printf $2}'`
for id in $PID
do
kill -15 $id
echo "killed $id"
done
nohup java -jar jenkins_test-0.0.1-SNAPSHOT.jar > ./console.log 2>&1 &
用docker-compose完成容器化自动部署
- 在实例项目中添加Dockerfile和docker-compose.yaml文件
FROM java:8
MAINTAINER Lj<1126184155@qq.com>
COPY target/jenkins_test-0.0.1-SNAPSHOT.jar /usr/local/jenkins_test-0.0.1-SNAPSHOT.jar
ENV MYPATH /usr/local
WORKDIR $MYPATH
EXPOSE 8080
CMD ["java","-jar","jenkins_test-0.0.1-SNAPSHOT.jar"]
version: "3.8"
services:
web:
build: .
ports:
- "8081:8080"
修改构建后配置
测试
修改实例代码,然后推送到远程仓库,查看Jenkins控制台的构建,第一次因为要下载相关的镜像所以会比较慢。耐心等待。然后访问8081端口的/test/hello接口
可以多次修改代码推送然后查看效果!
相关文章:
Springboot项目远程部署gitee仓库(docker+Jenkins+maven+git)
创建一个Springboot项目,勾选web将该项目创建git本地仓库,再创建远程仓库推送上去 创建TestController RestController RequestMapping("/test") public class TestController { GetMapping("/hello") public String sayHelloJe…...
Chromium CI/CD 之Jenkins实用指南2024- Windows节点开启SSH服务(七)
1.引言 在现代软件开发和持续集成的过程中,自动化部署和远程管理是不可或缺的关键环节。SSH(Secure Shell)协议以其强大的安全性和灵活性,成为连接和管理远程服务器的首选工具。对于使用Windows虚拟机作为Jenkins从节点的开发者而…...
阿里大数据面试题集锦及参考答案(3万字长文:持续更新)
目录 MapReduce Shuffle为什么要将数据写入环形缓冲区 MapReduce Shuffle为什么容易发生数据倾斜 Hadoop HA当一个Namenode挂掉,会有数据丢失吗 数据倾斜发生的位置 Combiner了解吗? 什么情况下不能用Combiner? Sum、Count、Count(distinct)哪些能用、哪些不能用Comb…...
springboot 配置 spring data redis
1、在pom.xml引入父依赖spring-boot-starter-parent,其中2.7.18是最后一版支持java8的spring <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.18</…...
Numpy基础用法
Numpy基础用法 numpy.all()num.sun() numpy.all() numpy 中的 all() 函数用于测试 NumPy 数组中所有元素是否都满足指定条件。它接受一个 NumPy 数组作为输入,并返回一个布尔值,指示数组中所有元素是否都满足条件。让我们通过具体的代码示例来深入探讨 n…...
设计模式--享元模式
享元模式(Flyweight Pattern)是一种结构型设计模式,它通过共享大量细粒度的对象来减少内存消耗。这个模式的核心思想是把对象的状态分为内在状态和外在状态,其中内在状态是可以共享的,而外在状态是需要独立维护的。 享…...
可视化剪辑,账号矩阵,视频分发,聚合私信一体化营销工具 源----代码开发部署方案
可视化剪辑: 为了实现可视化剪辑功能,可以使用流行的视频编辑软件或者开发自己的视频编辑工具。其中,通过设计用户友好的界面,用户可以简单地拖拽和放大缩小视频片段,剪辑出满足需求的视频。在开发过程中,可…...
CCF-CSP认证考试 202406-2 矩阵重塑(其二) 100分题解
更多 CSP 认证考试题目题解可以前往:CSP-CCF 认证考试真题题解 原题链接: 202406-2 矩阵重塑(其二) 时间限制: 1.0 秒 空间限制: 512 MiB 题目背景 矩阵转置操作是将矩阵的行和列交换的过程。在转置过程…...
初阶数据结构的实现1 顺序表和链表
顺序表和链表 1.线性表1.1顺序表1.1.1静态顺序表(不去实现)1.1.2动态顺序表1.1.2.1 定义程序目标1.1.2.2 设计程序1.1.2.3编写代码1.1.2.3测试和调试代码 1.1.2 顺序表的问题与思考 1.2链表1.2.1链表的概念及结构1.2.1.1 定义程序目标1.2.1.2 设计程序1.…...
破解反爬虫策略 /_guard/auto.js(一) 原理
背景 当用代码或者postman访问一个网站的时候,访问他的任何地址都会返回<script src"/_guard/auto.js"></script>,但是从浏览器中访问显示的页面是正常的,这种就是网站做了反爬虫策略。本文就是带大家来破解这种策略&…...
40.简易频率计(基于等精度测量法)(3)
(1)BCD8421码:十进制数字转换成BCD8421码的方法 补零:你需要显示多少位数字,就在前面补上四倍的位宽。比如你要显示一个十进制8位的数字,就在前面补上8*432个零。判断:判断补零部分显示的十进制…...
关于Centos停更yum无法使用的解决方案
最近在使用Centos7.9系统时候,发现yum仓库无法进行安装软件包了,官方说2024年6月30日进行停更,停更后无法提供对应的软件服务。 我在使用yum安装包的时候发现确实不能使用官方服务了: CentOS停更的影响 CentOS停止更新之后&#…...
插画感言:成都亚恒丰创教育科技有限公司
插画感言:笔触间的灵魂对话 在这个快节奏、高压力的时代,我们时常在寻找那些能够触动心灵、让灵魂得以片刻栖息的角落。而插画,这一融合了艺术与情感的独特形式,便如同一股清泉,缓缓流淌进每个人的心田,以…...
【算法】数组中的第K个最大元素
难度:中等 题目: 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题…...
Perl 语言的特点
Perl 语言入门学习可以涵盖多个方面,包括其特点、基本语法、高级特性以及学习资源和社区支持等。以下是一个详细的入门学习指南: 一、Perl 语言的特点 文本处理能力强:Perl 提供了丰富的字符串处理函数和正则表达式的支持,非常适…...
NLP教程:1 词袋模型和TFIDF模型
文章目录 词袋模型TF-IDF模型词汇表模型 词袋模型 文本特征提取有两个非常重要的模型: 词集模型:单词构成的集合,集合自然每个元素都只有一个,也即词集中的每个单词都只有一个。 词袋模型:在词集的基础上如果一个单词…...
【开源 Mac 工具推荐之 2】洛雪音乐(lx-music-desktop):免费良心的音乐平台
旧版文章:【macOS免费软件推荐】第6期:洛雪音乐 Note:本文在旧版文章的基础上,新更新展示了一些洛雪音乐的新功能,并且描述更为详细。 简介 洛雪音乐(GitHub 名:lx-music-desktop )…...
AMEYA360:思瑞浦推出汽车级理想二极管ORing控制器TPS65R01Q
聚焦高性能模拟芯片和嵌入式处理器的半导体供应商思瑞浦3PEAK(股票代码:688536)发布汽车级理想二极管ORing控制器TPS65R01Q。 TPS65R01Q拥有20mV正向调节功能,降低系统损耗。快速反向关断(Typ:0.39μs),在电池反向和各种汽车电气瞬…...
简约的悬浮动态特效404单页源HTML码
源码介绍 简约的悬浮动态特效404单页源HTML码,页面简约美观,可以做网站错误页或者丢失页面,将下面的代码放到空白的HTML里面,然后上传到服务器里面,设置好重定向即可 效果预览 完整源码 <!DOCTYPE html> <html><head><meta charset="utf-8&q…...
Golang 创建 Excel 文件
经常会遇到需要导出数据报表的需求,除了可以通过 encoding/csv 导出 CSV 以外,还可以使用 https://github.com/qax-os/excelize 导出 xlsx 等格式的 excel,下面封装了一个方法,支持多 sheet 的 excel 数据生成,导出按需…...
探索GitHub上的两个革命性开源项目
在数字世界中,总有一些项目能够以其创新性和实用性脱颖而出,吸引全球开发者的目光。今天,我们将深入探索GitHub上的两个令人惊叹的开源项目:Comic Translate和GPTPDF,它们不仅改变了我们处理信息的方式,还极…...
SpringBoot框架学习笔记(三):Lombok 和 Spring Initailizr
1 Lombok 1.1 Lombok 介绍 (1)Lombok 作用 简化JavaBean开发,可以使用Lombok的注解让代码更加简洁Java项目中,很多没有技术含量又必须存在的代码:POJO的getter/setter/toString;异常处理;I/O…...
【ASP.NET网站传值问题】“object”不包含“GetEnumerator”的公共定义,因此 foreach 语句不能作用于“object”类型的变量等
问题一:不允许遍历 原因:实体未强制转化 后端: ViewData["CateGroupList"] grouplist; 前端加上:var catelist ViewData["CateGroupList"] as List<Catelogue>; 这样就可以遍历catelist了 问题二:…...
Stateflow中的状态转换表
状态转换表是表达顺序模态逻辑的另一种方式。不要在Stateflow图表中以图形方式绘制状态和转换,而是使用状态转换表以表格格式表示模态逻辑。 使用状态转换表的好处包括: 易于对类列车状态机进行建模,其中模态逻辑涉及从一个状态到其邻居的转换…...
结合Redis解决接口幂等性问题
结合Redis解决接口幂等性问题 引言正文收获 引言 该问题产生背景是根据需求描述,要求对已发布的课程能进行编辑修改,并且要求能进行回滚。 幂等性问题描述:对同一个接口并发请求产生的结果是不变的。 Get 请求以及 Delete 请求天然保证幂等…...
2024算力基础设施安全架构设计与思考(免费下载)
算网安全体系是将数据中心集群、算力枢纽、一体化大数据中心三个层级的安全需求进行工程化解耦,从国家安全角度统筹设计,通过安全 服务化方式,依托威胁情报和指挥协同通道将三层四级安全体系串联贯通,达成一体化大数据安全目标。 …...
ExoPlayer架构详解与源码分析(15)——Renderer
系列文章目录 ExoPlayer架构详解与源码分析(1)——前言 ExoPlayer架构详解与源码分析(2)——Player ExoPlayer架构详解与源码分析(3)——Timeline ExoPlayer架构详解与源码分析(4)—…...
网络安全-等级保护制度介绍
一、等保发展历程 (1)1994国务院147号令 第一次提出等级保护概念,要求对信息系统分等级进行保护 (2)1999年GB17859 国家强制标准发布,信息系统等级保护必须遵循的法规 (3)2005年公安…...
【介绍下大数据组件之Storm】
🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…...
React Hook 总结(React 萌新升级打怪中...)
1 useCallback useMemo 和 useCallback 接收的参数都是一样,都是在其依赖项发生变化后才执行,都是返回缓存的值,区别在于 useMemo 返回的是函数运行的结果,useCallback 返回的是函数。 当需要使用 useCallback 的情况通常包括以…...
大朗做网站在/微信客户管理
话说是自从JDK5后,而这就可以自动进行类型转换了。 当然,区别还是有的,就是对象和“非对象”什么的。可是,今天进行一个测试,出了一个小问题,现将代码贴下: 代码0:先来一个正常点的&…...
cname域名解析/济南seo优化
题目大意 给你一个n 让你用0~n^2-1的数填满一个n*n的正方形 满足每个数值出现一次且每行每列的异或值相等 输出任意一种方案 分析 我们发现对于4*4的正方形 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 是满足条件的 那么如果对正方形中的每一个数都加上一个相同的数 那么这…...
牡丹江有做网站的人吗/服务营销策略
第一章 计算机基础知识一、微机系统的基本组成1. 微型计算机系统由硬件和软件两个部分组成。(1) 硬件 :①冯●诺依曼计算机体系结构的五个组成部分:运算器,控制器,存储器,输入设备,输入设备。其特点是以运算器为中心。…...
甘肃手机版建站系统信息/文案发布平台
1、这个小游戏对于初学者而言,就是为了让大家练习方法的定义,参数的设定和使用。同时在开始需求分析中得知,如果我们发现一些代码重复出现,我们就要开始想,要不要写个方法来解决。比如地图的绘制,地图的绘制…...
网站建设及制作/潮州网站建设
关于TCP Delay ACK的概念我就不多说了,到处复制粘贴标准文献以及别人的文章只能让本文篇幅加长而降低被阅读完的欲望,再者这也不是什么论文,附录参考文献几乎很少有人去看,所以我把这些都略过了。 和风吹的干皮鞋,吹的…...
vi设计经典案例/安徽网站seo
你按照缺省配置部署AIMS或者MapGuide时也许发现,这个系统的性能并不是很好,并发用户稍微多一点就MapGuide Server就死掉了。这是因为MapGuide的缺省配置只是比较安全的一个设置,能确保在大多数机器配置下能够运行而已,但如果把这个…...