三、Jenkins相关操作

Jenkins操作

  • 一、插件管理
    • 1.修改公共插件源
    • 2.下载中文汉化插件
      • 2.1 安装插件
      • 2.2 重启
      • 2.3 设置为中文
    • 3.远程部署插件
  • 二、用户权限管理
    • 1.安装权限插件
    • 2.开启权限
    • 3.创建角色
        • 3.1 Global roles
        • 3.2 Item roles
    • 4.创建用户
    • 5.给用户分配角色
  • 三、凭证管理
  • 四、Git管理
    • 1.账号密码方式
      • 1.1 在凭证管理配置
      • 1.2 创建项目
      • 1.3 填写git相关信息
      • 1.4 测试构建项目
    • 2.SHH方式
      • 2.1 生成ssh公钥
      • 2.2 在gitlab配置ssh公钥
      • 2.2 在凭证管理配置
      • 2.3 创建项目
      • 2.4 填写git信息
      • 1.4 测试构建项目
  • 五、项目构建类型
  • 六、Pipeline
    • 1.简介
    • 2.安装插件
    • 3.声明式
      • 3.1 创建流水线
      • 3.2 输入脚本
      • 3.3 脚本讲解
      • 3.4 脚本案例
    • 4.脚本式
      • 4.1 创建流水线
      • 4.2 输入脚本
      • 4.3 脚本讲解
    • 5.流水线脚本生成器
      • 5.1 生成git脚本
      • 5.2 生成编译脚本
      • 5.3 远程部署脚本
  • 七、Jenkins脚本管理
    • 1.流水线使用git项目下脚本
  • 八、触发器
    • 1.内置触发器
      • 1.1 触发远程构建
      • 1.2 其他工程构建触发
      • 1.3 定时构建
      • 1.4 轮询SCM
    • 2.非内置触发器
      • 2.1 Git Hook
        • 2.1.1 安装插件
        • 2.1.2 配置token
        • 2.1.3 GibLab配置WebHook
  • 九、参数化构建
    • 1.Pipeline模板脚本
    • 2.模板参数配置
  • 十、邮件配置
    • 1.安装插件
    • 2.邮箱开启SMTP协议
    • 3.邮箱相关参数配置
      • 3.1 进入配置
      • 3.2 配置系统管理员邮箱
      • 3.3 设置邮箱通知
      • 3.4 Extended E-mail Notification 设置
        • 3.4.1 创建账号密码
        • 3.4.2 填写其他信息
    • 4.定义邮箱模板
    • 5.在Pipeline加入发送邮箱

一、插件管理

  • Jenkins本身不提供很多功能,我们可以通过使用插件来满足我们的使用。例如从Gitlab拉取代码,使用

1.修改公共插件源

在这里插入图片描述

  • https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

2.下载中文汉化插件

注意:由于官方的Localization: Chinese (Simplified)的中文翻译包不全,所以使用了Local汉化插件。

2.1 安装插件

在这里插入图片描述

2.2 重启

  • jenkin地址+/restart就是重启
    • http://192.168.11.132:9095/restart

2.3 设置为中文

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

3.远程部署插件

  • 我们打包好的代码,需要远程部署到其他的服务器上,需要使用这个插件:Deploy to container
    在这里插入图片描述

二、用户权限管理

1.安装权限插件

  • Role-based Authorization Strategy
    在这里插入图片描述

2.开启权限

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

3.创建角色

在这里插入图片描述

  • 角色分为3种类型:Global roles、Item roles(项目角色)、Agent roles(和节点操作权限相关的角色)
    • 其中Global roles拥有最高的权限,如果为它分配job的读写权限,那么用户如果绑定了这个角色,将会允许读取所有的job,不管用户是不是拥有的项目角色的权限。
  • job 和item在jenkins中的概念,都可以看成是jenkins的创建的编译部署项目。
3.1 Global roles

在这里插入图片描述

3.2 Item roles

在这里插入图片描述

  • 通配符:可以看到符合通配符的项目名称的项目。

4.创建用户

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

5.给用户分配角色

在这里插入图片描述

