掌握Jenkins自动化部署:从代码提交到自动上线的全流程揭秘

news2024/11/24 10:55:01

Jenkins自动化部署是现代软件开发中不可或缺的一部分,它不仅简化了代码的发布过程,还为整个团队带来了无与伦比的效率和协作力。想象一下,开发者们可以专注于编写高质量的代码,而不是为繁琐的手动部署所烦恼;测试人员能在每次提交代码后立即看到测试结果,确保软件质量;运营团队不再需要熬夜加班来手动发布新版本,而是可以安心地看到系统自动完成一切。

Jenkins自动化部署的意义在于它赋予了开发团队一种近乎魔法般的力量,将复杂、易出错的手动操作变为简单、高效的流水线流程。通过CI/CD(持续集成/持续部署),每一次代码的提交都能触发自动化的构建、测试和部署,确保每一个版本的上线都是经过严格测试和验证的。这种无缝的工作流不仅提高了开发速度,还显著降低了风险,让软件的发布更为可靠。

可以说,Jenkins自动化部署不仅是技术上的进步,更是一种开发理念的革新。它让软件开发变得更高效、更可靠、更具创新力。只要你体验过Jenkins带来的便利,你就再也不会回到手动部署的时代,因为那种“代码一提交,系统自己搞定”的感觉,实在是太让人欲罢不能了!

这就是Jenkins的力量,它不仅改变了开发的方式,也改变了我们对软件开发的认知。如果你还没尝试过Jenkins,现在就是最好的时机,去体验一下现代开发的魅力吧!

1.Jenkins工作流程

当你提交代码后,Jenkins能够自动触发部署的背后,是一整套自动化构建和交付的流水线(Pipeline)在起作用。这里我将详细介绍Jenkins的工作流程和内部原理,包括它如何监控代码库的变化、触发构建、执行测试、打包以及最终部署到服务器的过程。

1. 源代码管理(SCM)轮询或Webhooks触发

  • SCM轮询:Jenkins会定期检查(轮询)配置的源代码管理系统(如Git、SVN等)的仓库,看是否有新的提交或代码更改。如果检测到变化,就会触发构建任务。这种方法需要Jenkins定时访问代码库,可能会有一定的延迟。
  • Webhooks:相比之下,Webhooks是一种更为实时的触发方式。开发者提交代码后,源代码管理系统会立即向Jenkins发送一个HTTP请求(Webhook),通知Jenkins有新提交。这使得Jenkins能够更快响应代码变化,立即启动构建过程。

2. 触发构建任务

一旦Jenkins接收到代码变更的通知,它会根据配置的Pipeline或Job来决定如何处理这次构建。Jenkins中的Pipeline是基于Groovy脚本的,它定义了从代码提交到最终部署的整个流程。

3. 流水线(Pipeline)阶段

Pipeline分为多个阶段,每个阶段都可以独立执行一组任务。这些阶段通常包括:

  • Checkout代码:Jenkins从源代码管理系统中将最新的代码拉取到构建节点上。这一步通常使用插件(如Git插件)来与代码库交互。

  • 构建(Build):Jenkins根据配置的构建工具(如Maven、Gradle)对代码进行编译、打包。在这一步,代码会被转化为可执行的应用程序包(如JAR、WAR文件)或Docker镜像。

  • 测试(Test):Jenkins会运行自动化测试脚本,包括单元测试、集成测试、功能测试等。这一步至关重要,因为它确保代码在引入新变更后仍然是稳定和可靠的。

  • 代码质量分析(Optional):Jenkins可以执行代码质量检查,使用工具如SonarQube来分析代码的复杂度、安全性和可维护性,并生成报告。

  • 部署(Deploy):当所有前面的步骤都成功完成后,Jenkins会执行部署阶段。根据配置,它可以将构建产物部署到不同的环境,如开发环境、测试环境或生产环境。这一步可以通过SSH、FTP、容器化部署(Docker、Kubernetes)或云服务API来实现。

