Jenkins三种构建类型

目录

  • 传送门
  • 前言
  • 一、概念
  • 二、前置处理(必做)
    • 1、赋予777权限
    • 2、让jenkins用户拥有root用户的kill权限
    • 3、要运行jar包端口号需要大于1024
  • 三、自由风格软件项目(FreeStyle Project)(推荐)
  • 三、Maven项目(Maven Project)
  • 四、流水线项目(Pipeline Project)
    • 1、概念
    • 2、拉取代码
    • 3、编译打包
    • 4、项目部署
    • 5、Jenkinsfile文件
  • 五、常见报错分析
    • 1、路径错误
    • 2、kill没有权限
    • 3、项目启动报错
  • 六、jenkins清除构建历史防止磁盘爆满(非常重要)
  • 七、jenkins的另一种日志磁盘爆满(非常重要)
  • 八、jenkins重启项目全部丢失

传送门

SpringMVC的源码解析(精品)
Spring6的源码解析(精品)
SpringBoot3框架(精品)
MyBatis框架(精品)
MyBatis-Plus
SpringDataJPA
SpringCloudNetflix
SpringCloudAlibaba(精品)
Shiro
SpringSecurity
java的LOG日志框架
Activiti(敬请期待)
JDK8新特性
JDK9新特性
JDK10新特性
JDK11新特性
JDK12新特性
JDK13新特性
JDK14新特性
JDK15新特性
JDK16新特性
JDK17新特性
JDK18新特性
JDK19新特性
JDK20新特性
JDK21新特性
其他技术文章传送门入口

前言

承接 Jenkins的jdk和maven配置一文,
以CentOS7上面的支持JDK8的Jenkins2.346-1的LTS版本和支持JDK17的Jenkins 2.440.1的LTS版本综合介绍Jenkins三种构建类型,默认按照高版本Jenkins2.440.1讲解,有不一样的地方会特别指出低版本Jenkins。

下面文章不定期更新中。。。

Linux安装JDK17(精品)
Linux安装MySQL(精品)
Linux安装Nginx(精品)
Linux安装Maven(精品)
运行一个jar包(精品)
java -jar提示jar中没有主清单属性(no main manifest attribute)(精品)

Jenkins安装启动(JDK8/11/17)(精品)
Jenkins配置(插件/角色/凭证)(精品)
Jenkins的jdk和maven配置(精品)
Jenkins三种构建类型(精品)

一、概念

Jenkins中自动构建项目说白了,就是让java项目自动更新代码,自动打包,自动kill之前的java项目,自动发版新打包的java项目。可以配置纯Linux操作,也可以配置Docker方式的。

Jenkins中自动构建项目的类型有很多,常用的有以下三种:

自由风格软件项目(FreeStyle Project)
Maven项目(Maven Project)
流水线项目(Pipeline Project)

默认只有第一个自由风格软件项目,我们主要用的也是这个,其他的需要Maven等插件支持。
在这里插入图片描述
点击New Items
在这里插入图片描述
默认就是第一个自由风格软件项目(FreeStyle Project)。笔者接下来主要讲解常用的三种。

二、前置处理(必做)

1、赋予777权限

在依赖脚本处理的时候,需要放权。

# 不可以偷懒直接给var文件夹赋权,会导致很多错误。有些文件夹不能有太高的权限。
chmod 777 -R /var/lib/jenkins
chmod 777 -R /var/cache/jenkins
chmod 777 -R /var/log/jenkins

2、让jenkins用户拥有root用户的kill权限

# gpasswd -a  jenkins  root  # jenkins用户加入到root组,这个命令可以先不管,如果一直报错,可尝试
sudo visudo  # 修改sudoers文件,在最后一行加入下面内容
jenkins ALL=(ALL) NOPASSWD: /bin/kill  #  让jenkins拥有root的kill权限
sudo -k   #  该命令来清除sudo缓存

注意:重启jenkins!!!

3、要运行jar包端口号需要大于1024

比如笔者的feBackEnd-1.jar,里面的端口号是81,实际操作,由于jenkins用户操作的,java -jar权限不够,会导致启动报错,所以读者jar包的端口号最好是改成大于1024的。另一种就是不用jenkins用户操作,将jenkins配置文件里面的jenkins用户和jenkins组都改成root。见下面文章的五、常见报错分析-kill没有权限,有相关操作教程。