三、凭证管理

注意:如果初始化的时候,没有选择 安装推荐插件,那么需要自己安装凭证管理插件:Credentials Binding

  • 凭据可以用来存储需要密文保护的数据库密码、Gitlab密码信息、Docker私有仓库密码等,以便Jenkins可以和这些第三方的应用进行交互。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 凭证的类型有五种:
    • Username with password:用户名和密码
    • SSH Username with private key: 使用SSH用户和密钥
    • Secret file:需要保密的文本文件,使用时Jenkins会将文件复制到一个临时目录中,再将文件路径设置到一个变量中,等构建结束后,所复制的Secret file就会被删除。
    • Secret text:需要保存的一个加密的文本串,如钉钉机器人或Github的api token
    • Certificate:通过上传证书文件的方式
  • 常用的凭证类型有:Username with password(用户密码)和SSH Username with private key(SSH 密钥)

四、Git管理

注意:如果初始化的时候,没有选择 安装推荐插件,那么需要自己安装凭证管理插件:Git
在这里插入图片描述

1.账号密码方式

1.1 在凭证管理配置

在这里插入图片描述

1.2 创建项目

在这里插入图片描述

1.3 填写git相关信息

  • 由于选择了是账号密码方式登录,所以使用git仓库,需要使用http的方式。
    在这里插入图片描述
    在这里插入图片描述

1.4 测试构建项目

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

  • 这样就完成了git配置。
    • 会将git的代码,拉取到/var/jenkins_home/workspace/ittest下面

2.SHH方式

2.1 生成ssh公钥

注意:这里是在jenkins的服务器上生成ssh公钥

# 1.进入docker
docker exec -it jenkins bash
# 2.使用root用户生成公钥和私钥
ssh-keygen -t rsa
# 3.后续一直回车

2.2 在gitlab配置ssh公钥

# 1.在jenkins服务器,查看刚刚生成的ssh公钥
cat /root/.ssh/id_rsa.pub

在这里插入图片描述

2.2 在凭证管理配置

# 1.在jenkins服务器,查看刚刚生成的ssh秘钥
cat /root/.ssh/id_rsa

在这里插入图片描述

2.3 创建项目

在这里插入图片描述

2.4 填写git信息

  • 由于选择了是ssh方式登录,所以使用git仓库,需要使用ssh的方式。
    在这里插入图片描述

1.4 测试构建项目

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

  • 这样就完成了git配置。
    • 会将git的代码,拉取到/var/jenkins_home/workspace/ittest1下面

五、项目构建类型

  • Jenkins中自动构建项目的类型有很多,常用的有以下三种(个人推荐使用流水线类型,因为灵活度非常高):
    • 自由风格软件项目(FreeStyle Project)
      • 这是最灵活的项目类型之一,适用于各种不同类型的软件项目。你可以在自由风格软件项目中执行任何类型的构建、测试和部署任务,而不受限制。
      • 它允许你通过简单的配置界面定义构建步骤,包括构建触发器、构建环境、构建后操作等。
      • 自由风格软件项目不限制你使用的构建工具、脚本语言或操作系统,因此非常适用于各种项目需求。
    • Maven项目(Maven Project)
      • 这种类型的项目专门针对 Java 项目,并且使用 Maven 构建工具。它对 Maven 项目提供了更直观的支持和集成。
      • Maven 项目类型能够自动管理 Maven 项目的依赖关系、生命周期和构建过程。
      • 通过简单的配置,你可以指定 Maven 项目的 POM 文件路径、Maven 版本、构建目标等信息,Jenkins 将自动执行 Maven 构建。
    • 流水线项目(Pipeline Project)
      • 流水线项目是基于 Jenkins Pipeline 的项目类型,它提供了一种可编程的方式来定义整个软件交付流程。
      • 通过 Pipeline DSL(领域特定语言),你可以编写管道脚本来定义构建、测试、部署等操作的流程和逻辑。
      • 流水线项目类型非常适用于复杂的持续集成和持续交付流程,它允许你以代码的方式管理和执行整个软件交付过程,从而实现更高级的自动化和可重复性。