4. 工作节点(Agent)与主节点(Master)协作

Jenkins采用主从架构,其中主节点(Master) 负责调度任务、管理工作队列、监控节点状态等。工作节点(Agent) 实际执行构建任务,如代码编译、测试和部署等。

当Pipeline被触发时,Jenkins主节点会分配一个或多个工作节点来执行具体任务。工作节点从主节点获取任务后,开始执行相应的步骤,完成后将结果返回给主节点。

5. Jenkinsfile(流水线脚本)

Jenkinsfile是定义Pipeline的脚本文件,通常存储在代码库中。这使得整个构建、测试和部署的流程代码化,并与项目代码一起版本控制。在Jenkinsfile中,你可以定义Pipeline的各个阶段、条件逻辑、并行任务等。

6. 通知与反馈

Jenkins在构建和部署过程中会生成实时的日志,并在任务完成后发送通知(如通过电子邮件、Slack)。如果构建失败,Jenkins会立即通知相关人员,以便他们能够快速响应和修复问题。

7. 持续集成与持续交付/部署(CI/CD)

整个流程的核心思想是CI/CD,通过持续集成和交付,让开发团队能够频繁地提交代码,并自动化测试、构建和部署,减少人为错误,提升软件发布的效率和质量。

可以通过一张图来直观展示Jenkins在整个流程中扮演的角色,具体如下所示:该图主要对比了人工部署与Jenkins自动化部署的过程
在这里插入图片描述

Jenkins的工作流程是通过SCM轮询或Webhooks来实时监控代码变化,使用Pipeline将构建、测试、打包、部署等步骤串联起来,自动化地将应用程序从开发环境推送到生产环境。其主从架构、可配置的Pipeline、广泛的插件支持,使得Jenkins成为了自动化部署的强大工具,让整个软件开发生命周期变得更加高效和可靠。

下面,让我们一起踏入使用Jenkins自动部署Spring Boot项目的奇妙之旅!

2.搭建Jenkins

1.创建一个数据目录

# 创建 jenkins 目录
mkdir /data/jenkins_home/
# 修改目录的所有者,以便于 Jenkins 容器能够操作该目录
chown -R 1000:1000 /data/jenkins_home/

2.拉取jenkins镜像

docker pull jenkins/jenkins:lts

3.启动jenkins容器

为了防止与 Spring Boot 默认使用的 8080 端口发生冲突,我选择将 Jenkins 服务器的访问端口配置为 8088。此外,在确保 Jenkins 可以从外部网络访问的同时,也需要在云服务器的安全组中配置防火墙规则来开放 8088 端口,这样外部客户端才能通过此端口访问到 Jenkins 服务器。

docker run -d --name jenkins -p 8088:8080 -p 50000:50000 -v /data/jenkins_home:/var/jenkins_home jenkins/jenkins:lts

这样的配置不仅能够确保 Jenkins 服务与其他可能运行在同一服务器上的服务(如 Spring Boot 应用)之间不会产生端口冲突,还能通过精细控制防火墙规则来提高系统的安全性。
在云服务器的安全组设置中,你需要添加一条入站规则,允许来自特定 IP 地址或 IP 范围的流量通过 8088 端口进入服务器。这样既能保证 Jenkins 的可用性,也能限制不必要的网络访问,从而提升整体安全性。

4.访问Jenkins

一旦Jenkins容器启动,你可以通过访问http://localhost:8088来访问Jenkins界面。(注意:这里的localhost对应的你的云服务器IP地址!)

首次访问时,系统会要求你输入初始管理员密码。
在这里插入图片描述

5.获取管理员密码

可以直接去宿主机的 /data/jenkins_home/secrets/initialAdminPassword 位置查看初始化密码,具体如下所示:(这里的/data/jenkins_home/是前面你自己设置的Jenkins工作目录)。在这里插入图片描述
获取管理员密码之后就可以直接使用admin账户进行登录,登录之后的界面如下所示:
在这里插入图片描述