三、自由风格软件项目(FreeStyle Project)(推荐)

输入我们的软件项目名称,这个可以随便自定义名称,但是多个微服务的时候,建议还是用微服务名称,这样很多个的时候,很好区分。

在这里插入图片描述
在这里插入图片描述

例如笔者后端项目叫feBackEnd,打包为feBackEnd-1.jar,在Jenkins这边就写入feBackEnd。
在这里插入图片描述

输入项目名称后点击FreeStyle Project,然后再点击ok。

注意:长时间不操作Jenkins,会超时的,会导致一些报错。这个时候重新登录一下Jenkins就好了。

在这里插入图片描述
笔者这边默认都设置为3个,强烈建议设置好。后面文章会单独提到这块为什么要设置这些。
在这里插入图片描述

Source Code Management这块,如果没有看到Git和Subversion,则是需要重新去装插件(就是Git和Subversion两个单词,不扩展不省略),然后重启。插件安装可以参考笔者之前的文章,Jenkins配置(插件/角色/凭证)
在这里插入图片描述
在这里插入图片描述
输入地址提示错误,是笔者Jenkins所在的Linux服务器没有安装Git导致的,SVN报错同理。
在这里插入图片描述
在这里插入图片描述

笔者服务器为CentOS,用下面指令安装git,如果是svn则把git单词换成subversion即可。用svn --version检查。

sudo yum install git  # 一路y就可以了
git --version  #  检查git

git ls-remote -h https://gitee.com/zangtie/feproject.git  # 显示远程仓库https://gitee.com/zangtie/feproject.git中的引用列表,通常我们说的Head,也就是最新提交的版本。如果显示了像我下面截图9f5b.....a91ac之类的字符串,那说明Jenkins所在服务器的git配置OK了。

在这里插入图片描述

如果是下图这种提示,那么配置的账户和密码肯定是不对的。查看zangtie的git账户密码。
在这里插入图片描述
下面这个指令,马上就可以验证密码。

git ls-remote -h https://gitee.com/zangtie/feproject.git  # 显示远程仓库https://gitee.com/zangtie/feproject.git中的引用列表,通常我们说的Head,也就是最新提交的版本。如果显示了像我下面截图9f5b.....a91ac之类的字符串,那说明Jenkins所在服务器的git配置OK了。

然后我们重新登录Jenkins看下配置,注意,还是不行的话,可以重启jenkins查看。
在这里插入图片描述
点击刚刚没有配置完成的feBackEnd
在这里插入图片描述

点击左侧的Configure,后面反复配置一个项目,都是从这里点进来。
在这里插入图片描述

这下红字提示没有了。

接下来是最重要的一步

在这里插入图片描述

Build Steps这步选择Execute shell,我们通过执行脚本来更新jar包,打包jar包,kill 旧的jar进程id,发版新的jar包。

先看一个纯净版shell

fileName=feBackEnd-1.jar
pathName=feBackEnd
logFile=fe.txt
cd ./$pathName
echo "开始编译和打包"
mvn clean package -Dmaven.test.skip=true
echo "编译和打包结束"
PID=$(ps -ef | grep $fileName | grep -v grep | awk '{ print $2 }')
if [ ${PID} ]; 
then
 echo 'Application is stoping...'
 echo kill $PID DONE
 sudo kill -9 $PID
else
 echo 'Application is already stopped...'
fi
mv /var/lib/jenkins/workspace/$pathName/$pathName/target/$fileName     /java/$fileName
cd /java
BUILD_ID=dontKillMe nohup java -Xms512m -Xmx512m -jar  $fileName > $logFile  2>&1 &
echo "启动项目"
if [[ ! -f $logFile ]]; then
  sleep 2
fi
sleep 20
tail -n 20 $logFile
aaa=`grep "Started" $logFile | awk '{print $10}'`
if [[ -n "${aaa}" ]];then
    echo "启动成功"
    exit 0
else
    echo "启动失败"
    exit 1
fi

下面解释一下这个sheel的大概意思(强烈建议认真看一下,脚本是重中之重,后面报错的排错也基本在脚本这边)