六、Pipeline

1.简介

  • Pipeline,简单来说,就是一套运行在 Jenkins 上的工作流框架,将原来独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排和可视化的工作。
  • 使用Pipeline有以下好处:
    • 代码:Pipeline以代码的形式实现,通常被检入源代码控制,使团队能够编辑,审查和迭代其传送流程。
    • 持久:无论是计划内的还是计划外的服务器重启,Pipeline都是可恢复的。
    • 可停止:Pipeline可接收交互式输入,以确定是否继续执行Pipeline。
    • 多功能:Pipeline支持现实世界中复杂的持续交付要求。它支持fork/join、循环执行,并行执行任务的功能。
    • 可扩展:Pipeline插件支持其DSL的自定义扩展 ,以及与其他插件集成的多个选项。
  • 如何创建 Jenkins Pipeline呢?
    • Pipeline 脚本是由 Groovy 语言实现的,但是我们没必要单独去学习 Groovy
    • Pipeline 支持两种语法:Declarative(声明式)和 Scripted Pipeline(脚本式)语法
      • 这两种语法达到的效果是一样的。
      • 在jenkins2.0之前,使用的是脚本式的,但是在2.0之后,官方推荐使用声明式
    • Pipeline 也有两种创建方法:可以直接在 Jenkins 的 Web UI 界面中输入脚本;也可以通过创建一个 Jenkinsfile 脚本文件放入项目源码库中(一般我们都推荐在 Jenkins 中直接从源代码控制(SCM) 中直接载入 Jenkinsfile Pipeline 这种方法)。

2.安装插件

在这里插入图片描述

  • 安装插件后,创建项目的时候多了“流水线”类型
    在这里插入图片描述

3.声明式

3.1 创建流水线

在这里插入图片描述

3.2 输入脚本

在这里插入图片描述

3.3 脚本讲解

  • agent
    • agent 用于指定 Pipeline 执行的代理节点,也就是指定构建将在哪个节点上运行。any 表示可以在任何可用的节点上执行,也可以指定特定的节点。
    • 在 Pipeline 中,每个阶段(stage)都需要在某个节点上执行,而 agent 用于指定这个节点。如果不指定 agent,则默认会在 Jenkins Master 节点上执行。
  • stages
    • stages 用于定义 Pipeline 的各个阶段,一个阶段代表着 Pipeline 执行过程中的一个逻辑步骤。
    • 在 stages 内部,可以定义多个 stage,每个 stage 中包含了一个或多个执行步骤(steps)。
  • stage(name){}:定义一个步骤,name为步骤名称
  • steps 是用于定义一个阶段(stage)中具体执行步骤的部分。在一个 stage 中,可以包含一个或多个 steps。
    • steps 中可以包含各种不同类型的指令或命令,用于执行构建过程中的具体操作,例如编译代码、运行测试、部署应用等。每个 step 可以是一个 Shell 命令、一个函数调用、一个插件调用或者其他支持的操作。