3.安装Maven

在Jenkins自动化部署中,Maven被安装在服务器上是为了执行项目的构建任务,包括代码编译、依赖管理、测试执行和打包操作。通过Maven,Jenkins能够自动化地将源代码转换为可部署的应用程序包(如JAR或WAR文件),确保项目按需构建并满足所有依赖。

  1. 下载Maven
    访问Maven官方下载页面,选择需要的版本,复制下载链接。使用wget命令下载Maven。

    例如下载Maven 3.8.8版本:

    wget https://dlcdn.apache.org/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz
    
  2. 解压文件
    将下载的文件解压到你想要安装的位置,例如/opt目录:

    sudo tar -zxvf apache-maven-3.8.8-bin.tar.gz -C /opt
    
  3. 配置环境变量
    为了方便使用Maven,需要配置环境变量。编辑/etc/profile文件:

    sudo vi /etc/profile
    

    在文件末尾添加以下内容:

    export M2_HOME=/opt/apache-maven-3.8.8
    export PATH=$M2_HOME/bin:$PATH
    
  4. 使环境变量生效
    保存文件并退出编辑器,然后使环境变量生效:

    source /etc/profile
    
  5. 验证安装
    现在可以通过以下命令验证Maven是否安装成功:

    mvn -version
    

    如果安装成功,你将看到Maven的版本信息。
    在这里插入图片描述

4.安装插件

在Jenkins启动成功后,安装以下三个插件能够增强其功能,满足特定的项目需求:

1. Gitee

  • 功能:Gitee插件允许Jenkins与Gitee代码仓库集成,支持从Gitee仓库中拉取代码、触发构建任务。这对于使用Gitee进行源代码管理的团队非常有用,能简化CI/CD流程。
  • 安装:在“插件管理”界面,搜索“Gitee”插件并安装。安装后,可以在Jenkins的项目配置中添加Gitee仓库的访问信息,配置Webhook以便代码提交时自动触发构建。

2. Maven Integration

  • 功能:Maven Integration插件允许Jenkins与Maven无缝集成,使得Jenkins可以直接调用Maven进行项目的构建、测试和打包。这对于Java项目尤其重要,因为Maven能够自动管理项目依赖、编译代码,并生成可部署的包(如JAR、WAR)。
  • 安装:在Jenkins管理界面中,导航到“插件管理” -> “可选插件”,搜索“Maven Integration”并点击“安装”。

3. Publish Over SSH

  • 功能:Publish Over SSH插件允许Jenkins通过SSH将构建生成的文件(如JAR、WAR包)安全地传输到远程服务器上。这对于部署过程至关重要,尤其是当需要将构建产物自动部署到生产或测试服务器时。
  • 安装:同样在“插件管理”界面,搜索“Publish Over SSH”并安装。安装后,你可以在“系统管理”中配置SSH服务器的连接信息。

通过安装这些插件,Jenkins能够更好地支持项目构建、打包、部署和代码管理,大大提高自动化部署的效率和灵活性。

具体的安装步骤如下所示:点击左边的系统管理,然后选择右边的插件管理,进行配置。
在这里插入图片描述
之后在可选插件中,搜索 Maven Integration 和 Publish Over SSH 以及 Gitee 三个插件安装即可:
在这里插入图片描述

全部插件安装完成之后,最好登录服务器,重启Jenkins容器以更新插件!具体命令如下:

docker restart jenkins

5.全局工具配置

在使用Jenkins进行自动化部署之前,进行一些全局工具的配置是必要的,这样可以确保Jenkins能够正确调用这些工具来完成构建、测试和部署任务。
在这里插入图片描述

以下是Jenkins通常需要配置的全局工具:

1. JDK(Java Development Kit)

  • 为什么需要:Jenkins本身是基于Java的应用,并且许多构建工具(如Maven、Gradle)也依赖JDK。因此,配置JDK是必不可少的。
  • 配置方法:在Jenkins的“系统管理” -> “全局工具配置”中,找到JDK配置部分,点击“添加JDK”,指定JDK的安装路径,或者选择自动安装。

