Java代码自动部署

系统分析师论文备考:从知识堆砌到工程化解决方案的实战指南 系统分析与设计是软件工程的核心环节,它要求从业者不仅掌握技术概念,更要具备将理论转化为可执行方案的系统化思维能力。其核心原理在于通过结构化方法,对复杂业务问题进行分解、建模与决策,从而设计出高效、可靠的技术架构。这一过程的技术价值在于能够显著提升软件项目的成功率、可维护性与可扩展性。在系统分析师考试、企业级应用开发、架构评审等场景中,这种能力尤为重要。本文聚焦于系统分析师论文写作这一具体应用,针对考生常陷入的知识点罗列误区,提供一套工程化的备考与写作框架。该方法强调构建可复用的“项目素材库”和“技术决策清单 阅读详情

【 ①Java代码自动部署-总结简介】

代码部署是每一个软件开发项目组都会有的一个流程,也是从开发环节到发布功能必不可少的环节。对于Java开发者来说,Java代码的发布部署也是经常需要做的一件事,特别是互联网公司。代码的发布上线关系到保证生产环境能够正常启动及功能是否能正常运行,所以代码部署在整个项目开发周期还是占据很重要的地位。

如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家。

由于本人近期在学习Java代码自动发布相关的知识,此系列文章是对此次学习到的知识进行巩固和总结;同时,也希望能够帮助到和我一样对此方面知识感兴趣的同行们。言不多说,直接进入真题。下面针对此次系列文章做一个简要的概述。

1、学习代码自动部署的目的

高效且简化代码的部署发布

2、使用的相关工具及技术

1、 CentOS操作系统(可以使用虚拟机安装Linux系统)

2、 Maven

3、 Git

4、 Shell脚本

5、 Jenkins

3、学习代码自动发布相关技术的顺序

Java代码自动部署

 

阶段1:

优点:部署流程简单方面,开发完成后开发人员在开发环境即可进行代码部署上线。

缺点:发布流程粗糙,代码部署不够严谨,不建议生产环境使用此方式。

阶段2:

优点:由Git进行项目版本管理,降低了代码发布的风险,发布过程有运维人员进行发布。

缺点:由于代码的发布由运维人员发布,需开发人员配合进行代码发布部署,与发布部署不成功,得由开发人员查找问题,增加了部署复杂性。

阶段3:

优点:由Jenkins工具进行代码的发布部署,规范了代码的发布流程,提供可视工具监听整个发布流程等。

缺点:对技术要求更高了,需要了解Jenkins工具,会编写Shell脚本等。

4、Java代码自动部署总结分为以下系列

①总结简介

②使用Maven进行代码部署

③使用Shell进行代码部署

④使用Jenkins进行代码部署

⑤课程总结及心得

【 ②使用Maven进行代码部署】

在使用maven进行代码发布的时候,需要用Maven工具的相关插件将需要部署的项目发布到指定的服务器的部署目录中。

在学习此技术时,我用的的是一个秒杀项目的ssm版,大家在学学习此技术的时候可以用简单一点的Maven项目进行测试。因本项目是学习如何进行部署项目技术的,本次就针对具体项目进行介绍。

1、 使用Maven进行部署项目要求

1) 项目本身属于Maven项目(必要条件)

2) 需要部署的是war包

3) 引入插件

在需要部署的项目的pom,xml文件中引入tomcat插件,在project->build-> plugins节点引入tomcat插件。

<build>
 <plugins>
 <plugin>
 <groupId>org.apache.tomcat.maven</groupId>
 <!-- 引入tomcat插件 -->
 <artifactId>tomcat7-maven-plugin</artifactId>
 <configuration>
 <!-- <url>http://localhost:8080/manager</url> --> <!-- tomcat6部署管理路径 -->
 <url>http://192.168.25.133:8080/manager/text</url> <!-- tomcat7部署管理路径 -->
 <!-- tomcat控制台账号 -->
 <username>admin</username> <!-- tomcat的管理员账号 -->
 <!-- tomcat控制台密码-->
 <password>admin</password>
 <!-- 本地运行时指定的端口号 -->
 <port>8080</port>
 <path>/seckill-manager</path> <!-- 部署路径 -->
 <charset>UTF-8</charset>
 <encoding>UTF-8</encoding>
 </configuration>
 </plugin>
 </plugins>
