使用 Jenkins + Gitee + maven 自动化部署 Spring Boot

news2024/11/18 9:24:13

目录

1、前言

1 .1、插件简介

1.2、插件安装

2、创建Maven项目

2.1、新建一个全新的项目

2.2、拷贝已有项目

3、项目配置

3.1 、General

3.2、源码管理

3.3、构建触发器

3.4、构建环境

3.5、Pre Steps

3.6、Build

1)Root POM

2)Goals and options

3)【高级】

3.7、Pre Steps

3.8、构建环境

3.9、Post Steps⁎⁎⁎

4、配置邮件通知服务

4.1、安装Email Extension Plugin插件

4.2、获取邮箱授权码

4.3、配置Jenkins邮箱通知

4.4、配置邮件通知 

4.5、Extended E-mail Notification配置

1)、配置SMTP服务器地址及其端口

2)、配置邮件登录凭证

3)、配置邮件通知标题、内容

4)、Extended E-mail Notificati其他配置

4.5、项目配置

4.6、邮件效果


本文主要介绍Jenkins自动打包、推送,发布,邮件通知,Jenkins具体配置参考之前文章

(一)Jenkins部署、基础配置

(二)Jenkins全局工具配置

1、前言

1 .1、插件简介

有很多插件都是选择的默认的安装的,Git plugin 和 Maven Integration plugin、publish over SSH、Deploy to container、Subversion

Git3.11.0使用Git访问远程仓库
Git Push Plugin34通过Git 插件执行 git push 作为构建后的步骤
Gitee Plugin1.2.7允许 Gitee 在提交代码或打开/更新拉取请求时触发 Jenkins 中的构建。它还可以将构建状态发送回 Gitee。
Maven Integration plugin 3.20这提供Jenkins和Maven之间的深度集成。它增加了对基于SNAPSHOT的项目之间自动触发的支持,以及对Junit等各种Jenkins发布程序的自动配置。
publish-over-ssh1.20.1用于将编译结果发布到远程服务器
Deploy to container成功构建后将战争到容器Tomcat等。
Subversionsvn插件
Xcode integration提供构建器来构建xcode项目,调用agvtool和包。ipa文

Jenkins本身无法实现远程部署到Tomcat的功能,需要安装Deploy to container Plugin插件实现 

1.2、插件安装

1). 安装SSH插件
如果没有安装SSH插件的话,是不支持配置远程SSH的,这里可以去插件里面看下,是否安装了。

2). 新增全局配置
环境配置, 管理Jenkins-->Configure System 找到 Publish over SSH,点击新增,新增SSH Server,输入Hostname,Username,Password,点击Test Configuration,提示:Success  代表SSH连通远端服务器,保存即可。

注:如果没有勾选 Use password authentication, or use a different key这个选项,点击测试连接,会报错:jenkins.plugins.publish_over.BapPublisherException: Failed to connect and initialize SSH connection

2、创建Maven项目

2.1、新建一个全新的项目

1)点击【新建Item】

2)输入任务名称

3)选择【构建一个maven项目】

4)点击【确定】,进入配置页面

2.2、拷贝已有项目

1)点击【新建Item】

2)输入任务名称

3)复制输入需要复制项目的名称,可下拉快捷选择

4)点击【确定】,进入配置页面,此时配置页面带有复制的项目配置,根据本项目需要修改即可

3、项目配置

        如果是新建任务,则直接进入配置页面修改配置;如果是已有任务,则右上角查找项目名称,回车后进入此项目空间,左侧点击【配置】按钮,进入配置页面;或者是列表直接找到项目名称,点击项目名称进入此项目;

3.1 、General

(1)、描述

纯文本,备注,项目简介、用途等

(2)、Discard old builds(丢弃旧的构建)

配置build保留的次数与天数;发布包保留次数、天数

Jenkins job执行build后,会在服务器上留下build记录及发布包,这些内容会占用磁盘空间;默认配置是不勾选Discard old builds的,此时默认值为365,显然这个值过大了;