2. Maven

  • 为什么需要:Maven是Java项目构建的标准工具,用于依赖管理、代码编译、测试和打包。通过配置Maven,Jenkins可以调用Maven进行项目构建。
  • 配置方法:在“全局工具配置”中找到Maven配置部分,点击“添加Maven”,指定Maven的安装路径,或者选择自动安装。
    在这里插入图片描述

3. Git

  • 为什么需要:大多数项目都使用Git进行源代码管理。通过配置Git,Jenkins可以从Git仓库中拉取代码并进行构建。
  • 配置方法:在“全局工具配置”中找到Git配置部分,添加Git安装路径,或者选择自动安装。确保Jenkins可以访问正确版本的Git(由于 Jenkins 容器中已经存在 git 了,所以这里不需要额外安装 git,默认即可)。
    在这里插入图片描述

4. Gradle(可选)

  • 为什么需要:对于使用Gradle构建的项目,配置Gradle工具是必要的。Gradle是另一个流行的构建工具,尤其在Android开发中被广泛使用。
  • 配置方法:在“全局工具配置”中,找到Gradle配置部分,点击“添加Gradle”,指定Gradle的安装路径或选择自动安装。

全局工具配置是确保Jenkins能够顺利执行构建、测试和部署任务的基础。通过配置JDK、Maven、Git等工具,Jenkins可以与这些构建工具无缝集成,自动化地完成从代码拉取到部署的整个流程。这些配置不仅提高了Jenkins的灵活性和适用性,还简化了每个项目的具体配置工作。

6.系统配置

在Jenkins中进行系统配置时,Publish Over SSHGitee 的配置是实现代码部署和与代码仓库集成的关键步骤。以下是详细的配置步骤介绍:

1. Publish Over SSH 配置

Publish Over SSH 插件允许Jenkins通过SSH将构建生成的文件(如JAR、WAR包)安全地传输到远程服务器上。以下是配置步骤:

步骤 1: 安装 Publish Over SSH 插件
  • 如果前面已经安装请忽略步骤1
  • 登录Jenkins的管理界面。
  • 在Jenkins首页,点击左侧菜单中的“系统管理”或“Manage Jenkins”。
  • 在管理页面中,选择“插件管理”或“Manage Plugins”。
  • 在“可选插件”或“Available Plugins”选项卡中,搜索Publish Over SSH
  • 勾选插件并点击“安装”,等待插件安装完成。
步骤 2: 配置 SSH 服务器
  • 插件安装完成后,返回“系统管理”页面,选择“系统配置”或“Configure System”。

  • 向下滚动页面,找到 Publish Over SSH 部分。

  • 点击“添加”按钮,配置一个新的SSH服务器:

    • Name: 为服务器配置一个易记的名称。
    • Hostname: 输入目标服务器的IP地址或主机名。
    • Username: 输入用于登录到目标服务器的用户名。
    • Remote Directory: 指定在远程服务器上的默认目录,Jenkins将把构建产物传输到此目录。
    • Use password authentication, or use a different key: 选择是使用密码认证,还是提供私钥文件进行认证。
    • 如果使用密钥认证,配置私钥文件路径或直接粘贴私钥内容。
  • 点击“测试配置”或“Test Configuration”按钮,验证Jenkins是否能够成功连接到目标服务器。
    在这里插入图片描述

步骤 3: 保存配置
  • 配置完成后,点击页面底部的“保存”或“应用”按钮,以确保你的设置被保存。

2. Gitee 配置

通过配置Gitee,Jenkins能够与Gitee代码仓库集成,实现代码的自动拉取和构建。以下是配置步骤:

步骤 1: 安装 Gitee 插件
  • 同样在Jenkins的插件管理中,搜索Gitee并安装该插件。