</build>

4) 执行Maven的redeploy操作

执行的命令:tomcat7:redeploy

在eclipse下配置的命令如下:

Java代码自动部署

 

2、需要注意的问题点

1、在将项目发布到远程Tomcat时需要启动远程Tomcat管理控制台账号

开启tomcat管理控制台账号地址为:Tomcat安装目录/conf/tomcat-users.xml文件

在tomcat-users.xml文件中需要配置允许访问纯文本接口权限,以便maven的tomat插件能够通过此方式进行部署项目。

在tomcat-users节点新增role属性和user属性,如下:

<role rolename="manager-script" />
<role rolename="manager-gui"/>
<user username="admin" password="admin" roles="manager-gui,manager-script"/>

解释:给账号admin配置manager-script及manager-gui权限

Tomcat角色解释图:

Java代码自动部署

 

2、在需要远程发布到的目标Tomcat应该是运行状态,保证Maven的tomcat插件能够访问到目标Tomcat完成项目的部署。

【③使用Shell进行代码部署】

在使用Shell脚本进行重新部署项目时,需要掌握Shell脚本的编写,Shell脚本需要完成以下功能:

1、 将代码clone到服务器指定目录

2、 根据pom.xml文件将代码打包成war包

3、 将war发布到指定服务器

环境要求:

1、 安装Maven并配置环境变量

2、 Git客户端,并配置环境变量

3、 熟悉Shell脚本相关知识

1、编写Shell脚本

在Linux的指定目录新建shell脚本,我是在项目的专用tomcat根目录新建了shell脚本,方便进行tomcat集群部署操作。脚本内容如下:

#!/bin/bash
#shell功能概要:seckill的service提供者构建shell
#发布service提供者的服务器的进程名
serverName="seckill_provider"
#获取发布service提供者的服务器的进程PID
PID=$(ps -ef | grep $serverName | grep -v grep | awk '{ print $2 }')
#java代码本地仓库地址
javaBaseSrc="/opt/java_project_src/"
#项目路径
javaProjectSrc="sekill/seckill-manager/seckill-service/target/seckill-service.war"
#发布的tomcat集群,数组方式存储
projectServicersPath=(/opt/seckill-tomcat/seckill-tomcat-02 /opt/seckill-tomcat/seckill-tomcat-03)
projectName="sekill"
#循环强制停止指定tomcat
for var in ${PID};
do
 echo "准备强制停止PID:$var"
 kill -9 $var
done
echo "kill $serverName sucess"
#切换到git本地仓库目录
cd $javaBaseSrc
#删除仓库库中代码
rm -rf $projectName
echo "从/opt/java_project_src仓库中删除项目$projectName成功"

#从远程仓库下载代码,因涉及到账户信息,此处更改为描述信息

git clone 远程git仓库项目URL

cd $javaBaseSrc/sekill/seckill-manager
#安装项目并跳过测试
mvn -Dmaven.test.skip=true clean install
#判断执行上面mvn操作的返回值是否为0
if [ $? -ne 0 ]
then
 echo "构建失败,请查看代码问题!"
 exit 1;
fi
#循环将项目部署到集群tomcat中
for projectServicer in ${projectServicersPath[@]}
do
 cp $javaBaseSrc$javaProjectSrc $projectServicer/webapps
 echo "$projectServicer 代码发布成功!"
 sh $projectServicer/bin/startup.sh
 if [ $? -ne 0 ]
 then
 echo "$projectServicer 启动失败"
 exit 1;
 else
 echo "$projectServicer 启动成功";
 fi
done
echo "启动 $serverName 成功"

2、需要注意的问题点

在编写Shell脚本时需要知道每句Shell的含义,尽可能将所有问题点都能考虑到,比如:

a) 强杀进程问题