Jenkins job在每次build结束后(无论成功还是失败),都会自动执行Discard old builds,释放磁盘空间;

因此根据磁盘空间来设置选项,如果磁盘空间充足,则均为15,如果磁盘空间不足,则均设置为3;当然也可根据实际需求来设置;

如图配置也可:

 其中“发布包保留天数”和“发布包最大保留”,这两个选项是通过 Discard old builds右下角【高级】按钮控制显示的;

(3)、Gitee 链接

默认值为:https://gitee.com

3.2、源码管理

1、选择代码管理,比如git

2、输入地址

3、添加凭据,建议以ssh登录

4、指定分支,默认*/master

配置源码仓库地址及账号,下图为Gitee示例

Repository URL:svn、Gitee代码地址;

Credentials(证书):已配置直接点击下拉框选择;第一次增加时需要点击【添加】按钮进行添加

3.3、构建触发器

        当某个事件被触发时,自动重新构建项目;非必须,一般都通过build now手动执行构建;当然了解了触发器,可以根据触发器形式打造理想中的构建形式。

1)Build whenever a SNAPSHOT dependency is built

当job依赖的快照版本被build时,执行本job;即当代码有更新时就构建项目

2)Build after other projects are built

作用:配置关注的项目,当关注的项目构建后,构建本项目

3)Build periodically:隔一段时间定时build一次,不管版本库代码是否发生变化

日程表规则:

MINUTE Minutes whinin the hour(0-59)

HOUR  The hour of the day(0-23)

DOM The day of the month(1-31)

MONTH The month(1-12)

DOW  The day of the week(0-7) where 0 and 7 are Sunday.

第一个是代表分钟 H 表示随机 
第二个是代表小时 9-15/4 9点到下午三点期间的每隔4个小时 
第三个是代表天 * 任意一天 
第四个是代表月份 1-11 表示1到11月份 
第五个是代表星期 1-5 表示工作日

没有用到 H 随机的话,不要加括号 
H(9-18) 9点到18点 中随机的一个点 
eg: 
* * * * * 表示任何一个时间段,同一个时间都可能会触发执行。不建议使用 
H/30 * * * * 表示每天每隔 30分钟构建一次 
H 4-19/3 * * * 表示,一天的凌晨点到下午7点,每隔3个小时构建一次 
* * 3-5 * * 表示,每个月的3号,4号,5号 都会被构建,具体时间未知 
* * * * 1-5 表示,工作日时会构建,具体时间未知 
H/30 8-19/3 1-28 1-11 1-5 表示 在1月到11月中的1号-28号,每个工作日,早晨的8点到下午7点每隔3.5个小时会触发构建(个人怀疑此条规则说错了,H/30意思就是每30分钟一次)

H */12 * * * 表示每12小时会触发构建

H/30 11-13/1 21-28 4-5 1-5  经验证,为11:20到13:50,每隔30分钟构建一次(11:20、11:50、12:20、12:50、13:20、13:50),而且是到13点50才结束

个人配置如图 ,每天中午12点定时构建一次:

4)Poll SCM:轮询构建

指定一段时间间隔去扫描代码仓库的代码是否有变更,如果有,则出发项目构建;

日程表的规则应该是遵循上述规则,未验证;

3.4、构建环境

非必须,但建议勾选Delete workspace before build starts。勾选此选项后,每次打包前jenkins会先删除工作区代码再打包;如果不勾选此选项,开发人员删除某些代码文件,但是此文件仍然在工作区保留,打包时仍然会带着打包,有可能会通过打包引起的bug;

 每次重新构建时都会从配置的源码地址取到最新的项目代码放到工作区中,但是Jenkins只会将代码放到工作区中,而不执行删除操作,同样的文件会覆盖掉,但如果新的代码中有些文件已经删除了,则在工作区中还会保留。所此需要构造这个选项。

3.5、Pre Steps

构建前操作,一般不需要配置

3.6、Build

1)Root POM

