jenkins本地打包远程部署项目

1、 Jenkins简介

Jenkins是一款开源的持续集成工具,用于自动化构建、测试和部署软件项目。它可以通过插件扩展来支持各种不同的开发语言和工具。Jenkins提供了一个简单易用的Web界面,可以通过界面配置和管理构建任务,也可以通过命令行工具进行操作。

Jenkins的核心功能是构建和测试软件项目。它可以从源代码管理系统(如Git、SVN等)中拉取代码,并根据预先定义的构建脚本进行编译、打包和测试。Jenkins还提供了丰富的插件和集成工具,可以与各种测试框架、部署工具、静态代码分析工具等进行集成,从而实现全自动化的构建和测试流程。

2、实际案例分析

开发测试之后,我们希望在生产上更新代码。关于如何把打包后的代码放到生产环境,有以下两个基本方法。

1.在生产机器上安装代码打包相关的环境,例如git,maven等,重新检出/更新代码,直接在生产机器上打包生成目标代码。(这种方式容易暴露代码,不安全

2.在本地内网打包,再传送到远程生产环境进行部署。(这种方式可以实现代码本地加密,比较安全

本文演示如何使用jenkins,在本地代码更新打包代码,然后再发送到远程进行部署。

操作步骤

  1. jenkins通过绑定源代码仓库,自动检出/更新代码
  2. 本地打包依赖,生成目标jar包
  3. 通过ssh部署到远程指定目录
  4. 远程执行重启脚本

3.案例步骤

3.1、绑定源代码仓库,自动检出/更新代码

进入Jenkins管理工具,新建任务,选择构建自由风格选项,输入相关参数,点击确定

 滑动到“源码管理”模块,如果没有这个模块,可以在jenkins插件仓库下载 "Git 插件"    

输入项目地址及票据,点击保存。之后jenkins就会在本作业内部的工作目录检出项目代码

3.2、本地打包代码

使用jenkins进行打包,我们通过增加构建步骤,执行shell来执行。如下图。

jenkins会自动为每个作业生成一个工作目录,如果不熟悉工作目录的生成路径,可以在脚本使用

pwd命令打印下。

通过mvn进行打包,并把生成的jar包及依赖环境拷贝到当前目录(打包脚本依个人项目而异)。

3.3、部署jar包到生成环境

接下来就需要将生成的包部署到远程目标,这一步是关键,也比较麻烦。

3.3.1安装ssh工具

Jenkins 提供了多种 SSH 相关的插件,用于支持 SSH 连接、远程执行任务、传输文件等操作。以下是一些常用的 Jenkins SSH 插件。

  1. SSH Plugin (ssh): 这是 Jenkins 的核心插件之一,提供了基本的 SSH 连接和执行远程命令的功能。

  2. SSH Build Step / SSH一步构建 (ssh-steps): 允许在构建过程中执行 SSH 命令。

  3. SSH Agent Plugin (ssh-agent): 这个插件用于管理 SSH 密钥,可以安全地存储和使用 SSH 私钥。

  4. SCP Plugin (scp): 用于通过 SCP 协议在 Jenkins 与远程服务器之间安全地传输文件。

  5. SFTP Plugin (sftp): 支持通过 SFTP 协议上传和下载文件到远程服务器。

  6. Publish over SSH: 允许你通过SSH协议将构建后的文件传输到远程服务器。

本文选择Publish over SSH工具进行演示。

首先,需要到jenkins插件仓库下载“Publish Over SSH”,下载之后,效果如下。

其次,配置远程ssh私钥

进入jenkins系统设置

配置远程服务器的登录信息(点击高级配置ssh私钥),如下。

 配置之后,可以点击右下角的按钮,检查下配置是否生效(显示Success)。

3.3.2.使用ssh工具

返回到作业配置,滑动到SSH模块

 选择远程服务器的名称,增加TransferSet

需要注意的是,这里的

source files是相对于Jenkins作业的工作目录而言,如果有多个文件,可以用逗号隔开。

remote directory是远程服务器的目标目录,可以使用绝对路径。

exec command是传送文件之后在远程服务器执行的命令。

这里的传送文件,和执行脚本,至少选择一项。

如果需要先在远程服务器执行脚本,再传送文件,可以配置两个TransferSet。第一个配置执行脚本,第二个再配置传送文件。

具体的说明,可参考:

publish-over-ssh相关说明

3.4、远程执行脚本

在上一节的ransferSet配置传送文件之后,再执行脚本。

脚本的主要内容是:

1.检查服务是否启动,如果是,则先停止;

2.通过定制的jvm参数,重新启动服务器

脚本大致如下:

#!/bin/bash
pid=`jps -lv|grep yourserver|awk '{print $1}'`
if [ -z $pid ]; then
        echo "app web stopped"
else
        echo "app web is running, prepared to stop"
        kill -9 $pid
        echo "app web has stopped"
fi
#稍等片刻
sleep 2


JVM_ARGS="-Xms1024m -Xmx1024m "
JVM_ARGS="$JVM_ARGS"" -XX:+UseZGC -XX:+PrintGCDetails"

nohup java $JVM_ARGS  -jar yourserver.jar --spring.profiles.active=test >  output.file 2>&1  &
sleep 3
pid=`jps -lv|grep yourserver|awk '{print $1}'`
echo “server is running, pid = $pid”

至此,使用Jenkins进行远程部署的案例演示已经结束。通过Jenkins,我们可以非常方便地进行远程部署。但是,这种方式适合部署少量的远程服务,如果需要进行大批量的作业,可能需要结合ansible工具进行批量处理。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

实物资产的市场主线将逐步回归

民生证券认为,投资者逐渐意识到长期趋势并没有发生变化,这或许正是本周最大的变化。在预期博弈重回冷静期后,去金融化背景下实物资源占优的市场主线也将逐步回归。 1 高低切换后的冷静期 从4月下旬至上周,A股市场呈现出由高位资产…

【iOS】UI学习(二)

UI学习&#xff08;二&#xff09; 进度条和滑动条步进器与分栏控件警告对话框和提示等待器UITextFieldUITextField控件UITextFieldDelegate协议 UIScrollView布局子视图手动布局子视图自动布局子视图 进度条和滑动条 下面通过一个程序来讲解该内容&#xff1a; #import <…

c++函数基础总结

在给出的代码片段中&#xff0c;我们看到两部分内容&#xff1a;一个类定义和一个全局函数声明。让我们逐一分析它们&#xff1a; 类定义&#xff1a; cpp复制代码 class { public: void a(); }; 这个类定义是不完整的&#xff0c;因为它没有类名。但为了说明&#xff0c;我…

变量的作用域

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 变量的作用域是指程序代码能够访问该变量的区域&#xff0c;如果超出该区域&#xff0c;再访问时就会出现错误。在程序中&#xff0c;一般会根据变量…

HarmonyOS鸿蒙学习笔记(28)@entry和@Component的生命周期

entry和Component的生命周期 entry和Component的关系Component生命周期Entry生命周期 生命周期流程图生命周期展示示例代码参考资料 HarmonyOS的生命周期可以分为Compnent的生命周期和Entry的生命周期&#xff0c;也就是自定义组件的生命周期和页面的生命周期。 entry和Compone…

MySQL 索引使用(二)

本篇继续介绍有关索引的使用。 目录 一、SQL提示 二、单列索引和联合索引 三、覆盖索引 四、前缀索引 五、索引的使用原则 一、SQL提示 我们在使用索引来进行查询时&#xff0c;很有可能会出现一个字段中包含多个索引的情况&#xff0c;例如这里有一个name字段&#xff0c…

曾巩,散文的艺术与哲思

曾巩&#xff0c;字子固&#xff0c;世称南丰先生&#xff0c;南丰&#xff08;今江西&#xff09;人&#xff0c;生于北宋真宗天禧三年&#xff08;公元1019年&#xff09;&#xff0c;卒于北宋元丰六年&#xff08;公元1083年&#xff09;&#xff0c;享年64岁。他是中国北宋…

Unity开发——编辑器打包、3种方式加载AssetBundle资源

一、创建ab资源 &#xff08;一&#xff09;Unity资源设置ab格式 1、选中要打包成assetbundle的资源&#xff1b; 可以是图片&#xff0c;材质球&#xff0c;预制体等&#xff0c;这里方便展示用预制体打包设置展示&#xff1b; 2、AssetBundle面板说明 &#xff08;1&…

【React篇】组件错误边界处理(组件错误引起的页面白屏)

我们知道在生产环境react错误会导致整个页面崩溃&#xff0c;显示为空白页面。 比如下图的错误&#xff0c;导致了左侧页面直接白屏&#xff1a; 由于某一个组件报错导致整个页面崩溃是很严重的问题&#xff0c;那么我们应该如何去降低代码报错带来的影响呢&#xff1f; 我们…

JavaScript 动态网页实例 —— 窗口控制

除了打开和关闭窗口之外,还有很多其他控制窗口的方法。例如,可以使用 window.focus()方法使窗口获得焦点,也可以利用与其相对的window.blur 方法使窗口失去焦点。本节介绍移动窗口、改变窗口大小、窗口滚动、窗口超时操作、常用窗口事件、常用窗口扩展等窗口控制的方法和手段。…

mac电脑鼠标键盘共享软件:ShareMouse for Mac 激活版

ShareMouse 是一款跨平台的键盘和鼠标共享软件&#xff0c;它允许用户在多台计算机之间共享同一组键盘和鼠标&#xff0c;实现无缝的操作和控制。该软件适用于 Windows 和 macOS 系统&#xff0c;并且支持多种连接方式&#xff0c;包括局域网连接和无线连接。 使用 ShareMouse&…

从openstack环境中将服务器镜像导出的简单办法

1 登录openstack的页面&#xff0c;找到计划导出的主机信息。 通过实例名称&#xff0c; IP地址&#xff0c;找到对应的记录。点击实例名称&#xff0c;进入详情页。 在这里主要可以知道&#xff0c;当前主机在服务器上的文件ID&#xff0c;可以按这个ID去找对应的目录。 还可…

java读取文件内容(正则表达式匹配)

已知文件score.txt内容如下&#xff1a; 语文85分&#xff0c;数学89分&#xff0c;英语75分&#xff0c;马列95分。 要求解析出其中的成绩数据&#xff0c;并计算总成绩 import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import jav…

JDK环境配置、安装

DK环境配置&#xff08;备注&#xff1a;分32位与64位JDK&#xff0c;32位电脑只能按照32位JDK&#xff0c;64位电脑兼容32、64位JDK&#xff09; 一、检查自己电脑是否安装过JDK 1.在电脑屏幕左下角&#xff0c;输入命令提示符CMD&#xff0c;打开命令提示符应用 2.在打开界…

QT系列教程(7) QLineEdit介绍

简介 QLineEdit属于输入插件&#xff0c;用来实现单行录入。支持几种录入模式。 Normal表示正常录入,录入的信息会显示在QLineEdit上。 Password表示密码录入的方式&#xff0c;录入的信息不显示QLineEdit&#xff0c;只是通过黑色圆点显示。 NoEcho 表示不显示录入信息&am…

“开源与闭源:AI大模型发展的未来之路“

文章目录 每日一句正能量前言数据隐私开源大模型与数据隐私闭源大模型与数据隐私数据隐私保护的共同考虑结论 商业应用开源大模型的商业应用优势&#xff1a;开源大模型的商业应用劣势&#xff1a;闭源大模型的商业应用优势&#xff1a;闭源大模型的商业应用劣势&#xff1a;商…

ros DWA局部规划模块

ROS-DWA模块 主要流程DWAPlannerROS::computeVelocityCommandsDWAPlannerROS::dwaComputeVelocityCommandsDWAPlanner::findBestPathSimpleScoredSamplingPlanner::findBestTrajectory 调参技巧DWA被目标点过度吸引&#xff0c;且不听全局规划器指挥 消融实验goal_front_costs_…

Java 异步编编程——Java内置线程池(Executor 线程池)

文章目录 知道线程池是什么以及解决什么问题Java 内置线程池Java 内置线程池设计结构及执行机制ThreadPoolExecutor 中的概念生命周期核心参数阻塞队列4 种任务拒绝策略 线程池使用场景 知道线程池是什么以及解决什么问题 线程池&#xff08;Thread Pool&#xff09;是一种基于…

Kafka Java API

1、增加依赖 <dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>1.0.0</version> </dependency>2、三个案例 案例1&#xff1a;生产数据 import org.apache.kafka.clients.p…

SpringBoot HelloWorld 之 实现注册功能

SpringBoot HelloWorld 之 实现注册功能 一.配置 创建数据库big_event CREATE TABLE user (id int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT ID,username varchar(20) COLLATE utf8_unicode_ci NOT NULL COMMENT 用户名,password varchar(32) COLLATE utf8_unicode_ci …