步骤 2: 获取 Gitee API Token
  • 登录到Gitee账户,点击链接。
  • 在“私人令牌”部分,点击“生成新的令牌”。
  • 根据需要选择令牌的权限,例如“repo”(代码仓库相关操作)和“user_info”(用户信息查看)。
  • 生成令牌后,复制并保存。
    在这里插入图片描述
步骤 3: 添加 Gitee配置
  • 在“系统配置”页面,找到Gitee 配置。
  • 配置你的Gitee仓库信息:
    • 链接名: 输入你的Gitee仓库的URL(HTTPS)。
    • Gitee域名URL: 输入Gitee域名完整URL地址。
    • 证书令牌: 选择Gitee API令牌。
      在这里插入图片描述
步骤 4: 添加凭据
  • 在Gitee配置页面 -> 点击添加Jenkins。
  • 在弹出的对话框中选择“Gitee API令牌”,在“Gitee APIV5私人令牌”字段中粘贴你刚刚生成的API Token。
  • 为该凭据提供一个名称,并点击“添加”保存。
    在这里插入图片描述
    通过上述步骤,就已经在Jenkins中完成了 Publish Over SSHGitee 的配置。这些配置使得Jenkins能够安全地将构建产物部署到远程服务器,同时自动拉取和构建Gitee上的代码,为CI/CD流程提供了基础支持。

7.构建项目

在Jenkins中新建一个Maven项目的步骤如下:

1. 登录Jenkins控制台

首先,访问Jenkins的Web界面,使用你的管理员账户登录。

2. 新建项目

  • 在Jenkins首页,点击左侧菜单中的“新建任务”或“New Item”。
  • 在弹出的窗口中,为项目输入一个名称,然后选择“构建一个Maven项目”或“Maven Project”。
  • 点击“确定”进入项目配置页面。

3. 配置源码管理(Source Code Management, SCM)

  • 在项目配置页面,找到“源码管理”部分。
  • 选择你使用的版本控制系统(如Git),并输入项目的代码仓库URL。
  • 如果仓库需要认证,配置相应的凭证(Credentials),如用户名和密码或SSH密钥。
  • 设置仓库中触发构建的分支代码(*/release表示release分支有代码提交则自动触发构建)。
    在这里插入图片描述

4. 构建触发器

  • 配置构建触发器,这可以是轮询SCM(Poll SCM)、Webhook触发、定时构建等。
  • 例如,如果你希望在每次代码提交时触发构建,可以选择“GitHub hook trigger for GITScm polling”或“Poll SCM”,并设置合适的时间间隔。
    在这里插入图片描述

5.Gitee中配置WebHook

在Gitee中配置WebHook时,首先进入仓库的“管理”页面,选择“Webhooks”并添加新WebHook。在请求URL中输入Jenkins的WebHook地址(如),选择触发事件(如推送事件),然后保存配置。这样,每当代码提交时,Gitee将自动通知Jenkins触发相应的构建任务。
在这里插入图片描述
上图中所需的URL将在设置Jenkins的Webhook触发器时指定,这个URL用于接收外部触发信号以启动构建流程。由于 Jenkins 是要登录之后才可以操作的,处于公网的 Jenkins 我们也不能降至设置为匿名访问,所以这里我们将 Jenkins 的用户名密码放在请求地址中,最终地址类似这样:http://username:password@IP:8088/xxxx。而Jenkins系统中生成的URL是不包含用户名和密码的,需要你自己手动添加!
此外,为了安全起见,Jenkins系统会自动生成一个密码或密钥,用于验证Webhook请求的有效性,确保只有授权方能触发构建任务。
在这里插入图片描述

对应的URL和密码输入并新建WebHook即可,注意,因为Gitee中的bug,就算配置成功了,测试WebHook也会出现404错误。因此如果测试出现404错误不要着急,可以尝试构建项目看看效果再来确定问题!
在这里插入图片描述

