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获取了。

(可在控制台用ifconfig查询ip)

这里可能不知道密钥在哪里,详情可以看我主页的另一篇笔记,有记录下如何找到Jenkins的密钥:http://t.csdnimg.cn/Zj4xg

  • 安装推荐插件
  • 安装过程要等会,这里的问题仍然存在,有一些插件不能安装下来,还在想办法中。。。。,有懂得大神也可以评论一下怎么解决。
  • 直接使用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 $PIDdokill -15 $idecho "killed $id"  donenohup java -jar jenkins_test-0.0.1-SNAPSHOT.jar > ./console.log 2>&1 &

用docker-compose完成容器化自动部署

  • 在实例项目中添加Dockerfile和docker-compose.yaml文件
FROM java:8MAINTAINER Lj<1126184155@qq.com>COPY target/jenkins_test-0.0.1-SNAPSHOT.jar /usr/local/jenkins_test-0.0.1-SNAPSHOT.jarENV MYPATH /usr/localWORKDIR $MYPATHEXPOSE 8080CMD ["java","-jar","jenkins_test-0.0.1-SNAPSHOT.jar"]version: "3.8"services:web:build: .ports:- "8081:8080"

修改构建后配置

测试

​ 修改实例代码,然后推送到远程仓库,查看Jenkins控制台的构建,第一次因为要下载相关的镜像所以会比较慢。耐心等待。然后访问8081端口的/test/hello接口

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux进程优先级——优先值、调度算法、进程性质

前言&#xff1a;本篇内容主要讲解linux下进程的优先级。 优先级的内容相对较少&#xff0c; 最重要的内容就是cpu的调度方法。 内容相对容易理解。 ps&#xff1a;本节内容适合了解冯诺依曼和操作系统的管理方式以及进程PCB的友友们进程观看 进程的优先级是什么 进程的优先级…

智汇云舟:双引擎模式,为合作伙伴带来实在的利润和回报

2024年是智汇云舟新渠道政策的元年&#xff0c;今年上半年&#xff0c;智汇云舟基于视频孪生产品的升级&#xff0c;对合作伙伴的共创模式进行了升级&#xff0c;从以往的“渠道模式”升级为“合伙模式”&#xff0c;从而实现能力升级&#xff0c;为智汇云舟渠道业务的发展带来…

08 模型演化根本 深度学习推荐算法的五大范式

易经》“九三&#xff1a;君于终日乾乾&#xff1b;夕惕若&#xff0c;厉无咎”。九三是指阳爻在卦中处于第三位&#xff0c;已经到达中位&#xff0c;惕龙指这个阶段逐渐理性&#xff0c;德才已经显现&#xff0c;会引人注目&#xff1b;但要反思自己的不足&#xff0c;努力不…

ABAP打印WORD的解决方案

客户要求按照固定格式输出到WORD模板中&#xff0c;目前OLE和DOI研究了均不太适合用于这种需求。 cl_docx_document类可以将WORD转化为XML文件&#xff0c;利用替换字符串方法将文档内容进行填充同 时不破坏WORD现有格式。 首先需要将WORD的单元格用各种预定义的字符进行填充…

《昇思25天学习打卡营第23天|RNN实现情感分类》

使用RNN进行情感分类&#xff1a;基于IMDB数据集的LSTM应用 引言 情感分析是自然语言处理&#xff08;NLP&#xff09;中的一个重要应用&#xff0c;广泛用于电影评论、社交媒体等文本数据的情感分类任务。本文将介绍如何使用递归神经网络&#xff08;RNN&#xff09;实现情感…

使用IDEA编写lua脚本并运行

下载lua https://github.com/rjpcomputing/luaforwindows/releases 是否创建桌面快捷方式&#xff1a;我们的目标是使用IDEA编写lua脚本&#xff0c;所以不需要勾选。后面需要的话&#xff0c;可以到安装目录下手动创建快捷方式 环境变量自动配置 安装后会自动配置好环境变量…

基于Java的校园交友网站系统

你好&#xff0c;我是专注于计算机技术研究的学姐码农小野。如果你对校园交友网站系统的构建或者相关技术感兴趣&#xff0c;欢迎私信交流。 开发语言 Java 数据库 MySQL 技术 Java语言、SpringBoot框架、B/S结构 工具 MyEclipse、Navicat、Maven 系统展示 首页 个人…

Docker启动PostgreSql并设置时间与主机同步

在 Docker 中启动 PostgreSql 时&#xff0c;需要配置容器的时间与主机同步。可以通过在 Dockerfile 或者 Docker Compose 文件中设置容器的时区&#xff0c;或者使用宿主机的时间来同步容器的时间。这样可以确保容器中的 PostgreSql 与主机的时间保持一致&#xff0c;避免在使…

基于电鸿(电力鸿蒙)的边缘计算网关,支持定制