fileName=feBackEnd-1.jar  #  定义一个变量fileName
pathName=feBackEnd # 定义一个变量pathName
logFile=fe.txt  # 定义一个变量logFile
cd ./$pathName # Jenkins执行脚本的默认工作目录会在控制台打印输出,笔者这儿测试的时候是/var/lib/jenkins/workspace/feBackEnd,注意这里面有大坑。后面文章会具体说明。
echo "开始编译和打包"  # 这个是在jenkins控制台打印输出的,给我们自己看的,看进行到哪一步了
mvn clean package -Dmaven.test.skip=true # 我们打包发版,基本是先clean旧的calss文件,然后重新打包jar包或者war包。如果是聚合模块,mvn clean package -Dmaven.test.skip=true -pl economic-auth-server/auth-server -am;其中economic-auth-serve是总模块,auth-server 是子模块,这样就可以只clean package 子模块。笔者后面文章Maven项目的案例就是聚合模块的。
echo "编译和打包结束" # 控制台输出
PID=$(ps -ef | grep $fileName | grep -v grep | awk '{ print $2 }') # 找到feBackEnd.jar对应的进程id
if [ ${PID} ]; # 如果存在进程id。
then
 echo 'Application is stoping...'# 控制台输出,应用程序正在被停止
 echo kill $PID DONE   # 控制台输出kill 进程id  字样
 sudo kill -9 $PID  # kill杀掉进程,结束之前运行的jar或者war包进程
else # 不存在进程id,说明之前jar包已经被结束了
 echo 'Application is already stopped...'# 控制台输出,应用程序已经停止
fi
mv /var/lib/jenkins/workspace/$pathName/$pathName/target/$fileName     /java/$fileName #这个是将新打的包移动到自己Linux服务器的一个工作目录下。前面路径是jenkins帮你打包的工作目录,后面目录是我自己在Linux新建的一个目录,就是想看到jenkins工作没有。熟悉打包的读者,可以忽略这步,直接就在jenkins的工作目录搞。
# 特别注意1:很多读者没有成功,就是这边的路径配置错误了,因为Jenkins版本不同,所以jenkins帮你打包的工作目录也不同。一定要到自己服务器的工作目录看看,真实路径是怎么样的。比如笔者这个高版本Jenkins的工作目录是这样的:/var/lib/jenkins/workspace/feBackEnd/feBackEnd  ,所以上面指令就对应的配置即可。
# 特别注意2:之前的前置处理一定要做好。否则会有很多访问权限问题。
cd /java # 进入我在Linux新建的那个目录里面,如果是Jenkins工作目录直接搞,这里就是 cd  /var/lib/jenkins/workspace/feBackEnd/feBackEnd
BUILD_ID=dontKillMe nohup java -Xms512m -Xmx512m -jar  $fileName > $logFile  2>&1 & #  发版指令,堆内存大小读者根据自己需要调整大小
echo "启动项目" # 控制台输出
if [[ ! -f $logFile ]]; then # 这步其实可以忽略。就是没有日志文件的时候,给了一个创建日志文件的时间
  sleep 2 # 2秒
fi
sleep 20 # 这个时间可以根据项目启动的时间灵活调整,我jar包启动很快,所以20秒足够了,如果Linux的respository仓库还没有任何jar包,那么这个时间根据读者jar包的体量,第一次还是弄特别大些,等Linux的respository仓库该有的jar包都有了以后,再把时间改小。笔者建议还是拷贝本地win电脑的respository仓库到Linux上最好。
tail -n 20 $logFile # 这个是为了查看启动的时候打印日志,查看是否启动成功,启动报错的信息显示出来
aaa=`grep "Started" $logFile | awk '{print $10}'` # 指令的解释:|前面为 在整个日志文件里面去找 Started这个单词,如果找到了,就print这个单词出来,print $10就是打印10个字符长度。aaa=就是给赋值了。实际就是 aaa=Started了。如果没有找到,aaa=“”了。这个是抓捕了jar包启动成功的一个标志,比如springboot启动成功后,里面日志里面包含了  Started这个单词,读者也可以根据自己的转有单词抓捕。
if [[ -n "${aaa}" ]];then # aaa不为空串的时候
    echo "启动成功" # 输出启动成功
    exit 0 # 退出并返回0
else
    echo "启动失败" # 输出失败
    exit 1 # 退出并返回1
fi

配置脚本后点击保存,整个配置完成。

在这里插入图片描述