进行PID=$(ps -ef | grep $serverName | grep -v grep | awk '{ print $2 }')时,要确定查询的只是目标Tomcat的进程pid,防止在后续强制停止时将其他应用Tomcat误强行停止,这里建 议给每一个目标Tomcat设置指定的进程名,设置方法为:

在指定tomcat的bin/ setclasspath.sh文件中找到if [ -z "$_RUNJAVA" ]判断语句,进行以下设置即可

if [ -z "$_RUNJAVA" ]; then
#_RUNJAVA="$JRE_HOME"/bin/java
 #注释tomcat默认进程名,设置指定的进程名称,集群的时候可以进行编号01,02,03设置
cp "$JAVA_HOME/bin/java" "$JAVA_HOME/bin/seckill_consumer01"
 _RUNJAVA="$JRE_HOME/bin/seckill_consumer01"
fi

b) Shell脚本尽可能通用

我吸取了现在比较流行的一句话“约定大于配置”及平时所看所想,在编写Shell脚本时可以提取可变或多处使用的变量,使整个Shell脚本尽可能提炼成通用,以便类似项目部署可以使用现有脚本进行更改后使用,减少重新编写新Shell脚本带来不可控的问题。

【④使用Jenkins进行代码部署】

如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家。

在使用Jenkins进行项目部署时,需要将Jenkins的war包放在服务器的指定位置。Jenkins的war的下载可以去Jenkins的官网进行下载。

使用Jenkins进行代码部署时需要的环境支持:

1、安装Maven并配置环境变量

2、Git客户端,并配置环境变量

3、熟悉Shell脚本相关知识

4、对Jenkins有一定了解

使用Jenkins进行代码部署如下:

1、 启动Jenkins工具

在jenkins.war目录执行以下命令操作启动Jenkins工具。

[xiongshx@localhost jenkins]$ java -jar jenkins.war

Jenkins工具初始化的一些操作可以百度或者去Jenkins查看可以参考【https://www.cnblogs.com/cheng95/p/6542036.html】

初始化后需要进行的配置

工具配置

【系统管理】->【全局工具配置】

Jdk配置:

Java代码自动部署

 

Git配置:

Java代码自动部署

 

Maven配置:

Java代码自动部署

 

2、 新建任务

Java代码自动部署

 

需要注意的点:

1、填写源码仓库地址

Java代码自动部署

 

2、构建时操作及自定义shell代码

Java代码自动部署

 

Shell代码如下:

#!/bin/bash
#shell功能概要:seckill的Web消费者构建shell
#引用的技术有:git、maven
#发布web消费者的服务器的进程名
serverName="seckill_consumer"
#获取发布web消费者的服务器的进程PID
PID=$(ps -ef | grep $serverName | grep -v grep | awk '{ print $2 }')

#需要在脚本开始时添加export BUILD_ID=dontKillMe。

#原因:因为Jenkins执行完当前任务之后需要执行下一个任务,此时Jenkins会直接把tomcat进程杀掉,

#因此在脚本中编写的tomcat启动命令是不会执行的。

export BUILD_ID=dontKillMe

#java代码本地仓库地址
javaBaseSrc="/home/xiongshx/.jenkins/workspace/"
#项目路径
javaProjectSrc="seckill/seckill-web/target/seckill-web.war"
#发布的tomcat
projectServicersPath=(/opt/seckill-tomcat/seckill-tomcat-01)
projectName="sekill"
for var in ${PID};
do
 echo "准备强制停止PID:$var"
 kill -9 $var
done
echo "kill $serverName sucess"
#如果上一个命令执行失败,执行的状态码不为0
if [ $? -ne 0 ]
then
 echo "构建失败,请查看代码问题!"
 exit 1;
fi
for projectServicer in ${projectServicersPath[@]}
do
 cp $javaBaseSrc$javaProjectSrc $projectServicer/webapps
 echo "$projectServicer 代码发布成功!"
 /bin/bash $projectServicer/bin/startup.sh
 if [ $? -ne 0 ]
 then
 echo "$projectServicer 启动失败"
 exit 1;
 else
 echo "$projectServicer 启动成功";
 fi
done
echo "启动 $serverName 成功"