6. 构建设置

  • 在“构建”部分,你需要输入Maven构建的根POM文件的路径,通常是pom.xml
  • 在“Goals and options”中,输入你希望执行的Maven命令,如clean installpackage,根据项目需求选择合适的构建目标。
    在这里插入图片描述

7. 构建后操作(Post Steps)

  • 你可以在“构建后操作”部分添加一些后续步骤,如“发送邮件通知”或“部署到服务器”。
  • 如果你使用Publish Over SSH插件,可以配置将构建产物上传到远程服务器的步骤。
    在这里插入图片描述

此外,这里还需要上传并执行构建后的deploy.sh脚本文件,具体脚本如下所示:

# 设置jdk路径
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.23.0.9-2.el7_9.x86_64
export PATH=$JAVA_HOME/bin:$PATH

# 设置jar路径和文件名
JAR_PATH=/root/deploy_data
JARFILE=webserver-1.0.0-SNAPSHOT.jar

# kill掉正在运行的java进程
ps -ef | grep $JARFILE | grep -v grep | awk '{print $2}' | xargs kill -9

# 开启一个新的java进程
nohup java -jar -Xms512m -Xmx1024m $JAR_PATH/$JARFILE > out.log 2>&1 &

if [ $? -eq 0 ]; then
    sleep 30
    tail -n 50 out.log
fi

这个脚本文件需要根据服务器中jdk的路径以及jar的路径和名称进行修改!

8. 保存配置并构建

  • 配置完成后,点击页面底部的“保存”或“应用”按钮。
  • 返回项目主页,点击“立即构建”或“Build Now”按钮,启动第一次构建。
    在这里插入图片描述

9. 查看构建结果

  • 构建过程会在Jenkins的控制台输出中显示,你可以点击项目主页左侧的“控制台输出”查看构建日志。
  • 如果构建成功,Jenkins会显示一个绿色的“成功”标记,如果失败,则显示红色“失败”标记。
    在这里插入图片描述

通过以上步骤,你就可以在Jenkins中成功新建并配置一个Maven项目,实现自动化构建。

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

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

相关文章

力扣高频SQL 50题(基础版)第四十四题之626. 换座位

文章目录 力扣高频SQL 50题(基础版)第四十四题之626. 换座位626. 换座位题目说明思路分析实现过程准备数据实现方式结果截图 力扣高频SQL 50题(基础版)第四十四题之626. 换座位 626. 换座位 题目说明 表: Seat --------------…

<数据集>街头摊贩识别数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:966张 标注数量(xml文件个数):966 标注数量(txt文件个数):966 标注类别数:1 标注类别名称:[street-vendor] 序号类别名称图片数框数1street-vendor9662016 使用标注…

Java流程控制02:if选择结构

本节内容教学视频链接:Java流程控制04:if选择结构_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV12J41137hu?p36&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 在Java中,if 选择结构用于根据特定条件执行不同的代码块。 if语句有四…

CRC校验算法详解、C语言实现

一、前言 1.1 CRC算法介绍 CRC(Cyclic Redundancy Check)校验算法是一种广泛应用于数据通信和存储系统中的错误检测方法,主要用于检测数据在传输过程中是否发生了改变。CRC算法通过计算一个固定长度的校验码,将该校验码附加到原…

Zookeeper使用快速入门:基础命令,wacth监控,权限控制

目录 前置知识 1. 基础命令 未知指令: ls: create: zookeeper中节点有四种类型,分别是: 1. 持久节点(Persistent Node) 2. 临时节点(Ephemeral Node) 3. 持久顺序…

进程间通信 ---共享内存

序言 在前一篇文章中,我们介绍了名为 👉管道 的进程间通信的方式,该种方式又可分为 匿名管带,命名管道。前者最大的特点就是 仅支持包含血缘关系两进程之间的通信,而后者 支持任意进程间的通信。  在本篇文章中&…

python3.9+wxPython设计的一个简单的计算器

运行环境:python3.9wxPython4.2.1 运行效果: 按下等于号,输出: 按下R键,保留两位小数 键盘布局与逻辑分离,添加删除功能一般功能或修改键盘布局只需要更改词典的顺序即可。添加特殊功能时则需要将队对应的…

