Springboot项目远程部署gitee仓库(docker+Jenkins+maven+git)

news2024/11/13 16:11:54

  • 创建一个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接口

可以多次修改代码推送然后查看效果!

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

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

相关文章

Springboot 启动时Bean的创建与注入-面试热点-springboot源码解读-xunznux

Springboot 启动时Bean的创建与注入&#xff0c;以及对应的源码解读 文章目录 Springboot 启动时Bean的创建与注入&#xff0c;以及对应的源码解读构建Web项目流程图&#xff1a;堆栈信息&#xff1a;堆栈信息简介堆栈信息源码详解1、main:10, DemoApplication (com.xun.demo)2…

OPC UA边缘计算耦合器BL205工业通信的最佳解决方案

OPC UA耦合器BL205是钡铼技术基于下一代工业互联网技术推出的分布式、可插拔、结构紧凑、可编程的IO系统&#xff0c;可直接接入SCADA、MES、MOM、ERP等IT系统&#xff0c;无缝链接OT与IT层&#xff0c;是工业互联网、工业4.0、智能制造、数字化转型解决方案中IO系统最佳方案。…

小阿轩yx-高性能内存对象缓存

小阿轩yx-高性能内存对象缓存 案例分析 案例概述 Memcached 是一款开源的高性能分布式内存对象缓存系统用于很多网站提高访问速度&#xff0c;尤其是需要频繁访问数据的大型网站是典型的 C/S 架构&#xff0c;需要构建 Memcached 服务器端与 Memcached API 客户端用 C 语言…

VisualRules-Web案例展示(一)

VisualRules单机版以其卓越的功能深受用户喜爱。现在&#xff0c;我们进一步推出了VisualRules-Web在线版本&#xff0c;让您无需安装任何软件&#xff0c;即可在任何浏览器中轻松体验VisualRules的强大功能。无论是数据分析、规则管理还是自动化决策&#xff0c;VisualRules-W…

AWS基础知识

VPC (Virtual Private Cloud): 参考&#xff1a;https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html With Amazon Virtual Private Cloud (Amazon VPC), you can launch AWS resources in a logically isolated virtual network that you’ve defined…

【音视频 | HTTP协议】HTTP协议详细介绍(HTTP方法、报文格式、报文头部字段、状态码)

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

农业旅游与乡村旅游:融合绿色田野与诗意远方的经济新篇章

在这个快节奏的时代&#xff0c;人们对于回归自然、体验淳朴生活的渴望日益增强。农业旅游与乡村旅游&#xff0c;作为新兴的旅游形态&#xff0c;正逐步成为连接城市与乡村的桥梁&#xff0c;不仅为都市人提供了一片心灵的栖息地&#xff0c;也为农村地区带来了前所未有的发展…

pycharm如何debug for循环里面的错误值

一般debug时&#xff0c;在for循环里面的话&#xff0c;需要自己一步一步点。如果循环几百次那种就比较麻烦。此时可以采用try except的方式来解决 例子如下 #ptyhon debug for循环的代码 num[1,2,3,s,4] ans0 for i in num:try:ansiexcept:print(错误) print(ans) 结果如下&a…

m个人拉m盏灯后求灯的状态问题

之前看过一道题&#xff1a;有m盏灯&#xff0c;编号分别为1&#xff0c;2&#xff0c;3&#xff0c;...&#xff0c;m&#xff0c;每拉一次灯的开关&#xff0c;灯的亮灭状态就发生一次变化。这m盏灯初始状态都是亮着的&#xff0c;有m个人去拉灯&#xff0c;第1个人把所有的灯…

【Qt】之【Bug】error:C1083 无法打开包括文件

背景 a.cpp引用b.h正常&#xff0c;但是a.h引用b.h就报 “无法打开包括文件”的错误 分析 查看“编译输出”&#xff0c;显示不是a.h引起的错误&#xff0c;而是C插件&#xff0c; 查看后发现&#xff0c;C插件引用了a所在插件pro&#xff0c;但是没有引用a依赖的b所在的插件…

AI 模型本地推理 - YYPOLOE - Python - Windows - GPU - 吸烟检测(目标检测)- 有配套资源直接上手实现

Python 运行 - GPU 推理 - windows 环境准备python 代码 环境准备 FastDeploy预编译库下载 conda config --add channels conda-forge && conda install cudatoolkit11.2 cudnn8.2 pip install fastdeploy_gpu_python-0.0.0-cp38-cp38-win_amd64.whlpython 代码 impo…

[Doris]阿里云搭建Doris,测试环境1FE 1BE

首先&#xff1a;阿里云的国内服务器千万不要用容器搭建&#xff0c;或者自己Dockfile构建镜像。两种方式都不得行&#xff0c;压根拉不到github的镜像&#xff0c;开了镜像加速器也拉不到&#xff0c;不要折腾了&#xff0c;极其愚蠢。 背景&#xff1a;现在测试环境&#xff…

排序算法(4)之快速排序(2)

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 排序算法(4)之快速排序(2) 收录于专栏【数据结构初阶】 本专栏旨在分享学习数据结构学习的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目…

Pytorch学习笔记day3——用神经网络学习一组函数

好的&#xff0c;我们开始吧。首先第一个问题&#xff0c;神经网络的本质是什么&#xff1f;是古典主义的人类的神经元吗&#xff1f;绝对不是&#xff0c;他只是一个优化函数 y f θ ( x ) y f_{\theta}(x) yfθ​(x) 这和小学学到的线性函数拟合并无本质区别。只是其中参数…

使用IDEA编写lua脚本并运行

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

Net8 Spire最新版去水印,去页数限制,转word/pptx/ofd等

新建控制台程序&#xff0c;添加Spire.pdf&#xff0c;最新版本为2024年7月17日 try {Spire.Pdf.PdfDocument pdf new Spire.Pdf.PdfDocument();pdf.LoadFromFile("test.pdf");pdf.SaveToFile("newpdf.pdf");pdf.SaveToFile("newppx.pptx", Spi…

20分钟迁移完阿里云ECS跨区域迁移,用老操作系统作为新服务操作系统

由于特殊原因或者数据备份需要迁移ecs服务器 跨区域复制 镜像复制 由于特殊原因或者数据备份需要迁移ecs服务器 1.老服务快照 选择ecs实例&#xff0c;点开实例 进入云盘 https://ecs.console.aliyun.com/disk 在云盘上点击建立快照 https://oss.console.aliyun.com/bu…

PyTorch 深度学习实践-循环神经网络基础篇

视频指路 参考博客笔记 参考笔记二 文章目录 上课笔记基于RNNCell实现总代码 基于RNN实现总代码 含嵌入层的RNN网络嵌入层的作用含嵌入层的RNN网络架构总代码 其他RNN扩展基本注意力机制自注意力机制&#xff08;Self-Attention&#xff09;自注意力计算多头注意力机制&#xf…

纯前端小游戏,4096小游戏,有音效,Html5,可学习使用

// 游戏开始运行create: function(){this.fieldArray [];this.fieldGroup this.add.group();this.score 0;//4096 增加得分this.bestScore localStorage.getItem(gameOptions.localStorageName) null ? 0 : localStorage.getItem(gameOptions.localStorageName);for(var …

vscode通过ssh链接远程服务器上的docker

目录 1 编译docker image1.1 编译镜像1.2 启动镜像 2 在docker container中启动ssh服务2.1 确认是否安装ssh server2.2 修改配置文件2.3 启动ssh服务 3 生成ssh key4 添加ssh公钥到docker container中5 vscode安装插件Remote - SSH6 在vscode中配置 1 编译docker image 一般来…