3、 启动项目

【立即构建】->【点击构建的链接】->【控制台输出】即可查看整个代码部署过程中的信息输出。

Java代码自动部署

 

Java代码自动部署

 

 4、需要注意的问题点:

1、Jenkins的war问题

最简单jenkins.war的启动方式是在控制台终端执行命令:java -jar jenkins.war;但是此方法会占用一个终端窗口,且关闭后Jenkins工具就不能进行访问,可以使用命令进行后台执行,命令如下:

nohup java -jar jenkins.war --httpPort=9090 > /dev/null 2>&1 &

命令解释:

nohup 后台执行操作

 --httpPort=9090表示指定占用9090端口进行访问
 > /dev/null 将日志输出到/dev/null

2>&1 & 用来将标准错误2重定向到标准输出1中的此处1前面的&就是为了让bash将1解释成标准输出而不是文件1。最后一个&,则是让bash在后台执行。

如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家。

另外一种更优雅的方式是使用Shell脚本控制Jenkins工具的启动、停止、重启等操作。

样例如下:

#!/bin/bash
#功能描述:用于Jenkins运行,停止,重启
#将此脚本放在jenkins.war同级目录
 
#获取Jenkins的进程id
pid=$(ps -ef| grep "jenkins.war" | grep -v grep | awk '{print $2}')
#jenkins默认端口号
jekinsDefaultPort=9090
#如果用户有自定义端口号,则使用用户自定义的端口号启动jenkins
if [ x$2 != x ]
then
 jekinsDefaultPort=$2
fi
 
#启动jenkins
start(){
 if [ x$pid != x ]
 then
 echo "jenkins已经是启动状态..."
 exit 1
 fi
 nohup java -jar jenkins.war --httpPort=$jekinsDefaultPort > /dev/null 2>&1 &
 echo "jenkins启动成功,端口号为:$jekinsDefaultPort..."
 return $?
}
 
stop(){
 echo "准备停止jenkins..."
 if [ x$pid != x ]
 then
 kill -9 $pid
 echo "jenkins已经停止..."
 exit $?
 else
 echo "jenkins的进程id不存在,无法进行停止操作..."
 exit 1
 fi 
}
 
# 重新加载Jenkins
restart() {
 stop
 start
 echo "jenkins重新加载成功,jekins端口号为:$jekinsDefaultPort..."
}
 
case "$1" in
start)
 start
 ;;
stop)
 stop
 ;;
restart)
 stop
 start
 ;;
*)
 echo $"提示: 请在jenkins后输入以下参数:{start|stop|restart} 端口号(不填写时默认端口9090)"
 exit 1
esac
exit $?

2、Jenkins中自定义Shell问题

#需要在脚本开始时添加export BUILD_ID=dontKillMe。

#原因:因为Jenkins执行完当前任务之后需要执行下一个任务,此时Jenkins会直接把tomcat进程杀掉,#因此在脚本中编写的tomcat启动命令是不会执行的。

export BUILD_ID=dontKillMe

【⑤课程总结及心得】

学习代码自动部署的缘由一来是由于在平时开发过程中经常会遇到代码部署的环节,希望通过学习此知识后,如果后续有机会针对自己学会的方案进行评估后简化项目中的项目部署,二来是巩固自己近期来学习到的一些知识,通过层层迭进来学习代码的自动部署方案。虽然目前自己的这些流程方案可能还有所欠缺,且还没有经过实际项目考验,但能学到很多实际的知识也足够了,比如Maven相关知识、Shell相关知识以及Jenkins相关知识,这些是只能通过自己动手慢慢去实践才能获取到的经验。如果对代码部署也感兴趣且觉得我写的东西对你有帮助的同行们,我建议可以按照我的学习步骤去学习自动构建技术。