接下来就是激动人心的时刻了,点击Build Now
在这里插入图片描述
然后点击左下角的进度条
在这里插入图片描述
在这边的Console Output可以看到打印出的一些东西。像我们idea本地开发一样,一览无余。顺利的话,启动完成。自动化发版就构建完成了。
在这里插入图片描述

三、Maven项目(Maven Project)

这边以聚合项目,并且是笔者汉化包的对应jdk8的低版本Jenkins讲解。如果自由风格软件项目很熟悉了,这边操作起来就很简单了。

首先 安装Maven Integration插件,安装失败就看下插件那边教程。
在这里插入图片描述
安装插件重启Jenkins以后,可以看到多了maven项目的选择。我们选择maven项目。
在这里插入图片描述

在这里插入图片描述

这个是笔者的一个聚合项目,根pom.xml下面有很多子模块
在这里插入图片描述

clean install -Dmaven.test.skip=true -pl economic-auth-server/auth-server -am

这条指令就是解决聚合模块最关键的指令。其他类似自由风格软件项目,增加脚本就可以了。

纯净版脚本,读者可以根据自己真实情况,修改下面的变量,以及注意工作目录这些基本信息的脚本修改。

fileName=auth-server-0.0.1-SNAPSHOT.jar
pathName=economic-auth-server/economic-auth-server/auth-server
logFile=auth-server.txt
PID=$(ps -ef | grep $fileName | grep -v grep | awk '{ print $2 }')
if [ ${PID} ]; 
then
 echo 'Application is stoping...'
 echo kill $PID DONE
 kill -9 $PID
else
 echo 'Application is already stopped...'
fi
mv /var/lib/jenkins/workspace/$pathName/target/$fileName     /java/$fileName
cd /java
BUILD_ID=dontKillMe nohup java -Xms512m -Xmx512m -jar  $fileName > $logFile  2>&1 &
echo "启动项目"
if [[ ! -f $logFile ]]; then
  sleep 2
fi
sleep 20
tail -n 20 $logFile
aaa=`grep "Started" $logFile | awk '{print $10}'`
if [[ -n "${aaa}" ]];then
    echo "启动成功"
    exit 0
else
    echo "启动失败"
    exit 1
fi

四、流水线项目(Pipeline Project)

流水线项目,笔者这边参考了黑马程序员的一些方案

1、概念

在这里插入图片描述
比其他的类型多了一个流水线,点击流水线语法
在这里插入图片描述

2、拉取代码

在这里插入图片描述
拉取代码
在这里插入图片描述
点击这个按钮,就生成了代码,把这个代码拷贝到前面截图中的流水线中。

在这里插入图片描述
拷贝
在这里插入图片描述
这个才是正确截图,其他截图少个 agent any。

3、编译打包

在这里插入图片描述
编译打包,用的脚本命令
在这里插入图片描述
将生成的代码拷贝过来

4、项目部署

在这里插入图片描述
项目部署
在这里插入图片描述
将生成的代码拷贝过去
在这里插入图片描述
拷贝

5、Jenkinsfile文件

在这里插入图片描述
项目跟目录下穿件Jenkinsfile文件,在流水线定义这边选择截图的,可以直接读取到这个文件的配置。这个文件配置就是把上面的3步代码放进去,这样做是为了让git等工具管理起Jenkins代码的迭代。

五、常见报错分析

1、路径错误

错误如下:
在这里插入图片描述

下面截图是默认工作目录
在这里插入图片描述
下面截图是可以看到pom.xml也就是src文件夹所在目录
在这里插入图片描述

可以看到笔者这边默认工作路径是/var/lib/jenkins/workspace/feBackEnd,而实际上,还得加一层目录才能看到pom.xml,因为我们打包都是依赖Maven,而Maven则主要靠项目中的pom.xml去工作,所以真正的干活儿目录应该 /var/lib/jenkins/workspace/feBackEnd/feBackEnd
在这里插入图片描述
在这里插入图片描述
如果读者在/var/lib/jenkins/workspace/feBackEnd下面就可以看到pom.xml了,那么就不能像笔者那样再进入一层,反正就是以pom.xml所在的目录去clean package才对。

2、kill没有权限

在这里插入图片描述
脚本里面执行kill操作的时候,提示没有权限。

ps -ef |grep java 