pipeline {agent anystages {stage('pull code') {steps {echo 'pull code'}}stage('buld project') {steps {echo 'buld project'}}stage('publish project') {steps {echo 'publish project''}}}
}

3.4 脚本案例

  • 可以借助脚本生成器生成
pipeline {agent anystages {stage('pull code') {steps {checkout scmGit(branches: [[name: '*/main']], extensions: [], userRemoteConfigs: [[credentialsId: '442d3f64-5dc3-432e-9d89-c53be558be21', url: 'http://192.168.11.132:9980/qingsi_it_group/qingsi_web.git']])}}stage('buld project') {steps {sh 'mvn clean package'}}stage('publish project') {steps {echo '看后面的实际案例'}}}
}

4.脚本式

4.1 创建流水线

在这里插入图片描述

4.2 输入脚本

在这里插入图片描述

4.3 脚本讲解

node {def mvnHomestage('pull code') {steps {echo 'pull code'}}stage('buld project') {steps {echo 'buld project'}}stage('publish project') {steps {echo 'publish project''}}}
}

5.流水线脚本生成器

在这里插入图片描述

5.1 生成git脚本

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

5.2 生成编译脚本

在这里插入图片描述

5.3 远程部署脚本

七、Jenkins脚本管理

  • 正常来说,Jenkins流水线脚本是和项目放到一起。
    • 如果放到jenkins服务器,如果服务器宕机或其他原因,会导致脚本丢失。
  • 文件的默认名称:Jenkinsfile

1.流水线使用git项目下脚本

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

八、触发器

  • 触发器:是指在什么条件下,触发某个项目的构建

1.内置触发器

1.1 触发远程构建

  • 设置一个token,只需要请求jenkins的url+token即可触发构建
    在这里插入图片描述
  • 这里的URL即:http://192.168.11.132:9095/job/ittest/build?token=6666666
    • 在浏览器中,输入地址,即触发构建
  • 注意:需要登陆才可以通过链接触发

1.2 其他工程构建触发

  • 当其他工程完成构建时,触发当前工程项目构建。
    在这里插入图片描述

1.3 定时构建

在这里插入图片描述

  • 定时字符串从左往右分别为: 分 时 日 月 周

例子:
每30分钟构建一次:H代表形参 H/30 * * * * 10:02 10:32
每2个小时构建一次: H H/2 * * *
每天的8点,12点,22点,一天构建3次: (多个时间点中间用逗号隔开): 0 8,12,22 * * *
每天中午12点定时构建一次: H 12 * * *
每天下午18点定时构建一次: H 18 * * *
在每个小时的前半个小时内的每10分钟: H(0-29)/10 * * * *
每两小时一次,每个工作日上午9点到下午5点(也许是上午10:38,下午12:38,下午2:38,下午4:38): H H(9-16)/2 * * 1-5

1.4 轮询SCM

  • 是指定时扫描本地代码仓库的代码是否有变更,如果代码有变更就触发项目构建。
  • 注意:这次构建触发器,Jenkins会定时扫描本地整个项目的代码,增大系统的开销,不建议使用。
    在这里插入图片描述

2.非内置触发器

2.1 Git Hook

  • Git Hook可以有效解决轮询SCM的问题
    在这里插入图片描述
2.1.1 安装插件
  • 安装插件:Generic Webhook Trigger
    在这里插入图片描述
2.1.2 配置token

在这里插入图片描述

2.1.3 GibLab配置WebHook

在新版本的gitlab中,配置webhook时如果jenkins用的是内网地址就会出现以下报错
Url is blocked: Requests to the local network are not allowed
因为新版本中gitlab默认不允许向本地网络发送webhook请求,需要进行以下配置
在这里插入图片描述

  • webhook链接:http://192.168.11.132:9095/generic-webhook-trigger/invoke?token=6666
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

九、参数化构建

  • 有时在项目构建的过程中,我们需要根据用户的输入动态传入一些参数,从而影响整个构建结果,这时我们可以使用参数化构建。
  • 案例:下来演示通过输入gitlab项目的分支名称来部署不同分支项目。

1.Pipeline模板脚本

  • 模板里面需要写入参数,写法:${参数名}
pipeline {agent anystages {stage('pull code') {steps {checkout scmGit(branches: [[name: '*/${branch}']], extensions: [], userRemoteConfigs: [[credentialsId: '442d3f64-5dc3-432e-9d89-c53be558be21', url: 'http://192.168.11.132:9980/qingsi_it_group/qingsi_web.git']])}}stage('buld project') {steps {sh 'mvn clean package'}}stage('publish project') {steps {echo '看后面的实际案例'}}}
}

2.模板参数配置

在这里插入图片描述

  • 这里我们选择文本参数即可
    在这里插入图片描述
  • 加完之后,该项目左边菜单栏会多出一个构建参数的菜单
    在这里插入图片描述
  • 输入对应的分支名,点击Build,即可开始构建

十、邮件配置

  • 应用场景:当我们的项目构建完成,需要向邮箱发送构建结果

1.安装插件

  • 安装Email Extension插件
    在这里插入图片描述

2.邮箱开启SMTP协议

  • 以163邮箱为例,开启SMTP协议
    在这里插入图片描述
  • 点击我已发送后,会显示授权码

3.邮箱相关参数配置

3.1 进入配置

在这里插入图片描述

3.2 配置系统管理员邮箱

  • 系统管理员邮件地址:这里邮箱地址要和后文中的一致
    在这里插入图片描述

3.3 设置邮箱通知

  • 如果使用ssl,那么端口是465。不使用ssl,端口是:25
    在这里插入图片描述

3.4 Extended E-mail Notification 设置

3.4.1 创建账号密码
  • 账号密码:SMTP账号 + SMTP权限码
    在这里插入图片描述
3.4.2 填写其他信息

在这里插入图片描述

  • 参数解释:
    • SMTP server:SMTP服务器地址
    • Default user e-mail suffix:邮箱的后缀
    • Default Content Type:邮件内容格式
    • Credentials:邮箱账号/权限码
    • Default Recipients:默认接收人邮箱

4.定义邮箱模板

  • 邮箱模板,一般都是放到git项目根目录下,名称叫:email.html
  • 下面是常用的有项目模板格式
  • 模板参数解释:参数来自于Jenkins的全局变量
    • BUILD_NUMBER:构建次数
    • BUILD_STATUS:构建状态
    • PROJECT_NAME:项目名称
    • CAUSE:触发原因
    • BUILD_URL:构建日志
    • BUILD_URL:构建地址
    • PROJECT_URL:项目地址
<!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><td>(本邮件是程序自动下发的,请勿回复!)</td></tr><tr><td><h2><font color="#0000FF">构建结果 - ${BUILD_STATUS}</font></h2></td></tr><tr><td><br /><b><font color="#0B610B">构建信息</font></b><hr size="2" width="100%" align="center" /></td></tr><tr><td><ul><li>项目名称&nbsp;&nbsp;${PROJECT_NAME}</li><li>构建编号&nbsp;&nbsp;第${BUILD_NUMBER}次构建</li><li>触发原因:&nbsp;${CAUSE}</li><li>构建日志:&nbsp;<a href="${BUILD_URL}console">${BUILD_URL}console</a></li><li>构建&nbsp;&nbsp;Url&nbsp;&nbsp;<a href="${BUILD_URL}">${BUILD_URL}</a></li><li>工作目录&nbsp;&nbsp;<a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li><li>项目&nbsp;&nbsp;Url&nbsp;&nbsp;<a href="${PROJECT_URL}">${PROJECT_URL}</a></li></ul></td></tr><tr><td><b><font color="#0B610B">Changes Since LastSuccessful Build:</font></b><hr size="2" width="100%" align="center" /></td></tr><tr><td><ul><li>历史变更记录 : <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a></li></ul> ${CHANGES_SINCE_LAST_SUCCESS,reverse=true, format="Changes for Build #%n:<br />%c<br />",showPaths=true,changesFormat="<pre>[%a]<br />%m</pre>",pathFormat="&nbsp;&nbsp;&nbsp;&nbsp;%p"}</td></tr><tr><td><b>Failed Test Results</b><hr size="2" width="100%" align="center" /></td></tr><tr><td><prestyle="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">$FAILED_TESTS</pre><br /></td></tr><tr><td><b><font color="#0B610B">构建日志 (最后 100行):</font></b><hr size="2" width="100%" align="center" /></td></tr><tr><td><textarea cols="80" rows="30" readonly="readonly"style="font-family: Courier New">${BUILD_LOG, maxLines=100}</textarea></td></tr>
</table>
</body>
</html>

5.在Pipeline加入发送邮箱

  • 邮箱发送的语法,也可以在生成器中生成
pipeline {agent anystages {stage('pull code') {steps {checkout([$class: 'GitSCM', branches: [[name: '*/${branch}']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'b632ed00-fc81-43c8-a746-5aa0673b2658', url: 'git@192.168.66.100:itheima_group/web_demo.git']]])}}stage('code checking') {steps {script {//引入SonarQubeScanner工具scannerHome = tool 'sonar-scanner'}//引入SonarQube的服务器环境withSonarQubeEnv('sonarqube') {sh "${scannerHome}/bin/sonar-scanner"}}}stage('build project') {steps {sh 'mvn clean package'}}stage('publish project') {steps {deploy adapters: [tomcat8(credentialsId: 'fc23e5b7-9930-4dfb-af66-a2a576be52fb', path: '', url: 'http://192.168.66.102:8080')], contextPath: null, war: 'target/*.war'}}}post {always {emailext(subject: '构建通知:${PROJECT_NAME} - Build # ${BUILD_NUMBER} - ${BUILD_STATUS}!',body: '${FILE,path="email.html"}',to: 'xxxxxxxx@qq.com')}}
}

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

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

相关文章

深入浅出 -- 系统架构之Keepalived搭建双机热备

Keepalived重启脚本双机热备搭建 ①首先创建一个对应的目录并下载keepalived安装包&#xff08;提取码:s6aq&#xff09;到Linux中并解压&#xff1a; [rootlocalhost]# mkdir /soft/keepalived && cd /soft/keepalived [rootlocalhost]# wget https://www.keepalived.…

【Flutter】Getx设计模式及Provider、Repository、Controller、View等

本文基于Getx 4,x 本本 1、引入 再次接触到Flutter项目&#xff0c;社区俨然很完善和活跃。pubs.dev 寻找状态管理的时候看到很熟悉的Getx时间&#xff0c;俨然发现Getx的版本已到是4.x版本&#xff0c;看到Getx的功能已经非常强大了&#xff0c;庞大的API俨然成为一种开发框架…

c# wpf LiveCharts 简单试验

1.概要 1.1 说明 1.2 环境准备 NuGet 添加插件安装 2.代码 <Window x:Class"WpfApp3.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"…

基于单片机电子密码锁系统设计

**单片机设计介绍&#xff0c;基于单片机电子密码锁系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机电子密码锁系统设计概要主要包括以下几个方面&#xff1a; 一、系统概述 基于单片机电子密码锁系统是一个…

c++11的重要特性2

可变参数模板在3中。 目录 ​编辑 1、统一的列表初始化&#xff1a; std::initializer_list&#xff1a; std::initializer_list是什么类型&#xff1a; std::initializer_list使用场景&#xff1a; 让模拟实现的vector也支持{}初始化和赋值 2、声明 auto decltype nul…

深入浅出 -- 系统架构之分布式多形态的存储型集群

一、多形态的存储型集群 在上阶段&#xff0c;我们简单聊了下集群的基本知识&#xff0c;以及快速过了一下逻辑处理型集群的内容&#xff0c;下面重点来看看存储型集群&#xff0c;毕竟这块才是重头戏&#xff0c;集群的形态在其中有着多种多样的变化。 逻辑处理型的应用&…

SQL注入---POST注入

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一. POST提交概述 在Webshell文章中介绍过post提交和get提交的区别&#xff0c;这里不再赘述 post提交和get提交的区别&#xff1a; get方式提交URL中的参数信息&#xff0c;post方式则是将信…

post请求爬虫入门程序

<!--爬虫仅支持1.8版本的jdk--> <!-- 爬虫需要的依赖--> <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.2</version> </dependency><!-- 爬虫需…

知识融合与消歧:完善知识图谱的关键步骤

知识融合与消歧&#xff1a;完善知识图谱的关键步骤 一、引言&#xff1a;知识融合与消歧的重要性 在今天的数据驱动时代&#xff0c;知识图谱已成为组织和理解海量信息的关键技术。它们使得复杂的数据关系可视化&#xff0c;为人工智能提供了丰富的知识基础。然而&#xff0c…

静态路由协议实验综合实验

需求&#xff1a; 1、除R5的换回地址已固定外&#xff0c;整个其他所有的网段基于192.168.1.0/24进行合理的IP地址划分。 2、R1-R4每台路由器存在两个环回接口&#xff0c;用于模拟连接PC的网段&#xff1b;地址也在192.168.1.0/24这个网络范围内。 3、R1-R4上不能直接编写到…

打造你的专属云开发环境:支持任意 IDE,任意云服务 | 开源日报 No.215

loft-sh/devpod Stars: 6.9k License: MPL-2.0 devpod 是一个开源的、仅限客户端的、不受限制的工具&#xff0c;可以与任何集成开发环境&#xff08;IDE&#xff09;一起使用&#xff0c;并允许您在任何云端、Kubernetes 或本地 Docker 上进行开发。 使用 devcontainer.json…

python文件打包找不到文件路径

引用&#xff1a;【将Python代码打包成exe可执行文件】 https://www.bilibili.com/video/BV1P24y1o7FY/?p4&share_sourcecopy_web&vd_sourced5811f31a0635dfc69a182c7bf1adb8b 在代码中&#xff0c;我们想读取文件a&#xff0c;一般使用如下方法。 import osdir os…

【Ubuntu20.04.6】VMWare Station 17安装Ubuntu20.04.6虚拟机系统

步骤1&#xff1a;下载Ubuntu20.04.6镜像ISO文件 Ubuntu20.04.6镜像ISO文件下载&#xff1a; https://mirrors.ustc.edu.cn/ubuntu-releases/20.04/ 步骤2&#xff1a;下载安装VMWare Station 17 下载和安装教程&#xff1a; https://blog.csdn.net/u012621175/article/deta…

【Docker】搭建开源免费的书签管理系统 - OneNav

【Docker】搭建开源免费的书签管理系统 - OneNav 前言 本教程基于绿联的NAS设备DX4600 Pro的docker功能进行搭建。 简介 OneNav是一个基于PHP的轻量级网址导航系统&#xff0c;旨在帮助用户整理和访问他们的常用网站。 OneNav的主要特点如下&#xff1a; 美观易用&#x…

分享一个基于Multi-SLAM+3DGS的新一代三维内容生产技术

基于智能空间计算&#xff0c;新一代超逼真三维内容生成技术。 可自动化生成超逼真的大场景三维模型&#xff0c;并在各类终端和空间计算设备中&#xff0c;实现前所未有的沉浸式体验。 更可接入专业三维软件和应用平台&#xff0c;进行深度的模型开发与场景落地。 支持超大复杂…

“进击的巨人”:服务器硬件基础知识解析

引言&#xff1a; 服务器是网络环境中负责处理数据、运行应用程序和服务多用户的高性能计算机系统。了解服务器的硬件构成有助于更好地管理和优化IT资源。 服务器和普通PC的差异&#xff1a; 服务器具有比个人电脑更高的处理能力、稳定性和可靠性&#xff0c;它们通常运行在没…

SystemC入门之测试平台编写完整示例:带同步输出的多路选择器

内容&#xff1a;SystemC入门书中的简单测试平台编写示例。 模块文件编写 带锁存输出的4选1多路器模型。输出在信号clock的正跳变沿时刻被锁存。 sync_mux41.h文件 #include <systemc.h>SC_MODULE(sync_mux41) {sc_in<bool> clock, reset;sc_in<sc_uint<…

opencv+python(通道的分离与合并)笔记

分割图像通道&#xff1a; 通过函数mvsplit(img)&#xff1b;mv返回的通道&#xff1b; RGB有3个通道&#xff1b;灰度图只有一个通道&#xff1b; b,g,r cv2.split(img)cv2.imshow("b",b)#通道bcv2.imshow("g",g)#通道gcv2.imshow("r",r)#通道…

c++:局部变量位置和全局变量位置的vector区别

区别&#xff1a;局部变量位置每次都会重置为空&#xff0c;全局不会。但int a[]不管在什么位置都不会重置&#xff08;不进行memset时&#xff09; 代码&#xff1a; 1.局部&#xff1a; #include<bits/stdc.h> using namespace std;int main() {for(int i 0; i <…

微信小程序的页面交互2

一、自定义属性 &#xff08;1&#xff09;定义&#xff1a; 微信小程序中的自定义属性实际上是由data-前缀加上一个自定义属性名组成。 &#xff08;2&#xff09;如何获取自定义属性的值&#xff1f; 用到target或currentTarget对象的dataset属性可以获取数据 &#xff…