【kubernetes】k8s配置资源管理

一、ConfigMap资源配置 ConfigMap保存的是不需要加密配置的信息 ConfigMap 功能在 Kubernetes1.2 版本中引入,许多应用程序会从配置文件、命令行参数或环境变量中读取配置信息。ConfigMap API 给我们提供了向容器中注入配置信息的机制,ConfigMap 可以被…

基于vue框架的CKD电子病历系统nfa2e(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能:患者,医生,药品信息,电子病历,临时医嘱,长期医嘱,健康科普 开题报告内容 基于Vue框架的CKD电子病历系统 开题报告 一、选题背景 随着信息技术的飞速发展和医疗信息化的深入推进,电子病历系统(Electronic Medic…

SpringBoot事务-调度-缓存

一.Spring Boot中的事务管理 设置事务 Transactional(isolation Isolation.DEFAULT) Transactional(propagation Propagation.REQUIRED) 开启事务 EnableTransactionManagement ​​​​​​​ 1. 开启事务管理 要开启 Spring 的事务管理,你需要在你的 Spring B…

Docker 日志管理

一、ELK -Filebeat Elasticsearch 数据的存储和检索 常用端口: 9100:elasticsearch-head提供web访问 9200:elasticsearch与其他程序连接或发送消息 9300:elasticsearch集群状态 Logstash 有三个组件构成input,fi…

网安行业薪资:「3人拿4干5」

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247485367&idx1&sn837891059c360ad60db7e9ac980a3321&chksmc0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330#rd 《网安面试指南》http://mp.weixin.qq.com/s…

计算机毕业设计 农家乐管理平台 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

Linux | Linux开发工具链全攻略:yum、vim、gcc/g++、GDB、Makefile与git版本控制

目录 Linux开发环境全解析:工具、编程与版本控制 1、软件包管理器YUM 查看可用的软件包 安装软件包 更新软件包 卸载软件包 查找软件包信息 清理缓存 检查可更新的软件包 显示软件包的依赖关系 2、Vim编辑器 vim的三种模式:命令模式、插入模…

计算机基础知识复习8.13

cookie和session区别 cookie:是服务器发送到浏览器,并保存在浏览器端的一小块数据 浏览器下次访问服务时,会自动携带该块数据,将其发送给服务器 session:是javaEE标准,用于在服务端记录客户端信息 数据存放在服务端更加安全&a…

Leetcode JAVA刷刷站(14)最长公共前缀

一、题目概述 二、思路方向 在Java中,要编写一个函数来查找字符串数组中的最长公共前缀,我们可以遵循以下步骤: 处理边界条件:如果数组为空或长度为0,直接返回空字符串。初始化最长公共前缀:将数组的第一个…

[0CTF 2016]piapiapia1

打开题目 看到登录口 字符串绕过长度限制strlen($_POST[nickname]) > 10

Json Formatter工具

JSON 格式化工具的选择与使用 作为开发人员,我们经常需要查看和格式化 JSON 数据。虽然市面上有很多 JSON 工具可以满足这一需求,但在某些情况下,标准的 JSON 工具可能并不够用。 例如,处理一个 JavaScript 对象的格式&#xff…

【Qt】QWidget的windowTitle属性

QWidget的windowTitle属性 API说明 windowTitle() 获取到控件的窗⼝标题. setWindowTitle(const QString& title) 设置控件的窗⼝标题. 例子:设置窗口标题 当前windowTitle属性是从属于Qwidget的,Qwidget是一个广泛的定义,window…

Qt第十四章 模型视图

Model/View(模型/视图)结构 文章目录 Model/View(模型/视图)结构简介视图组件Model/View结构的一些概念项目控件组(item Widgets)模型/视图 如何使用项目视图组设置行的颜色交替变换拖拽设置编辑操作其他操作 选择模型自定义选择多…