在这里插入图片描述
可以发现jenkins启动的时候并不是root用户,而是jenkins用户。笔者尝试脚本里面的kill -9 前面加个sudo ,变成 sudo kill -9 ,这种也不行的,会有新的错误,不过sudo一定要加上。
在这里插入图片描述
这种时候有三个思路。

思路一:脚本里面增加su 去切换到root用户,但是需要输入root密码,这样脚本里面有暴露root用户密码的风险,不太推荐。

思路二(推荐):修改jenkins权限,让jenkins用户执行kill命令时候有root权限

sudo visudo  # 修改sudoers文件,在最后一行加入下面内容
jenkins ALL=(ALL) NOPASSWD: /bin/kill  #  让jenkins拥有root的kill权限
# jenkins ALL=(ALL:ALL) ALL  # 让jenkins拥有root的所有权限(推荐,可以一劳永逸解决很多问题)

在这里插入图片描述

sudo -k   #  该命令来清除sudo缓存

然后建议重启jenkins,重新Build Now。注意sheel脚本是 sudo kill -9 $PID,是包含sudo单词的。不然也会报错。

思路三:直接将Jenkins的配置文件中的用户和组对应的值jenkins修改为root。这种是最简单的办法,直接用root启动Jenkins,所有权限问题都不存在了。但是企业级开发中,很多时候是禁用root账户的。所以笔者才推荐思路二。其实思路三可以一劳永逸的解决很多潜在问题。

# 直接换成root
vim /etc/sysconfig/jenkins # 如果有就修改,比如低版本Jenkins会有

vim /etc/init.d/jenkins  # 如果有就修改

vim /usr/lib/systemd/system/jenkins.service   # 将User和Group都修改为root

systemctl daemon-reload 

chown -R root:root  /var/lib/jenkins  # 原来是jenkins用户启动的,这些文件权限属于jenkins组jenkins用户,现在修改为root组root用户。
chown -R root:root /var/cache/jenkins # 同上
chown -R root:root /var/log/jenkins # 同上

在这里插入图片描述

在这里插入图片描述
注意:重启jenkins!!!重新Build Now,可以发现问题解决了。

3、项目启动报错

在编译报错、kill报错都解决以后,发现好好的项目,启动居然报错了。这个时候,最简单的方式就是,先不用Jenkins,直接java -jar feBackEnd.jar,先看下直接启动,能否启动成功。有些时候,一些中间件没有启动起来,会导致jar包启动失败,比如redis、MySQL等等。笔者这边遇到个很坑的东西,就是笔者的Linux服务器运行了太多东西,导致笔者内存不够用了,也会导致jar包启动不了,这种时候就得kill些其他程序了。

在直接java -jar feBackEnd.jar启动不报错以后,内存够用以后,我们再来细看Jenkins报错的问题。

首先还是权限问题,比如如果是阿里云服务器,开启了,阿里云很多的权限规则或者防病毒监控的一些功能,会导致jenkins用户的权限不够,出一些莫名其妙的问题。
在这里插入图片描述

sudo chmod 777 -R /java

在这里插入图片描述

会发现,修改/java的指令不被容许了。我们来看下ChatGPT的回答,接下来跟着ChatGPT给的思路来解决。笔者这边将81端口改成了8081,一下子就好了,读者可以根据实际情况,最好一个一个都过一下。最后第5条,就是笔者指出的阿里云的防病毒之类的一些东西,可以关闭试一下。如果是华为云、青云、腾讯云等,也是类似的操作。如果是企业级的则慎重关闭。
在这里插入图片描述

六、jenkins清除构建历史防止磁盘爆满(非常重要)

笔者的自由风格软件项目高版本案例已经处理了。但是这边还是单独提一下,这边案例是低版本Jenkins案例。
在这里插入图片描述
/var/log/jenkins/jenkins.log 这个jenkins的日志,一般不会太大,删除需要先关闭jenkins的进程,然后再物理删除。这个不是本篇重点。
/var/lib/jenkins/jobs 在这个jobs下面会发现我们大量的构建项目,占用大量空间,在我们给项目配置的地方,勾选上 丢弃旧的构建,把高级也设置上,本次设置3。
在这里插入图片描述
设置丢弃旧的构建前,这边文件非常多,构建一次一个文件夹,非常占用硬盘
在这里插入图片描述
设置以后,发版一次,会自动删除多余的构建,very nice

七、jenkins的另一种日志磁盘爆满(非常重要)

