Jenkins的持续集成与持续部署

news2024/11/24 9:13:19

系统总体架构

在这里插入图片描述

  • Gitlab
    Gitlab是一款主要用于代码管理的工具,相较于GitHub,可以自己搭建服务器,这可以避免因为网络速度慢导致部署效率低下,同时,自己搭建服务器,安全性更高。
  • Jenkins
    Jenkins主要用于管理版本,进行代码的编译和部署。
  • Webhooks
    用来轻松的连接Gitlab和Jenkins的纽带。

持续集成与持续部署系统的工作原理

使用jar包部署项目的整体流程

  1. 使用git客户端将代码push到gitlab。
  2. gitlab的webhook插件会通知Jenkins进行工作。
  3. Jenkins从gitlab上拉取代码并使用Maven进行编译打包。
  4. Jenkins将jar包发到服务器。
  5. Jenkins调用服务器上的shell脚本停止之前的服务,并启动jar包。

搭建Jenkins系统

安装Gitlab

通过docker部署Gitlab

安装Jenkins

采用Tomcat+jenkins.war包部署的方式安装:

  1. 从官网(https://jenkins.io)下载war包,注意Jdk的版本
  2. 将war包放在Tomcat的webapps下
    /opt/apache-tomcat-8.5.88/webapps
  3. 修改tomcat配置文件
    在/opt/apache-tomcat-8.5.88/conf/server.xml的节点下添加URIEncoding=“UTF-8”,如下:
  <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               maxParameterCount="1000"
               URIEncoding="UTF-8"
               />
  1. 启动Tomcat
cd /opt/apache-tomcat-8.5.88/bin
nohup ./startup.sh &
  1. 访问"localhost:8080/jenkins",如果无法访问,请检查端口号是否占用,请检查Jenkins的版本与JDK的版本是否一致。

  2. 配置Jenkins的全局信息与安装插件请参考这篇文章

使用jenkins编译打包服务

  1. Jenkins构建一个Maven项目

Genneral随便填:
在这里插入图片描述

源码管理:URL后面记得加XXXX.git

在这里插入图片描述
构建触发器:当有代码提交到Gitlab上时,自动Build。
在这里插入图片描述
Build部分:
在这里插入图片描述
Post Steps:build成功之后,运行shell脚本,在本地部署jar系统。
在这里插入图片描述
脚本如下:

#!/bin/bash
export jar_name=demo1-0.0.1-SNAPSHOT.jar
export port=8099
echo "jar_name is ${jar_name}, port is ${port}"

pid=`jps -l |grep ${jar_name}  |awk '{print $1}'`
echo "pid is ${pid}"

if [[ -n "${pid}" ]]
then
	echo "删除进程"
	kill -9 ${pid}
    sleep 5
fi

cd /root/.jenkins/workspace/demo1/target/
chmod 777 ${jar_name}
echo "start ${jar_name} process"
export BUILD_ID=dontKillMe
nohup java -jar -Dserver.port=${port}  ${jar_name} >/data/log/${jar_name}.log &
echo "end ${jar_name} process"
  1. Gitlab中配置webhook
    输入与Jenkins联系的url
    勾选Trigger中的Push event选项
    去掉Enable SSL verification选项
    单机Add Webhook按钮
    在这里插入图片描述
    之后会在下方出现一个Webhook,点击测试按钮,若出现成功则表示配置成功。
    在这里插入图片描述
    现在如果有新代码提交,jenkins就会自动打包并部署了。

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

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

相关文章

改图片分辨率:提升图像质量的关键步骤

无论您是一名摄影师、设计师&#xff0c;还是一个爱好者&#xff0c;改变图片分辨率都是必不可少的工作。在本文中&#xff0c;我们将介绍改图片分辨率的作用以及它在哪些场景下使用。 改图片分辨率介绍 图片分辨率是指图像中所包含的像素数量&#xff0c;通常以“每英寸像素…

threejs 相机OrbitControls常用方法及属性

相机控件OrbitControls 通过OrbitControls可以对三维场景进行缩放、平移、旋转&#xff0c;本质上改变的不是场景&#xff0c;而是相机的参数&#xff0c;相机的位置角度不同&#xff0c;同一个场景的渲染效果是不一样&#xff0c;比如相机围绕着一个场景旋转&#xff0c;就像…

有哪些工具软件一旦用了就离不开?

&#x1f496;前言 目前&#xff0c;随着科技的快速发展&#xff0c;电脑已经进入了许许多多人的生活 &#xff0c;在平日的学习、工作和生活里&#xff0c;我们会用的各种各样的强大软件。市面上除了某些大公司开发在强大软件&#xff0c;还有各路大神开发具有某些功能的强大…

nodejs+vue网上课程在线教学网站平台a53y0

(1) vue引入elementui 1.使用npm安装element-ui npm i element-ui -S 2.在main.js中导入使用vue import element-ui/lib/theme-chalk/index.css //别忘了导入样式 import ElementUI from element-ui Vue.use(ElementUI) 后端&#xff1a;java(springbootssm)/python/php/node…

MySQL入门到精通——运维篇(基础篇——进阶篇——运维篇)本文以MySQL8.0版本以上为例

文章目录 前言MySQL——运维篇一、日志1.日志-错误日志2.日志-二进制日志3.日志-查询日志4.日志-慢查询日志 二、主从复制1.主从复制-概述2.主从复制-原理3.主从复制-搭建3.1.主从复制-搭建-主库配置3.2.主从复制-搭建-从库配置3.2.主从复制-搭建-测试 三、分库分表1.分库分表-…

Nacos简介和安装

1.Nacos简介 1.1.为什么叫Nacos 前四个字母分别为Naming和Configuration的前两个字母&#xff0c;最后的s为Service。 1.2.是什么 一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos: Dynamic Naming and Configuration ServiceNacos就是注册中心&am…

Fiddler 到底能做什么?一篇文章给你详细介绍

Fiddler是检查 Http 流量的最流行的工具之一。此工具可帮助我们非常轻松地测试 REST API / SOAP Web 请求。 题主的问题&#xff1a;Fiddler 到底能做什么。仔细思考&#xff0c;其实有两层意思&#xff1a; 第一层&#xff1a;Fiddler工具的应用范围 第二层&#xff1a;Fiddl…

手搓哈希表

手搓哈希 哈希概念哈希冲突为什么会有哈希冲突的产生?常见的哈希函数 如何解决哈希冲突&#xff1f;闭散列闭散列的简单模拟实现插入查找删除 总代码开散列开散列的模拟实现插入删除查找 存在的问题迭代器 开散列总的代码 哈希概念 顺序结构以及平衡树中&#xff0c;元素关键码…

在研制带处理器的电子产品时,如何提高抗干扰能力和电磁兼容性?

一、下面的一些系统要特别注意抗电磁干扰 1、微控制器时钟频率特别高&#xff0c;总线周期特别快的系统。 2、系统含有大功率&#xff0c;大电流驱动电路&#xff0c;如产生火花的继电器&#xff0c;大电流开关等。 3、含微弱模拟信号电路以及高精度A/D变换电路的系统。 二、…

GPU物理位置查询:从nvidia编号到物理位置

supermicro AS -4125GS-TNRT 服务器GPU出现问题&#xff0c;有几张GPU速度较慢。需要确定其物理位置,具体流程如下&#xff1a; 1 GPU编号与BUS_ID对应关系 使用nvidia-smi即可查看&#xff0c;如下所示&#xff1a;![在这里插入图片描述](https://img-blog.csdnimg.cn/3807d…

分布式锁解决方案_基于Redisson实现的分布式锁实现

Redisson介绍&#xff1a; https://github.com/redisson/redisson/wiki Redisson - 是一个高级的分布式协调Redis客服端&#xff0c;能帮助用户在分布式环境中轻松实现一些Java的对象&#xff0c;Redisson、Jedis、Lettuce是三个不同的操作 Redis 的客户端&#xff0c;Jedis、…

常见的8种用户需求评估方法

1、人性法 在评估用户需求时&#xff0c;需要判断这个需求所实现的功能&#xff0c;是否符合人性&#xff0c;与哪几种人性相匹配&#xff0c;如果非常匹配则值得做。当然并不是需求反应的人性越多越好&#xff0c;需要根据团队实际资源做到极致。 如格林人性法则包括&#xff…

【已解决】Arduino编译错误error: ordered comparison of pointer with integer zero的解决方法

在使用Arduino的资源库对STM32编程时&#xff0c;出现&#xff1a; error: ordered comparison of pointer with integer zero (byte* {aka unsigned char*} and int) 编译错误的解决方法。 Arduino因其开源和易用性&#xff0c;丰富的三方资源&#xff0c;受到很多人的喜欢…

CCIG 2023 从视觉-语言模型到智能文档图像处理

前言 一、视觉-语言模型是什么&#xff1f; 二、视觉-语言模型可以用来做什么&#xff1f; 三、视觉-语言 预训练模型 3.1、模型架构 3.2、训练目标 3.2.1、图像-文本匹配损失&#xff08;ITM&#xff09; 3.2.2、掩码语言建模损失&#xff08;MLM&#xff09; 3.2.3、…

Shell基础学习---4、文本处理工具、综合应用案例(归档文件、发送信息)

1、文本处理工具 1.1 cut cut的工作就是“剪”&#xff0c;具体的说就是在文件中负责剪切数据用的。cut命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出。 1、基本语法 cut [选项参数] filename 说明&#xff1a;默认分割符是制表符 2、选项参数说明 选…

AOP设计思想与实用

文章目录 一、AOP思想&#xff08;一&#xff09;什么是AOP&#xff08;二&#xff09;为什么要使用AOP 二、Spring AOP&#xff08;一&#xff09;AOP 的组成1. Join Point&#xff08;连接点&#xff09;2. Pointcut&#xff08;切点&#xff09;3. Advice&#xff08;通知&a…

怎样做一个优秀的网关技术选型报告~

1、简介 当使用单体应用程序架构时&#xff0c;客户端&#xff08;Web 或移动端&#xff09;通过向后端应用程序发起一次 REST 调用来获取数据。负载均衡器将请求路由给 N 个相同的应用程序实例中的一个。然后应用程序会查询各种数据库表&#xff0c;并将响应返回给客户端。微服…

nodejs进阶(4)—读取图片到页面

我们先实现从指定路径读取图片然后输出到页面的功能。 先准备一张图片imgs/dog.jpg。 file.js里面继续添加readImg方法&#xff0c;在这里注意读写的时候都需要声明binary。&#xff08;file.js 在上一篇文章nodejs进阶3-路由处理中有完整的内容&#xff09; readImg:functi…

思维中的世界

⾝体的空间&#xff0c;以⾏为为导向的空间 感官⼩矮⼈ 当我们观察特定的事物时&#xff0c;⼤脑的相应区域就会被“点亮”&#xff0c;并变得 活跃起来。 ⾝体映射到⼤脑上&#xff0c;映射到“感官⼩矮⼈”上&#xff0c; 即从左⽿延伸&#xff0c;过⼤脑顶⾻&#xff0c;…

OpenCV 实战七 setMouseCallback 鼠标交互画框

鼠标交互画框效果&#xff1a; 目录 1、setMouseCallback()函数 2、on_Mouse函数 3、代码 1、setMouseCallback()函数 函数原型 void setMouseCallback(const String& winname, MouseCallback onMouse, void* userdata 0); 参数说明 winname 窗口名称 onMouse 鼠标…