此系列文章可能写的还不够好,并且很多地方我都进行了一些精简。其实我希望给大家提供的是一个思路。比如学习整个项目部署的思路,由Maven插件部署到Shell脚本部署再到Jenkins部署项目,其实越到后面,Jenkins只是对一些操作做了集成封装,但是我觉得如果我们能从最基本做起,了解其中的流程及原理,真正使用Jenkins进行代码部署时,我们能知道所以然,那样我觉得可以更好的使用Jenkins工具。另外,比如Jenkins.war的启动,我很自然的想到使用Shell脚本将它的启动、运行、重启等命令进行封装,并把它设置为开机启动,我觉得这是一个优雅的方式,以后有类似的情况时,我也会考虑这么做。

本文中还有一些没有提及和没有实现的内容,我希望以及对此技术感兴趣的同行们,都可以发散思维,把事情尽善尽美,做到最优做好。通过编写此系列文章,我巩固了我此类技术的知识的了解以及拓展,也希望能够帮助到大家。如果大家在学习此类技术上遇到疑惑或问题,可以百度查看解决办法,也可以给我留言进行探讨。

如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家。

最后,希望所有人在不久的将来都能遇到一个优秀的自己。

利用 IntelliJ IDEA 进行 Java 代码的自动化构建与部署 在软件开发过程中,Java 代码的构建与部署是重要的环节。传统的手动构建与部署方式不仅效率低下,而且容易出错。利用 IntelliJ IDEA 进行 Java 代码的自动化构建与部署,可以提高开发效率,减少人为错误,确保软件的质量和稳定性。本文的范围涵盖了从环境搭建到实际部署的整个流程,包括使用常见的构建工具 Maven 和 Gradle,以及如何在 IntelliJ IDEA 中配置和使用它们。本文将按照以下结构进行组织:首先介绍核心概念,包括 Maven 和 Gradle 的原理和架构; 阅读详情

相关推荐

Java云部署的三把钥匙:0运维秒上AWS,代码自动飞?

📌 摘要:Java全栈自动化部署实战指南 本文针对Java项目部署痛点,提出**“三把钥匙”解决方案**: 1️⃣ 容器化(Docker):通过Dockerfile打包Spring Boot应用,实现环境一致性,示例展示镜像构建与运行命令。 2️⃣ CI/CD流水线(Jenkins):利用Jenkins Pipeline自动化构建、测试、推送镜像及K8s部署,代码提交即触发全流程。 3️⃣ Kubernetes编排:配置Deployment和HPA,实现Pod自动扩缩容,应对流量波动,降低运维成本。 亮点

java专栏 632

从零搭建Jenkins并自动发布Java项目

从零开始搭建Jenkins,并使用它来自动构建和部署我们的Java项目

果酱 の 博客 4034

javaweb工程自动增量发布小工具

使用svnkit读取svnlog,并通过版本号完成增量发布包的生成

jenkins 本地发布脚本

本文不探讨如何安装配置jdk、maven、git等环境,不探讨jenkins如何安装,该安装哪些插件等。你要知道这些,可以看看 使用Jenkins配置SpringBoot的自动化构建,讲得很详细了。 全局工具配置 如果你的jdk、maven、git环境都是正常的,并且都配置了环境变量。那么只需在【全局工具配置】中做下环境配置 Post Steps 然后新建项目,很显然,我这...

我弟是个程序员 8235

hudson3下载,持续集成工具,java项目自动发布部署工具

hudson.war是基于Java研发的一款持续集成工具的安装包,hudson是一个可以扩展的持续集成引擎,主要是用它来监控一些定时执行的任务、持续、自动地构建/测试软件项目,有需要的欢迎下载使用。 hudson下载,放在tomcat下运行,或持续集成工具的安装包,java项目自动发布部署工具包。配置jdk,cvs或svn或git,配置maven等,可自动拉取服务器代码,自动编译代码,自动发布代码。非常好用的自动发布集成工具。

#智慧文旅#文创商城管理系统,一站式文旅商品营销管理平台

#智慧文旅#文创商城管理系统满足景区、运营公司或者全域文旅对文创店铺、商品的全流程管理需求,提供文创商品的线上线下产品销售、会员管理、促销管理等服务。包括文创店铺的基本信息管理、文创商品的分类管理、标签管理、上下架管理、库存案例、配送管理等功能。

数字赋能,开启智慧文旅新时代 1174

Jenkins自动部署发布Java代码