/var/lib/jenkins/logs 文件夹下面的一种日志,主要是csp里面的日志,我直接手动删除了这个文件夹,没什么问题。硬盘直接释放出70%的硬盘空间。

后面是网上找到的一种功能,是否有效待验证。在/etc/logrotate.d/jenkins或/etc/logrotate.d/jenkins-oc中找到
设置为每天轮换并仅保留一周(轮换为7),或者根据maxsize或组合设置特定的限制.
在这里插入图片描述

/var/log/jenkins/jenkins.log /var/log/jenkins/access_log {
    weekly
    copytruncate
    missingok
    rotate 52
    compress
    delaycompress
    notifempty
}

八、jenkins重启项目全部丢失

笔者之前搞前端项目放进jenkins 的时候,发生了一次事故,这里记录一下
在这里插入图片描述
原因:更新前端node.js插件后重启导致所有项目丢失,但是前端项目还在。网上查找发现
vim /etc/profile
export JENKINS_HOME=/var/lib/jenkins
这些都是配置好的,根本不是这个问题。由于提前在百度网盘备份了插件,将更新后的两个插件还原,重启以后解决了。后面就把全部jenkins插件都备份了,太吓人了。

总结:大家最好是把jenkins插件都备份,尤其是低版本的对应JDK8的Jenkins,有时候操作设置的时候,真的很容易出问题。到此Jenkins的讲解完成了,祝大家用Jenkins用的愉快。

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

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

相关文章

【YashanDB知识库】PHP使用OCI接口使用数据库绑定参数功能异常

【问题分类】驱动使用 【关键字】OCI、驱动使用、PHP 【问题描述】 PHP使用OCI8连接yashan数据库,使用绑定参数获取数据时,出现报错 如果使用PDO_OCI接口连接数据库,未弹出异常,但是无法正确获取数据 【问题原因分析】 开启O…

springcloud第4季 分布式事务seata作用服务搭建

一 seata作用 1.1 作用 二 seata服务端搭建 2.1 seata搭建 2.2.1 seata 服务端下载安装 下载地址: Seata-Server下载 | Apache Seata 截图如下: 2.2.2 使用mysql初始化seata所需表 1.下载脚本地址:incubator-seata/script/server/db/…

2024最新D卷 华为OD统一考试题库清单(按算法分类),如果你时间紧迫,就按这个刷

目录 专栏导读华为OD机试算法题太多了,知识点繁杂,如何刷题更有效率呢? 一、逻辑分析二、数据结构1、线性表① 数组② 双指针 2、map与list3、队列4、链表5、栈6、滑动窗口7、二叉树8、并查集9、矩阵 三、算法1、基础算法① 贪心思维② 二分查…

Nas实现软路由OpenWrt安装

文章目录 基本配置步骤 基本配置 NAS:TS-264C 宇宙魔方 步骤 1.下载软路由OpenWrt 下载地址:https://openwrt.org/ 2.下载好以后,需要下载虚拟盘转换工具(StarWind V2V Convert) 下载地址:https://…

大模型与知识智能:心理疾病治疗的新希望

前言 随着社会的发展,心理疾病已成为一个日益突出的问题。据《柳叶刀》杂志的系统性综述显示,疫情之后,全世界抑郁症与焦虑症的患病率上升超过25%,其中青少年心理健康的影响最大。此外,2021年国内的精神障碍报告显示&…

Docker 镜像库国内加速的几种方法

在国内,拉取 Docker 镜像速度慢 / 时不时断线 / 无账号导致限流等,比较痛苦。 这里提供几个当前可用的镜像仓库,更新到/etc/docker/daemon.json即可。 更新完记得运行: sudo systemctl daemon-reload sudo systemctl restart …

以keepalived为例说明程序不能正常被gdb调试的原因

现象 通过gdb att $keepalived_pid发起对当前运行keepalived的调试; 在放行keepalived继续执行后,想通过CtrlC按键中断执行,观察下被调试程序的当前内部状态, 但是,在终端输入CtrlC后,导致keepalived被调…

一般简单的功能使用GIS 服务器工具还需要进行扩展开发吗?

有网友困惑怎么使用了我们的 GIS 服务器工具,一些简单的功能需不需要对服务器进行扩展开发?下面我们首先看一下标准GIS WEB服务器例如GEOSERVER,QGISSERVER、GIS数据快捷共享发布工具(建立自己的地图网站)及其它一些商…