1 产品信息 边缘计算网关基于平头哥 TH1520 芯片&#xff0c;支持 OpenHarmony 小型系统&#xff0c;是 连接物联网设备和云平台的重要枢纽&#xff0c;可应用于城市基础设施&#xff0c;智能工厂&#xff0c;智能建筑&#xff0c;营业网点&#xff0c;运营 服务中心相关场…

网站及图片字体商用侵权怎么办

如果您的网站因为使用了商业字体而遭到举报&#xff0c;这可能意味着您未经授权就使用了受版权保护的字体&#xff0c;这构成了版权侵权。 boosstrap默认字体是否含商用字体&#xff1f; body {font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;font-size…

公司技术栈用到了RocketMQ,我对此块知识进行了回顾(初始RocketMQ)

前言 作为24届的校招生&#xff0c;不知道大伙儿们是否都已经到了工作岗位上。为了以后更方便的接触到公司的业务&#xff0c;我司为我们安排了将近一个月的实操。虽然不用敲代码&#xff0c;但是… 了解到我司使用到的技术栈&#xff0c;在空闲时间正好对RocketMQ这块技术做个…

金蝶云星空与金蝶云星空对接集成发货通知单查询打通库存状态转换单

金蝶云星空与金蝶云星空对接集成发货通知单查询打通库存状态转换单 数据源系统:金蝶云星空 金蝶K/3Cloud结合当今先进管理理论和数十万家国内客户最佳应用实践&#xff0c;面向事业部制、多地点、多工厂等运营协同与管控型企业及集团公司&#xff0c;提供一个通用的ERP服务平台…

在RK3568上如何烧录MAC?

这里我们用RKDevInfoWriteTool 1.1.4版本 下载地址&#xff1a;https://pan.baidu.com/s/1Y5uNhkyn7D_CjdT98GrlWA?pwdhm30 提 取 码&#xff1a;hm30 烧录过程&#xff1a; 1. 解压RKDevInfoWriteTool_Setup_V1.4_210527.7z 进入解压目录&#xff0c;双击运行RKDevInfo…

Nexus3 批量上传 jar 包、pom文件

Nexus3 Maven 私服搭建及各种使用 详见**Maven私服搭建及各种使用汇总2020** Maven 配置 Nexus 私服 在 Maven 项目中配置 Nexus 私服&#xff0c;需要在项目的 pom.xml 或 maven 的 settings.xml 文件中添加 Nexus 仓库的配置。 示例&#xff1a; 以下是一个项目的 pom.xml…

车载音视频App框架设计

简介 统一播放器提供媒体播放一致性的交互和视觉体验&#xff0c;减少各个媒体应用和场景独自开发的重复工作量&#xff0c;实现媒体播放链路的一致性&#xff0c;减少碎片化的Bug。本文面向应用开发者介绍如何快速接入媒体播放器。 主要功能&#xff1a; 新设计的统一播放U…

Facebook Dating:社交平台的约会新体验

随着社交媒体的普及和技术的发展&#xff0c;传统的社交方式正在经历革新&#xff0c;尤其是在约会这个领域。Facebook作为全球领先的社交平台&#xff0c;推出了Facebook Dating&#xff0c;旨在为用户提供一个全新的约会体验。本文将探讨Facebook Dating如何重新定义社交平台…

Gettler‘s Screep World 笔记 Ⅰ

夏促时候刚刚入坑&#xff0c;写个笔记叭~ 环境配置 参考 HoPGoldy 大佬的简书&#xff0c;先配置下开发环境 萌新去看大佬的详细教程&#xff0c;我这里比较简单&#xff0c;有前端基础的可以直接抄 VSCode 跳过 node 我配的是v18.18.2 换源 npm config set registry h…

层次分析法模型【清风数模学习笔记】

视频学习&#xff1a;【强烈推荐】清风&#xff1a;数学建模算法、编程和写作培训的视频课程以及Matlab等软件教学_哔哩哔哩_bilibili 适用于&#xff1a;评价类问题 评价目标 可选方案 评价的准则 如何确定评价标准 题目 文献搜索&#xff08;知网&#xff09; 网站搜索…

【C语言】动态内存管理(上)

文章目录 前言1.为什么要存在动态内存2. malloc和free2.1 malloc2.2 free2.3 使用实例&#xff08;malloc和free&#xff09; 3. calloc3.1 calloc例子 前言 本文开始将开始学习C语言中一个比较重要的知识点或者是操作——动态内存管理。由于本次的知识比较重要&#xff0c;为…

JDK8升级到JDK17,报错Error:java:错误:不支持的发行版本5

1 问题描述&#xff1a; 我原来用到是JDK8,后来重新安装了JDK17后&#xff0c;并更换了JAVA_HOME的配置&#xff0c;在CDM上面查看JAVA版本确认安装无误。 当我打开IDEA运行代码时&#xff0c;就报错java&#xff1a;错误&#xff1a;不支持的发行版本5&#xff0c;至始至终我都…