一、需求: Jenkins大多数情况下都是用来部署Java项目,上一篇博客已经写了自动打包Java项目,但在现实应用中,Jenkins很强大的,可以做到自动打包发布Java项目。这篇文章,将引导大家完成完整的Java项目(自动发布代码功能)! 二、实验环境 主机名 操作系统 IP地址 软件包 Jenkins centos 7 192.168.64.70 Jdk、maven、tomcat Tomcat centos 7 192.16...

weixin_45131345的博客 917

Fanuc机器人的坐标变换矩阵的研究2

一、Funuc用户坐标系的介绍 二、用户坐标系与世界坐标系的坐标转换 三、 以用户坐标系1为基础旋转变换后的用户坐标系 四、关于点的WPR的含义 4.1:点在用户坐标系和世界坐标系下的坐标关系 4.2 通过转换矩阵返回去推导WPR

qq_34047402的博客 1524

mac jenkins+maven+springboot+gitblit+本地部署

clean install -Dmaven.test.skip=true -Ptest #!/bin/bash #export BUILD_ID=dontKillMe这一句很重要,这样指定了,项目启动之后才不会被Jenkins杀掉。 export BUILD_ID=dontKillMe #指定最后编译好的jar存放的位置 www_path=/Users/shenhaibb/Desktop/test #Jenkins中编译好的jar位置 jar_path=/Users/s...

shenhaibb_的博客 382

单细胞拟时序分析实战:用monocle2从Seurat对象构建细胞轨迹(附完整代码)

本文提供了一套完整的单细胞拟时序分析实战教程,详细讲解了如何将Seurat对象转换为Monocle2的CellDataSet,并构建细胞命运轨迹。内容涵盖数据转换、轨迹定义基因选择、降维参数调优、可视化技巧及结果生物学验证,旨在帮助研究者解决实际分析中的常见问题,从静态细胞图谱中挖掘动态发育过程。

weixin_29251337的博客 342

到底是什么决定了二极管的最高工作频率?

硬件工程师,应该都用过二极管的吧,不过也许有一个误区,大多数人可能并不知道,或者说是理解有问题,下面就来细细说下。 一个问题 先提一个问题:到底是什么决定了二极管的最高工作频率? 估计有不少人会回答是二极管反向恢复时间Trr,也有人会说是二极管结电容,那到底谁是对的呢?或者说都一样,反向恢复时间由结电容决定? 到底什么决定了二极管的最高工作频率,我们暂且不论,不过需要知道的是,二极管的反向恢复时间和结电容根本就是两回事,反向恢复时间绝不能等同于结电容的充放电时间。 为什么我这么说呢?.

weixin_42005993的博客 4832

java项目 配置流水线自动发布

@Tomato 文章目录1、介绍2、配置流水线2.1、登录2.2、新建一个项目2.3、新建一个应用2.4、新建一个流水线2.4、设置流水线2.4、设置输入源2.5、设置流水线阶段3、配置Portainer3.1、登录3.2、新建Stacks4、配置Jenkins3.1、登录3.2、新建任务3.3、编辑任务3.4、检查任务状态 官方文档 1、介绍 提交合并到dev分支,则自动发布项目 2、配置流水线 2.1、登录 阿里云流水线 2.2、新建一个项目 2.3、新建一个应用 绑定项目,项目对应多个应

Tomato的博客 1864

RK3588 InsightFace人脸识别移植及精度测试全解析

本文详细介绍了如何在RK3588平台上移植InsightFace人脸识别模型并进行精度验证。通过PyTorch转ONNX、ONNX转RKNN量化模型的关键步骤,实现了INT8量化模型的部署。测试数据显示,该模型在LFW数据集上达到99.43%的准确率(接近官方99.52%),推理时间仅14.23ms。ROC曲线和相似度分布图表明模型区分能力优秀,AUC超过0.99,满足实际应用需求。文中还详解了量化原理、环境搭建和测试方法,为边缘设备部署人脸识别提供了完整解决方案。

Hi20240217的博客 3671

day070-Jenkins自动化与部署java、前端代码