Python虚拟环境的配置

前言: 本人一度被Python的虚拟环境的配置所困扰,前段时间抽空学习了一下,现在总结一下方法,供大家参考。 先使用winr打开命令行窗口。 展示所有虚拟环境 conda env list 创建虚拟环境 例如我们创建一个叫做py_sk的虚拟环境 …

【数据结构】遍历二叉树(递归思想)-->赋源码

欢迎来到我的Blog,点击关注哦💕 前言 二叉树遍历是指按照一定的顺序访问二叉树中的每个节点,使得每个节点恰好被访问一次。遍历是二叉树上最重要的运算之一,是二叉树上进行其他运算的基础。 一、二叉树遍历概念 二叉树遍历分类 …

Windows 11 中安装 Docker Desktop 并安装镜像

本该主要介绍在 Windows 11 中安装 Docker Desktop 时的一些准备工作,以及该如何下载和安装,然后分别使用管理界面和 Docker 命令安装两个镜像。 一、准备工作 在 Windows 11 中安装 Docker Desktop 前,需要做一些准备。打开 【Windows 功能…

大模型是什么?能干嘛?怎么学?

引言 随着人工智能技术的飞速发展,大模型研究已成为该领域的一大热点。这些研究覆盖了众多方向,每个方向都面临着独特的研究焦点和挑战。本文将逐一探讨一些备受关注的研究方向,包括检索增强生成RAG、大模型Agent、Mamba、MoE、LoRA等&#…

字符数组基础知识及题目

死识。。。 字符该如何存储呢?这一点我们在以前就接触过了。用char来存储。 如何输入一个单词呢? char a[10002]; scanf("%s",a); 就不用地址符了。 如何输入句子呢? char a[100002]; gets(a); gets是读入句子的&#xff0c…

如何阅读?从阅读中学阅读—《海绵阅读法》

大家好,我是老三,最近读了《海绵阅读法:如何吸收一本书的精华》,第一次阅读教如何阅读的书,整理一番读书笔记,分享给大家。 读书动机 我前一阵子写了篇文章,2024Q1,盘点我看过的54本…

防止Selenium被检测 Google Chrome 125

背景 最近在使用selenium自动播放学习课程,相信大家也有一些类似的使用场景。 能自动化的事情,绝不自己干。 为防止被检测是机器人做题,刷视频,需要做一些小调整。 先来看作为服务方维护者,是如何检测是Selenium打…

【算法-力扣】73.矩阵置零,一文彻底搞懂!

目录 一、题目描述 二、解题思路 三、参考答案 一、题目描述 矩阵置零 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 进阶: 一个直观的解决方案是使用 O(mn) 的额外空间&#x…

甄嬛传熹贵妃上户口:如果让他陪你过冬天,那朕能不能睡中间?贝叶斯模型推导爸爸去哪儿

关注微信公众号 数据分析螺丝钉 免费领取价值万元的python/java/商业分析/数据结构与算法学习资料 背景 《甄嬛传》是大家耳熟能详的宫廷剧,其中复杂的宫斗情节和深刻的人物刻画让人津津乐道。甄嬛因为与皇帝(四郎)闹翻了,去甘露寺待了一段时间&#x…

0613,基本数据类型,表达式

题目1,选做: 假设 int n 0xCAFE; 请用表达式完成下面操作 (拓展题:不要求每个同学都写) (a) 测试最后 4 位中是不是最少有 3 位为 1. (b) 逆转字节序(i.e.,使 n 0xFECA) (c) 旋转 4 位 (i.e., 使 n 0xECAF) 答案代码/补: …

Elasticsearch 认证模拟题 - 18

一、题目 为一个索引,按要求设置以下 dynamic Mapping 一切 text 类型的字段,类型全部映射成 keyword一切以 int_ 开头命名的字段,类型都设置成 integer 1.1 考点 字段的动态映射 1.2 答案 # 创建索引和索引模板 PUT my_index {"m…

关于Linux ping 不通外网

网关为第三段为137那么子网ip第三段必须为137且IPaddr必须为137 将主机虚拟适配器连接到此网络必须勾上,不然vmnet适配器在windows将找不到 ping www.baidu.com不行的话试着勾上桥接模式应该是不行在勾上取消勾上桥接模式最后勾上nat模式