对应的pom.xml路径,此路径是相对于workspace的相对路径;注意:是相对位置,如果该文件不存在,会有红色字提示。 

2)Goals and options

打包命令,不要加mvn,默认前缀会加;一般为空即可,如果有需要再添加内容;可添加maven命令。

clean package -Dmaven.test.skip=true(清除以前的包,重新打包,并跳过测试) 

3)【高级】

点击高级按钮,配置maven,若在安装Jenkins后已对系统配置maven,则无需每次新建项目再次配置maven

3.7、Pre Steps

构建后操作:如果需要实现自动构建自动发布,则需要配置,或在Post Steps选项下配置

Execute Windows Batch command:执行Windows批处理命令

Execute shell:执行shell脚本

Invoke Ant:调用Ant脚本

Invoke Gradle script:调用Gradle脚本

Invoke top-level Maven targets:调用Maven项目等

Send files or execute commands over SSH:通过SSH发送文件或执行命令

Set build status to 'pending'on GitHub commit:构建状态设置为“等待我们GitHub提交

3.8、构建环境

Send files or execute commands over SSH after the build runs:这个表示在构建之后,执行向指定远程服务器发送文件或者在远程服务器执行脚本命令

add timestamps to the Console Output 表示构建控制台的日志加上时间戳 

3.9、Post Steps⁎⁎⁎

配置Send files or execute commands over SSH,实现远程将自动构建的jar包上传至远程服务器

1)run only if build succeeds

只有在构建成功后再运行下面步骤,

2)send files or execute commands over ssh

表示在构建之后,执行向指定远程服务器发送文件或者在远程服务器执行脚本命令,点击按钮Add post-build step选择添加

3)send files or execute commands over ssh 配置

点击高级对 脚本相关信息配置

SSH  Server Name:要拷贝的远程服务器,下拉选择系统配置选项配置好的服务器
Transfer Set source files:相对于工作空间的相对目录,例如:包在tatget/*.jar,可以填写多个,默认用逗号分隔,输入**/*表示所有目录下的所有文件
remove prefix:去除前缀,传到远程服务器上去掉此路径,比如:为空的话,传到服务器的地址为 上面全局配的 目录起始位置,例如此处:target/   
remote directory: 远程服务器包存放位置,相对于系统配置中配置SSH服务目录下路径,例如SSH服务器配置路径为: /home,这里配置为test/,文件上传后目录为:/home/test

exec command: 在文件传输完成后,在远程服务器执行的脚本命令(拷贝文件后,需要在服务器上要执行的脚本/命令)需要在部署服务器对应目录下新建shell脚本

exec timeout:脚本执行超时时间,尽量大一些,不然脚本没执行完任务就结束了
exec in pty:执行脚本后超时会自动退出

示例:

Source files选项是相对于project workspace的,输入**/*表示所有目录下的所有文件
Remote directory选项是配置的远程服务器相对路径(或者服务器的绝对路径?)
Exec command选项是在文件传输完成后,在远程服务器执行的脚本命令。

Name: 远程服务器IP

Source files:target/*.jar

Remove prefix: target/

Remote directory: /dyt

 exec command文件传输后执行命令,启动服务

source /etc/profile
project=sendEmail-0.0.1-SNAPSHOT.jar
echo "文件目录"
dir=/home/dyt/
pid=`ps -ef | grep $dir$project | grep -v grep | awk '{print $2}'`
if [ -n "$pid" ]
then
   kill - $pid
fi
echo "运行构建的jar包"
nohup java -jar  $dir$project >/dev/null 2>&1 &

控制台输出查看结果:

Started by user administrator
Running as SYSTEM
Building in workspace C:\ProgramData\Jenkins\.jenkins\workspace\sendEmail
The recommended git tool is: NONE
using credential 0cdd1aa5-60b1-4f47-9bf8-dab98e3619dc
 > git.exe rev-parse --resolve-git-dir C:\ProgramData\Jenkins\.jenkins\workspace\sendEmail\.git # timeout=10
Fetching changes from the remote Git repository
 > git.exe config remote.origin.url https://toscode.gitee.com/dyt314569024/test.git # timeout=10
Fetching upstream changes from https://toscode.gitee.com/dyt314569024/test.git
 > git.exe --version # timeout=10
 > git --version # 'git version 2.39.0.windows.2'
using GIT_ASKPASS to set credentials 
 > git.exe fetch --tags --force --progress -- https://toscode.gitee.com/dyt314569024/test.git +refs/heads/*:refs/remotes/origin/* # timeout=10
 > git.exe rev-parse "refs/remotes/origin/master^{commit}" # timeout=10
Checking out Revision b71f4fa4b13fa2cc65363ff4d0bea9e1fb31c4e0 (refs/remotes/origin/master)
 > git.exe config core.sparsecheckout # timeout=10
 > git.exe checkout -f b71f4fa4b13fa2cc65363ff4d0bea9e1fb31c4e0 # timeout=10
Commit message: "11"
 > git.exe rev-list --no-walk b71f4fa4b13fa2cc65363ff4d0bea9e1fb31c4e0 # timeout=10
Parsing POMs
Modules changed, recalculating dependency graph
Established TCP socket on 11918
[sendEmail] $ java -cp C:\ProgramData\Jenkins\.jenkins\plugins\maven-plugin\WEB-INF\lib\maven35-agent-1.14.jar;F:\apache-maven-3.6.1\boot\plexus-classworlds-2.6.0.jar;F:\apache-maven-3.6.1/conf/logging jenkins.maven3.agent.Maven35Main F:\apache-maven-3.6.1 C:\ProgramData\Jenkins\war\WEB-INF\lib\remoting-3077.vd69cf116da_6f.jar C:\ProgramData\Jenkins\.jenkins\plugins\maven-plugin\WEB-INF\lib\maven35-interceptor-1.14.jar C:\ProgramData\Jenkins\.jenkins\plugins\maven-plugin\WEB-INF\lib\maven3-interceptor-commons-1.14.jar 11918
<===[JENKINS REMOTING CAPACITY]===>channel started
Executing Maven:  -B -f C:\ProgramData\Jenkins\.jenkins\workspace\sendEmail\pom.xml -s F:\apache-maven-3.6.1\conf\settings.xml -gs F:\apache-maven-3.6.1\conf\settings.xml clean package -Dmaven.test.skip=true(清除以前的包,重新打包,并跳过测试)
[INFO] Scanning for projects...
[INFO] 
[INFO] -----------------------< com.ykx.mail:sendEmail >-----------------------
[INFO] Building sendEmail 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:3.1.0:clean (default-clean) @ sendEmail ---
[INFO] Deleting C:\ProgramData\Jenkins\.jenkins\workspace\sendEmail\target
[INFO] 
[INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ sendEmail ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] Copying 5 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ sendEmail ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 25 source files to C:\ProgramData\Jenkins\.jenkins\workspace\sendEmail\target\classes
[INFO] 
[INFO] --- maven-resources-plugin:3.1.0:testResources (default-testResources) @ sendEmail ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\ProgramData\Jenkins\.jenkins\workspace\sendEmail\src\test\resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ sendEmail ---
[INFO] No sources to compile
[INFO] 
[INFO] --- maven-surefire-plugin:2.22.2:test (default-test) @ sendEmail ---
[INFO] No tests to run.
[JENKINS] Recording test results
[INFO] 
[INFO] --- maven-jar-plugin:3.1.2:jar (default-jar) @ sendEmail ---
[INFO] Building jar: C:\ProgramData\Jenkins\.jenkins\workspace\sendEmail\target\sendEmail-0.0.1-SNAPSHOT.jar
[INFO] 
[INFO] --- spring-boot-maven-plugin:2.2.6.RELEASE:repackage (repackage) @ sendEmail ---
[INFO] Replacing main artifact with repackaged archive
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  16.466 s
[INFO] Finished at: 2023-01-19T23:04:56+08:00
[INFO] ------------------------------------------------------------------------
Waiting for Jenkins to finish collecting data
[JENKINS] Archiving C:\ProgramData\Jenkins\.jenkins\workspace\sendEmail\pom.xml to com.ykx.mail/sendEmail/0.0.1-SNAPSHOT/sendEmail-0.0.1-SNAPSHOT.pom
[JENKINS] Archiving C:\ProgramData\Jenkins\.jenkins\workspace\sendEmail\target\sendEmail-0.0.1-SNAPSHOT.jar to com.ykx.mail/sendEmail/0.0.1-SNAPSHOT/sendEmail-0.0.1-SNAPSHOT.jar
SSH: Connecting from host [DYT]
SSH: Connecting with configuration [dytCS] ...
SSH: Creating session: username [root], hostname [192.168.6.77], port [22]
SSH: Connecting session ...
channel stopped
SSH: Connected
SSH: Opening SFTP channel ...
SSH: SFTP channel open
SSH: Connecting SFTP channel ...
SSH: Connected
SSH: cd [/home]
SSH: OK
SSH: cd [/home]
SSH: OK
SSH: cd [dyt/]
SSH: OK
SSH: put [sendEmail-0.0.1-SNAPSHOT.jar]
SSH: OK
SSH: Opening exec channel ...
SSH: EXEC: channel open
SSH: EXEC: STDOUT/STDERR from command [source /etc/profile
project=sendEmail-0.0.1-SNAPSHOT.jar
echo "文件目录"
dir=/home/dyt/
pid=`ps -ef | grep $dir$project | grep -v grep | awk '{print $2}'`
if [ -n "$pid" ]
then
   kill - $pid
fi
echo "运行构建的jar包"
nohup java -jar  $dir$project >/dev/null 2>&1 &] ...
SSH: EXEC: connected
鏂囦欢鐩綍
bash: 绗� 8 琛岋細kill: 锛氭棤鏁堢殑淇″彿澹版槑
杩愯鏋勫缓鐨刯ar鍖�
SSH: EXEC: completed after 213 ms
SSH: Disconnecting configuration [dytCS] ...
SSH: Transferred 1 file(s)
Finished: SUCCESS

  备注:高级选项勾选:Verbose output in console,代表可以在控制台看到执行结果,不勾选虽然执行成功了那么看不到。
windows的服务器执行文件,python文件或者其他,需要使用execute windows batch commend  。liunx 下使用execute shell

4、配置邮件通知服务

4.1、安装Email Extension Plugin插件

安装路径:Manage Jenkins>Manage Plugins

4.2、获取邮箱授权码

测试用的QQ邮箱,确保POP3/SMTP/IMAP服务是开启的,点击生成授权码,发送短信获取授权码,用于后续配置登录凭证

4.3、配置Jenkins邮箱通知

Manage Jenkins > Configure System下,Jenkins Location中配置系统管理员的邮箱地址

 拖动页面右侧滑块到页面最底部,接着进行邮件通知的相关配置

4.4、配置邮件通知 

SMTP服务器:使用邮箱对应的服务器地址

用户默认邮件后缀:可不填,填了,代表其他创建的用户账号的默认邮箱后缀为填入的邮箱后缀

SMTP用户名/密码:发送邮件的账号,密码为获取的授权码

SMTP端口:SMTP对应服务器对应端口

通过发送测试邮件测试配置

Test e-mail recipient :接收测试邮件邮箱地址

Test configuration:测试配置,点击Test configuration按钮,为测试账号发送邮件,成功提示 Email was successfully sent

 测试时若出现 javax.mail.MessagingException: Got bad greeting from SMTP host: smtp.163.com, port: 465, response: [EOF] 错误,则查看使用的端口是否需要使用SSL协议 

在配置上以上邮件通知并测试通过,测试邮箱成功收到测试邮件后,还需对Extended E-mail Notification模块进行配置(这个模块是用于发送构建后的报告邮件,不进行配置的话,在之后的项目构建中,你就会看到构建成功,邮件也发送成功,但是邮箱就是没有收到邮件)

4.5、Extended E-mail Notification配置

1)、配置SMTP服务器地址及其端口

常用邮箱SMTP服务器地址及端口POP3服务器地址及端口
QQ邮箱smtp.qq.com(端口:25)pop.qq.com(端口:110)
QQ企业邮箱pop.exmail.qq.com (SSL启用 端口:995)smtp.exmail.qq.com(SSL启用 端口:587/465)
126邮箱pop.126.com(端口:110)smtp.126.com(端口:25)

2)、配置邮件登录凭证

Credentials:添加凭证

 密码重新获取授权码

  凭证配置操作如图

 

 注意:SMTP Username中的账号一定要与系统管理员的邮箱账号保持一致

3)、配置邮件通知标题、内容

 由于邮件使用了Html编写,所以配置Default Content Type选择类型HTML (text/html),附邮件内容代码

<!DOCTYPE html>    
<html>    
<head>    
<meta charset="UTF-8">    
<title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title>    
</head>    
    
<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4"    
    offset="0">    
    <table width="95%" cellpadding="0" cellspacing="0"  style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">    
        <tr>    
            本邮件由系统自动发出,无需回复!<br/>            
            各位同事,大家好,以下为${PROJECT_NAME }项目构建信息</br> 
            <td><font color="#CC0000">构建结果 - ${BUILD_STATUS}</font></td>   
        </tr>    
        <tr>    
            <td><br />    
            <b><font color="#0B610B">构建信息</font></b>    
            <hr size="2" width="100%" align="center" /></td>    
        </tr>    
        <tr>    
            <td>    
                <ul>    
                    <li>项目名称 : ${PROJECT_NAME}</li>    
                    <li>构建编号 : 第${BUILD_NUMBER}次构建</li>    
                    <li>触发原因: ${CAUSE}</li>    
                    <li>构建状态: ${BUILD_STATUS}</li>    
                    <li>构建日志: <a href="${BUILD_URL}console">${BUILD_URL}console</a></li>    
                    <li>构建  Url : <a href="${BUILD_URL}">${BUILD_URL}</a></li>    
                    <li>工作目录 : <a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li>    
                    <li>项目  Url : <a href="${PROJECT_URL}">${PROJECT_URL}</a></li>    
                </ul>    
 
<h4><font color="#0B610B">失败用例</font></h4>
<hr size="2" width="100%" />
$FAILED_TESTS<br/>
 
<h4><font color="#0B610B">最近提交(#$SVN_REVISION)</font></h4>
<hr size="2" width="100%" />
<ul>
${CHANGES_SINCE_LAST_SUCCESS, reverse=true, format="%c", changesFormat="<li>%d [%a] %m</li>"}
</ul>
详细提交: <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a><br/>
 
            </td>    
        </tr>    
    </table>    
</body>    
</html>

4)、Extended E-mail Notificati其他配置

 

4.5、项目配置

打开项目设置,找到选项卡构建后操作, 点击增加购进后操作步骤,选择Editable Email Notification。

Project Recipient List:填入收件人的邮箱账号,有多个账号时使用逗号隔开

 Attachments:读取路径是主目录下的workspace文件夹 ,所以想要将报告以附件的形式发送的话,就需要在build文件中将报告的生成路径更改为项目的工作空间,

针对单个文件,直接填写相对路径;多个文件需要作为附件进行发送,可在Attachments中填入report/*.txt,如有多个文件的话,路径之间用英文逗号隔开,例如,项目根文件夹下有个文件1.txt,2.txt

Attach Build Log:选择是否发送构建日志

Content Type:内容类型,一般为html

Default Content:邮件内容,默认为系统设置

注:其他文件类型同理,路径同理,不支持发送文件夹,只能发送文件,一定要发送文件夹的话,就将其压缩成一个压缩文件

4.6、邮件效果

鸣谢:Jenkins配置邮件通知服务,完整教程(含发送成功无法接收邮件处理方案)_不定时总结的那啥的博客-CSDN博客_jenkins 邮件通知 

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

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

相关文章

kubenertes集群部署kubeadm方式

一、安装要求 1、3台机器&#xff09;&#xff0c;操作系统Centos7,5.4内核,CentOS 7.x 系统自带的3.10.x内核存在一些Bugs.导致运行的Docker.Kubernetes不稳定。 2、硬件配置:4GB内存&#xff0c;至少2个CPU或更多CPU&#xff0c;至少硬盘30GB或更多 3、集群中所有机器之间网…

41 锚框【动手学深度学习v2】】

41 锚框【动手学深度学习v2】】 锚框&#xff1a;对边框位置的猜测。 先提出多个框在某个地方&#xff0c;比如5个&#xff0c;然后去看这5个框里面到底有没有物体。 两次预测&#xff1a;锚框位置和锚框内物体的预测。 如何处理锚框&#xff1f; IoU - 交并比 比较两个框之…

Java开发实现图书管理系统(超详细)

本文用Java代码实现图书代码管理系统&#xff0c;有些地方可能会有纰漏&#xff0c;希望各位大佬鉴赏&#xff01;&#xff01; 文章目录 文章目录 一、Java实现图书管理系统 1.1创建book包 二、创建图书管理系统的操作包 2.1创建Operation接口 三、创建User包 3.1创建User类 四…

深度盘点时间序列预测方法

本篇介绍时间序列的定义、任务、构成以及预测方法&#xff0c;主要是基本概念的介绍和理解。 时间序列定义 时间序列&#xff0c;通俗的字面含义为一系列历史时间的序列集合。比如2013年到2022年我国全国总人口数依次记录下来&#xff0c;就构成了一个序列长度为10的时间序列…

CAN FD的一致性测试 助力汽车电子智能化

后起之秀——CAN FD&#xff1a;随着各个行业的快速发展&#xff0c;消费者对汽车电子智能化的诉求越来越强烈&#xff0c;这也致使整车厂将越来越多的电子控制系统加入到汽车控制中。在传统汽车、新能源汽车、ADAS和自动驾驶等汽车领域中&#xff0c;无不催生着更高的需求&…

4.kafka--生产调优

文章目录1.硬件配置选择1.场景说明2.服务器台数选择3.磁盘选择4.内存选择1) 堆内存配置2&#xff09;页缓存配置5. cpu选择6.网络选择2.生产者3.kafka broker4. 服役新节点&#xff0c;退役旧节点1&#xff09;创建一个要均衡的主题。2) 生成一个负载均衡的计划leader分布不均匀…

多人配音怎么做的?这两个多人配音方法分享给你

大家在刷一些短视频的时候&#xff0c;肯定有看到过一些搞笑的视频&#xff0c;而这些视频总能让我们捧腹大笑&#xff0c;过后再多看几次&#xff0c;其实你可以明显的发现这是多人互动对话或者一人分饰多角所呈现的&#xff0c;我们想要做出这种类型的视频&#xff0c;一般需…

法律常识(五)《消费者权益保护法》解读与举例

目录 酒楼谢绝客户自带酒水&#xff0c;合法吗&#xff1f; 侵犯消费者人格尊严&#xff0c;应承担民事责任 某公司出售伪劣产品致人损害&#xff0c;需双倍赔偿 农民购买、使用直接用于农业生产的生产资料 《中华人民共和国产品质量法》相关记录 《中华人民共和国反不正…

Android 双屏异显(Presentation) 开发,将第二个页面投屏到副屏上

1. 背景 最近开发的一个项目&#xff0c;有两个屏幕&#xff0c;需要将第二个页面投屏到副屏上&#xff0c;这就需要用到Android的双屏异显(Presentation)技术了&#xff0c;研究了一下&#xff0c;这里做下笔记。 我们那个副屏是一块汽车的后视镜(流媒体后视镜)&#xff0c;是…

超详细:KNN与K-means从入门到实战

作者&#xff1a;王同学 来源&#xff1a;投稿 编辑&#xff1a;学姐 1. 基本概念 1.1 KNN k近邻法&#xff08;k-nearest neighbor&#xff0c;k-NN&#xff09;是一种基本分类与回归方法。 k近邻法的输入为实例的特征向量对应于特征空间的点&#xff1b;输出为实例的类别&…

CnOpenData食品安全抽检数据

一、数据简介 食品安全是关乎人体生命健康的公共卫生问题。近年来&#xff0c;频繁发生的食品安全事件给人民的生命健康带来了巨大威胁&#xff0c;并成为人们关注的热点问题。   民以食为天&#xff0c;食以安为先。由于消费者和生产者之间存在信息不对称&#xff0c;完善…

【Linux】---进程程序替换

进程替换出现的背景我们可以用fork函数来创建子进程&#xff0c;使父子进程同时出现。正所谓子承父业&#xff0c;子进程在刚被创建时和父进程共享数据和代码&#xff0c;但是操作者想让子进程执行一个全新的程序&#xff0c;这个使子进程执行全新程序的操作叫做进程程序替换。…

前端播放大视频卡顿的解决(m3u8视频流)

前言 最近在一个大屏看板项目中有一个需求是&#xff1a;要求视频和看板要进行来回切换。 最开始的做法是将MP4视频放在项目里&#xff0c;在本地运行时是没什么问题的&#xff0c;但是在往仓库里提交代码时出现了问题。当单个文件超过100MB时会导致代码提交失败&#xff1b; …

【闲聊杂谈】直击重灾区 - 多线程与高并发

在开始学习多线程与高并发的知识之前&#xff0c;我想先问一个问题&#xff1a;你平时在写代码的时候&#xff0c;有没有刻意的去思考如何压榨CPU性能&#xff1f;其实纵观整个编程的发展历史&#xff0c;其实就是一部对于CPU性能压榨的血泪史。 单进程人工切换 最早的编程…

@Reference、@Autowired、@Resource的区别

目录 1. Autowired 和 Resource 的区别相同点&#xff1a;不同点&#xff1a;Resource 装配顺序2. Reference 和 Autowired 的区别理解1理解2理解31. Autowired 和 Resource 的区别 相同点&#xff1a; Resource 的作用相当于Autowired &#xff0c;均可标注在字段或属性的se…

4、因果法

因果图中的图形符号 恒等。若原因出现&#xff0c;则结果出现&#xff1b;若原因不出现&#xff0c;则结果不出现。非。若原因出现&#xff0c;则结果不出现&#xff1b;若原因不出现&#xff0c;则结果出现。或。若几个原因中有一个出现&#xff0c;则结果出现&#xff1b;若几…

章节8 文本编辑器

8-Linux文本编辑器 文本编辑器 Windows&#xff1a;Notepad&#xff08;记事本&#xff09;、Sublime、UltraEdit等 Linux&#xff1a;VI/VIM &#xff08;最常用&#xff09;、nano、Emacs、Sed、gedit、Kate等 01 VI和VIM的区别 VI和VIM的区别 VI&#xff1a;Visual In…

C 语言零基础入门教程(十六)

C 位域 如果程序的结构中包含多个开关量&#xff0c;只有 TRUE/FALSE 变量&#xff0c;如下&#xff1a; struct {unsigned int widthValidated;unsigned int heightValidated; } status;这种结构需要 8 字节的内存空间&#xff0c;但在实际上&#xff0c;在每个变量中&#…

云计算|OpenStack发展简史

前言&#xff1a; 一般以open开始的软件都非常的牛逼&#xff0c;例如&#xff0c;OpenCV&#xff08;人工智能学习库&#xff09;&#xff0c;OpenStack&#xff08;云计算基础操作系统&#xff09;&#xff0c;openwrt&#xff08;软路由&#xff09;&#xff0c;openEuler&…

表单设计器

表单设计器目录概述需求&#xff1a;设计思路实现思路分析参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for change,challenge Survive. happy for h…