本文介绍了Jenkins自动化部署中的webhook配置和Java项目部署流程。首先讲解了通过webhook实现GitLab代码提交自动触发Jenkins构建的配置方法,包括Jenkins项目设置和GitLab内网域名解析设置。其次介绍了防止重复构建的机制,通过比较Git提交ID避免重复部署。最后详细说明了Java项目的Maven环境配置、编译测试、代码推送至GitLab以及Jenkins-Maven任务的创建过程,实现从代码提交到自动化部署的完整流程。文章配有丰富截图,帮助理解各环节操作步骤。

我的梦想有多远,我就能走多远! 1497

基于ESP32-P4的低成本旋转式激光雷达系统设计

激光雷达(LiDAR)作为机器人环境感知的核心传感器,其本质是融合光学测距、机电控制与实时数据处理的嵌入式系统。理解时间飞行(ToF)原理与机械旋转耦合机制,是实现高精度点云采集的基础;而系统级误差源——如计时抖动、电机惯性、信号串扰和温漂——直接决定实际建图鲁棒性。在资源受限场景下,选用RISC-V双核MCU(如ESP32-P4)可兼顾实时控制与网络服务能力,通过硬件时间戳捕获、S型加减速轨迹规划、旋转变压器供电及双Bank OTA等工程手段,有效平衡分辨率、帧率与稳定性。本文围绕360°旋转式激光雷达的

weixin_36231030的博客 433

【Settings随记:二】一级菜单,二级菜单的添加与隐藏,添加辅助功能

首先会去调用父类的onCreatePreferences(Bundle savedInstanceState, String rootKey)方法,然后调用addPreferencesFromResource(R.xml.assistant_function)方法(这个方法是父类的)加载二级菜单的xml配置文件,实现创建二级菜单,这个配置文件路径在res/xml/assistant_function.xml。controller:该item的控制器,控制它的内容展示,是否可用,也可以控制它的点击事件等。

镇元子的博客 1595

JAVA代码自动部署

自动部署过程:jenkins从svn拉取代码+maven去打war包+ansible去部署+重启tomcat。 前情回顾:在前面的文章我的环境已经有Jenkins+ansible ,在加上我们公司有自己的SVN,我只要在本地安装个Tomcat就ok啦。      其实也有Tomcat的,但我喜欢自己玩自己的,谁让我是菜鸟了呢,这其中的坑真的不少,希望能帮到初学者。 一. 什么是Mave...

weixin_30725315的博客 356

华为OD机试真题 新系统 9月20号 【字符串分组求和】

华为OD新系统机试真题【字符串分组求和】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【字符串分组求和】解析。

qq_45776114的博客 623

java 实现自动生成部署文档_jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发......

jenkins主机内存和gitlab主机内存最好配置4G及以上,防止各自的web端打不开1.配置JDK环境1)jdk解压到此目录[root@localhost src]# pwd /usr/local/src[root@localhost src]# tar xvf jdk-8u211-linux-x64.tar.gz2)创建jdk相关的软连接[root@localhost src]# ln -s...

weixin_39931390的博客 440

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Jenkins整合Java应用全流程详解:从代码提交到自动部署只需7分钟

掌握Java Jenkins整合技巧,实现代码提交后7分钟内自动构建部署。适用于Spring Boot等Java项目,涵盖CI/CD流水线配置、自动化测试与远程发布。提升开发效率,减少人工干预,值得收藏。

AlgoInk的博客 640

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Arbess从基础到实践(19) - 集成GitLab+sourcefare实现Java项目代码扫描通过后自动化部署

Arbess 是一款国产开源免费的 CI/CD 工具,支持免费私有化部署。本文将详细介绍如何安装配置使用GitLab、sourcefare、Arbess系统,GitLab提交代码自动触发流水线拉取GitLab源码、并使用sourcefare代码扫描,然后进行java构建并部署到主机。

tiklab2021的博客 1090

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

上一篇: Spring Boot 整合 MyBatis 连接 Oracle数据库
下一篇: 了解Logstash
javaQQ群 866865133
博客等级 码龄8年 59粉丝 309原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值