当前位置: 首页 > news >正文

DevOps持续集成-Jenkins(4)

❤️作者简介:2022新星计划第三季云原生与云计算赛道Top5🏅、华为云享专家🏅、云原生领域潜力新星🏅

💛博客首页:C站个人主页🌞

💗作者目的:如有错误请指正,将来会不断的完善笔记,帮助更多的Java爱好者入门,共同进步!

文章目录

    • DevOps
      • DevOps概述
      • Jenkins流水线任务入门⭐
        • Jenkins流水线任务的Hello World体验⭐
        • Jenkins流水线语法例子
        • Jenkins流水线语法生成器⭐
      • Jenkins实战4:构建pipeline(流水线)的Jenkins项目⭐
        • 项目架构图
        • Jenkins实战4的初步流水线模板(功能全部都未实现)⭐
        • Jenkinsfile配置⭐
          • 在项目中编写Jenkinsfile来维护pipeline模板(以后我们的pipeline语法都放在这个文件上)⭐
          • 在Jenkins中配置Jenkinsfile在gitlab上的地址⭐
          • 测试构建,看看Jenkinsfile是否能生效
        • 架构图第2步案例:将gitlab上面的项目代码拉取到Jenkins中⭐
        • 架构图第3步案例:利用Maven构建项目的jar包⭐
        • 架构图第4步案例:给Jenkins的pipeline任务配置SonarQube自动进行代码质量检测⭐
        • 架构图第5步案例:Jenkins制作自定义镜像并上传到Harbor⭐
        • 架构图第6-7步案例:通知目标服务器可以从Harbor上拉取镜像,并运行容器(注意:这里有个坑!)⭐
        • Jenkins流水线整合钉钉:在构建完成后通知信息(新增⭐)
          • 下载安装钉钉,并且注册账号(电脑版和手机版都行)⭐
          • 在Jenkins中下载钉钉插件(DingTalk 2.4.7版本)⭐
          • 在钉钉创建一个企业(不然无法申请项目群)⭐
          • 在钉钉创建一个新的项目群⭐
          • 在钉钉的项目群里创建一个机器人⭐
          • 在Jenkins中配置这个机器人⭐
          • Jenkinsfile配置钉钉⭐
        • 实战4的Jenkinsfile全部代码⭐

DevOps

DevOps概述

软件开发最初是由两个团队共同组成:(没有采用DevOps之前)

  • 开发团队:从头开始设计和整体系统的构建(编写代码)。需要系统不停的迭代更新。
  • 运维团队:将开发团队的代码进行测试通过后再部署上线。确保系统稳定运行。

没有采用DevOps的缺点:

  • 这看似两个目标不同的团队需要协同完成一个软件的开发。在开发团队指定好计划并完成编写代码后,需要把代码交给运维团队。运维团队向开发团队反馈需要修复的BUG以及一些需要返工的任务。这时开发团队需要经常等待运维团队的反馈。这无疑会延长整个软件开发的周期。

采用DevOps的优点?

  • DevOps的方式可以让公司能够更快地应对更新和市场发展变化,开发可以快速交付,部署也更加稳定。核心就在于简化Dev和Ops团队之间的流程,使整体软件开发过程更快速。说白了就是DevOps有利于快速完成项目,不会浪费时间)

整体的软件开发流程:

  • PLAN:开发团队根据客户的目标制定开发计划
  • CODE:根据PLAN开始编码过程,需要将不同版本的代码存储在一个库中。
  • BUILD:编码完成后,需要将代码构建并且运行。
  • TEST:成功构建项目后,需要测试代码是否存在BUG或错误。
  • DEPLOY:代码经过手动测试和自动化测试后,认定代码已经准备好部署并且交给运维团队。
  • OPERATE:运维团队将代码部署到生产环境中。
  • MONITOR:项目部署上线后,需要持续的监控产品。
  • INTEGRATE:然后将监控阶段收到的反馈发送回PLAN阶段,整体反复的流程就是DevOps的核心即持续集成、持续部署。

为了保证整体流程可以高效的完成,各个阶段都有比较常见的工具,如下图:

Jenkins流水线任务入门⭐

Jenkins流水线任务的Hello World体验⭐

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

在这里插入图片描述

Jenkins流水线语法例子
// 所有脚本命令包含在pipeline{}中
pipeline {  // 指定任务在哪个Jenkins集群节点中执行(Jenkins是支持分布式)// 这里的agent any是指该任务可以在任何Jenkins集群节点上执行。agent any// 声明全局变量,格式为:key='value'environment{host = '192.168.184.80'}// 存放所有任务的合集stages {// 单个任务1stage('任务1') {// 实现任务的具体流程steps {echo '做任务1'}}// 单个任务2stage('任务2') {// 实现任务的具体流程steps {echo '做任务2'}}// 单个任务3stage('任务3') {// 实现任务的具体流程steps {echo '做任务3'}}}
}
Jenkins流水线语法生成器⭐

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

Jenkins实战4:构建pipeline(流水线)的Jenkins项目⭐

项目架构图

在这里插入图片描述

Jenkins实战4的初步流水线模板(功能全部都未实现)⭐
pipeline {agent any// 存放所有任务的集合stages {stage('拉取Git仓库代码') {steps {echo '拉取Git仓库代码 - SUCCESS'}}stage('通过maven构建项目') {steps {echo '通过maven构建项目 - SUCCESS'}}stage('通过SonarQube做代码质量检测') {steps {echo '通过SonarQube做代码质量检测 - SUCCESS'}}stage('通过Docker制作自定义镜像') {steps {echo '通过Docker制作自定义镜像 - SUCCESS'}}stage('将自定义镜像推送到Harbor仓库') {steps {echo '将自定义镜像推送到Harbor仓库 - SUCCESS'}}stage('通过Publish Over SSH通知目标服务器') {steps {echo '通过Publish Over SSH通知目标服务器 - SUCCESS'}}}
}
Jenkinsfile配置⭐
在项目中编写Jenkinsfile来维护pipeline模板(以后我们的pipeline语法都放在这个文件上)⭐
  • 注意:该文件名一定要为:Jenkinsfile
  • Jenkinsfile文件内容放在了上面,可以直接复制!

在这里插入图片描述

在Jenkins中配置Jenkinsfile在gitlab上的地址⭐

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

测试构建,看看Jenkinsfile是否能生效

在这里插入图片描述

架构图第2步案例:将gitlab上面的项目代码拉取到Jenkins中⭐
  • 1:配置git参数:(根据tag去拉取代码)
    在这里插入图片描述在这里插入图片描述在这里插入图片描述

  • 2:生成拉取git代码的流水线语法:

    • 生成的语法代码块如下:(注意:下面有个地方(branches的name从原来是/main被我改成了${tag},如果安装默认生成的话,则是拉取最新版本代码,我们这个意思就是安装tag去拉取对应代码)和系统生成的语法不一样!!)*
    checkout([$class: 'GitSCM', branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[url: 'http://192.168.184.70:8929/root/mytest.git']]])
    

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

  • 3:把生成的pipeline语法放到Jenkinsfile文件的指定位置:

在这里插入图片描述

  • 4:测试构建:

在这里插入图片描述

架构图第3步案例:利用Maven构建项目的jar包⭐
  • 1:生成流水线语法:(生成如下)
    • 注意:/var/jenkins_home/maven/bin/mvn要改成你的maven的mvn地址。
sh '/var/jenkins_home/maven/bin/mvn clean package -DskipTests'

在这里插入图片描述

  • 2:将上面生成的语法放到Jenkinsfile的对应位置上去,然后上传到gitlab即可。(省略!)
架构图第4步案例:给Jenkins的pipeline任务配置SonarQube自动进行代码质量检测⭐
  • 1:生成流水线语法:(生成如下)
    • 注意:下面的-Dsonar.login要用自己的SonarQube的token
    • 注意:/var/jenkins_home/sonar-scanner/bin/sonar-scanner要改成你的sonar-scanner地址
sh '/var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.sources=./ -Dsonar.projectname=${JOB_NAME} -Dsonar.projectKey=${JOB_NAME} -Dsonar.java.binaries=./target/ -Dsonar.login=7ad2200f7cca90c37a909fdba8db049ac700909f'

在这里插入图片描述

  • 2:将上面生成的语法放到Jenkinsfile的对应位置上去,然后上传到gitlab即可。(省略!)
架构图第5步案例:Jenkins制作自定义镜像并上传到Harbor⭐
  • 1:生成制作自定义镜像的流水线语法(生成如下):
sh '''mv ./target/*.jar ./docker/
docker build -t ${JOB_NAME}:${tag} ./docker/'''

在这里插入图片描述

  • 2:在Jenkinsfile文件定义全局变量environment:(记得要把下面的内容改成你自己的!)
    • harborAddress是harbor地址
    • harborRepo是harbor仓库名
    • harborUser是harbor账号
    • harborPasswd是Harbor密码
    environment{harborAddress = '192.168.184.80:80'harborRepo = 'repo'harborUser = 'admin'harborPasswd = 'Harbor12345'}
  • 3:生成将镜像上传到Harbor仓库的流水线语法(生成如下):
sh '''docker login -u ${harborUser} -p ${harborPasswd} ${harborAddress}
docker tag ${JOB_NAME}:${tag} ${harborAddress}/${harborRepo}/${JOB_NAME}:${tag}
docker push ${harborAddress}/${harborRepo}/${JOB_NAME}:${tag}'''

在这里插入图片描述

  • 4:防止Jenkins内部不能使用Docker,所以重新设置一下权限:(有时候即使设置了权限也会自动变回来,导致pipeline报错)

    • 切换目录到/var/run/:
    [root@centos7-jenkins harbor]# cd /var/run/
    
    • 修改docker.sock文件的所属组:
    [root@centos7-jenkins run]# chown root:root docker.sock
    
    • 修改docker.sock文件的权限:
    [root@centos7-jenkins run]# chmod o+rw docker.sock
    
  • 5:将上面生成的语法放到Jenkinsfile的对应位置上去,然后上传到gitlab即可。

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

  • 6:执行构建即可。
  • 7:进入Harbor可视化界面,查看pipeline镜像是否push成功:

在这里插入图片描述

架构图第6-7步案例:通知目标服务器可以从Harbor上拉取镜像,并运行容器(注意:这里有个坑!)⭐
  • 1:在所有目标服务器上都放一份shell脚本文件:(原理是:Jenkins通知目标服务器去执行shell脚本文件,从而让目标服务器在Harbor上面拉取指定镜像。)
    • 原来的架构图上是把Dockerfile传到目标服务器,让目标服务器通过docker build构建镜像(缺点是当目标服务器有多台,那每一台目标服务器都需要build构建一次,n台服务器就是n次,这样十分浪费服务器资源)。
    • 现在的架构图是把镜像在Jenkins容器内构建,然后把镜像push到Harbor上,Jenkins通知所有目标服务器(不管有多少台),然后目标服务器就会执行下面的shell脚本,会从Harbor拉取指定镜像,这样一来,不管有多少台目标服务器都只是build构建一次,节省了很多资源。
vi /root/deploy.sh

内容如下:

harbor_addr=$1
harbor_repo=$2
project=$3
version=$4
host_port=$5
container_port=$6imageName=$harbor_addr/$harbor_repo/$project:$versioncontainerId=`docker ps -a | grep ${project} | awk '{print $1}'`
if [ "$containerId" != "" ] ; thendocker stop $containerIddocker rm $containerId
fitag=`docker images | grep ${project} | awk '{print $2}'`if [[ "$tag" =~ "$version" ]] ; thendocker rmi -f $imageName
fidocker login -u admin -p Harbor12345 $harbor_addrdocker pull $imageNamedocker run -d -p $host_port:$container_port --name $project $imageNameecho "SUCCESS"
  • 2:给deploy.sh权限:
chmod a+x /root/deploy.sh
  • 3:把所有目标服务器的deploy.sh都放到/usr/bin下:
[root@centos7-jenkins ~]# mv /root/deploy.sh /usr/bin/
  • 4:配置Jenkins参数:

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

  • 5:生成流水线语法:

    • 提示Exec command:
    deploy.sh $harborAddress $harborRepo $JOB_NAME $tag $host_port $container_port
    

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

  • 6:将生成的语法放到Jenkinsfile的对应位置上去,然后上传到gitlab即可。(⭐注意这里有个坑!⭐)

    • 坑坑坑!!!:sshPublisher的execCommand要用双引号,默认是单引号。(一定要改成双引号,否则语法无法生效!⭐)

    ⭐下面的是修改之后的,并且是测试通过的流水线语法!!:

sshPublisher(publishers: [sshPublisherDesc(configName: 'mytest', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "deploy.sh $harborAddress $harborRepo $JOB_NAME $tag $host_port $container_port", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
  • 7:最后测试构建即可(省略!)
Jenkins流水线整合钉钉:在构建完成后通知信息(新增⭐)
下载安装钉钉,并且注册账号(电脑版和手机版都行)⭐

钉钉下载官网

在Jenkins中下载钉钉插件(DingTalk 2.4.7版本)⭐

在这里插入图片描述

在钉钉创建一个企业(不然无法申请项目群)⭐

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

在钉钉创建一个新的项目群⭐

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

在钉钉的项目群里创建一个机器人⭐

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

在这里插入图片描述

在Jenkins中配置这个机器人⭐

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

Jenkinsfile配置钉钉⭐
  • 1:编写流水线语法:
    • 注意:robot的值就是我们在Jenkins的系统配置所设置的机器人id!!(一定要进行修改)
post {success {dingtalk (robot: 'Jenkins-dingding',type:'MARKDOWN',title: "success: ${JOB_NAME}",text: ["- 成功构建:${JOB_NAME}项目!\n- 版本:${tag}\n- 持续时间:${currentBuild.durationString}\n- 任务:#${JOB_NAME}"])}failure {dingtalk (robot: 'Jenkins-dingding',type:'MARKDOWN',title: "fail: ${JOB_NAME}",text: ["- 失败构建:${JOB_NAME}项目!\n- 版本:${tag}\n- 持续时间:${currentBuild.durationString}\n- 任务:#${JOB_NAME}"])}}
  • 2:将上面的语法放到Jenkinsfile的stages外面,并上传gitlab:

在这里插入图片描述

  • 3:点击构建Jenkins

在这里插入图片描述

  • 4:查看钉钉项目群:

在这里插入图片描述

实战4的Jenkinsfile全部代码⭐
pipeline {agent anyenvironment{harborAddress = '192.168.184.80:80'harborRepo = 'repo'harborUser = 'admin'harborPasswd = 'Harbor12345'}// 存放所有任务的集合stages {stage('拉取Git仓库代码') {steps {checkout([$class: 'GitSCM', branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[url: 'http://192.168.184.70:8929/root/mytest.git']]])}}stage('通过maven构建项目') {steps {sh '/var/jenkins_home/maven/bin/mvn clean package -DskipTests'}}stage('通过SonarQube做代码质量检测') {steps {sh '/var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.sources=./ -Dsonar.projectname=${JOB_NAME} -Dsonar.projectKey=${JOB_NAME} -Dsonar.java.binaries=./target/ -Dsonar.login=7ad2200f7cca90c37a909fdba8db049ac700909f'}}stage('通过Docker制作自定义镜像') {steps {sh '''mv ./target/*.jar ./docker/docker build -t ${JOB_NAME}:${tag} ./docker/'''}}stage('将自定义镜像推送到Harbor仓库') {steps {sh '''docker login -u ${harborUser} -p ${harborPasswd} ${harborAddress}docker tag ${JOB_NAME}:${tag} ${harborAddress}/${harborRepo}/${JOB_NAME}:${tag}docker push ${harborAddress}/${harborRepo}/${JOB_NAME}:${tag}'''}}stage('通过Publish Over SSH通知目标服务器') {steps {sshPublisher(publishers: [sshPublisherDesc(configName: 'mytest', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "deploy.sh $harborAddress $harborRepo $JOB_NAME $tag $host_port $container_port", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])}}}post {success {dingtalk (robot: 'Jenkins-dingding',type:'MARKDOWN',title: "success: ${JOB_NAME}",text: ["- 成功构建:${JOB_NAME}项目!\n- 版本:${tag}\n- 持续时间:${currentBuild.durationString}\n- 任务:#${JOB_NAME}"])}failure {dingtalk (robot: 'Jenkins-dingding',type:'MARKDOWN',title: "fail: ${JOB_NAME}",text: ["- 失败构建:${JOB_NAME}项目!\n- 版本:${tag}\n- 持续时间:${currentBuild.durationString}\n- 任务:#${JOB_NAME}"])}}}

相关文章:

DevOps持续集成-Jenkins(4)

❤️作者简介:2022新星计划第三季云原生与云计算赛道Top5🏅、华为云享专家🏅、云原生领域潜力新星🏅 💛博客首页:C站个人主页🌞 💗作者目的:如有错误请指正,将…...

【数据仓库-零】数据仓库知识体系 ing

文章目录 一. 数仓基本概念二. 离线数仓建设方法论三. etl流程四. 数仓规范建设指南四. 数据仓库架构五. 数据可视化 通过熟悉构建数仓整体的过程,可以系统的了解 数仓构建理论:能够站在全局角度看数仓的运行架构,数仓执行流程。了解到构建数…...

css3 3D 转换 技巧详细解析与代码实例

CSS3 3D转换是CSS3中的一项新特性,通过它我们可以比较容易地实现3D效果。在这里,我将向大家介绍CSS3 3D转换的一些基本概念、使用方法和常见技巧。 1. 基本概念 在使用CSS3 3D转换时,需要了解一些基础概念: 三维坐标系&#xf…...

[Unity]给场景中的3D字体TextMesh增加描边方案一

取你的文本对象,简单地添加以下脚本: using UnityEngine; using System.Collections; using UnityEngine.UI;public class TextOutline : MonoBehaviour {public float pixelSize 1;public Color outlineColor Color.black;public bool resolutionDependant fal…...

TDengine(taos)数据库导出历史数据

业务需求:导出某个站点的累计充电量,累计放电量,光伏总放电量,进线总功率的所有数据‘ 1、登录taos,使用存数据的库; 提示Database changed;即为使用成功; 2、找到你想要导出的字段…...

算法进修Day-37

算法进修Day-37 73. 矩阵置零 难度:中等 题目要求 给定一个 _m_ x _n_ 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例1 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出:[…...

服务器之日常整活

文章目录 一,序二、服务器相关流水帐未完,待补充 一,序 假如你有一台服务器,你最想做哪些事? 等等,什么叫假如你有一台服务器,假如只有一台,肯定我想搞第二台,顺便第三台…...

交互式 Web 应用 0 基础入门

初探 Gradio:轻松构建交互式 Web 应用 文章目录 初探 Gradio:轻松构建交互式 Web 应用Why Gradio?安装 Gradio创建交互式界面1. gr.Interface2. gr.Blocks 强大的组件库输入输出组件控制组件布局组件 示例交互式数据可视化多组件同时(嵌套&a…...

JSONP的安全性较差,那么在跨域情况下,有没有其他更安全的替代方案呢?

在跨域情况下,为了保证安全性,有几种更安全的替代方案可以考虑使用: 1:CORS(Cross-Origin Resource Sharing): CORS 是一种现代化的跨域解决方案,通过在服务器端设置响应头来控制跨…...

Slax Linux 获得增强的会话管理和启动参数选项

Slax Linux 的创建者和维护者托马斯-马特吉切克(Tomas Matejicek)在自己生日这天(生日快乐!)发布了其小巧便携的 GNU/Linux 发行版的新版本,带来了各种增强功能和错误修复。 新发布的 Slax Linux 版本&…...

C/C++新冠疫情死亡率 2020年9月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C新冠疫情死亡率 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C新冠疫情死亡率 2020年9月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 2020年全世界爆发了新冠疫情,请…...

Adobe Photoshop 基本操作

PS快捷键 图层 选择图层 Ctrl T:可以对图层的大小和位置进行调整 填充图层 MAC: AltBackspace (前景) or CtrlBackspace (背景) WINDOWS: AltDelete (前景) or CtrlDelete (背景) 快速将图层填充为前景色或背景色 平面化图层(盖印图层&#xff09…...

SpringMVC原理及核心组件

一、SpringMVC原理及核心组件 1、 Spring MVC的工作原理 Spring MVC 是一个对javaWeb中Servlet 简化和封装, 1.首先SpringMVC 配置DispatcherServlet 来接受所有的请求,我们通过DispatcherServlet 响应的所有数据,DispatcherServlet 是Htt…...

【rk3568-linux】 rk3568x_linux-- 编译说明

概述 一个好的安装教程能够帮助开发者完成更便捷、更快速的开发。书山有路勤为径,学海无涯苦作舟。我是秋知叶i、期望每一个阅读了我的文章的开发者都能够有所成长。 开发环境 开发环境:ubuntu18 文章目录 概述开发环境一、选择型号二、全自动编译三、…...

模拟计算器编程教程,中文编程开发语言工具编程实例

模拟计算器编程教程,中文编程开发语言工具编程实例 中文编程系统化教程,不需英语基础。学习链接 ​​​​​​https://edu.csdn.net/course/detail/39036 课程安排:初级1 1 初级概述 2 熟悉构件取值赋值 3 折叠式菜单滑动面板编程 4 自定…...

Spring Security漏洞防护—HTTP 安全响应头

一、默认的 Security Header Spring Security提供了 一套默认的安全HTTP响应头,以提供安全默认值。虽然这些头信息中的每一个都被认为是最佳实践,但应该注意的是,并不是所有的客户端都使用这些头信息,所以鼓励进行额外的测试。 …...

Plooks大型视频在线一起看网站源码

在前段时间,因为想和异地的朋友一起看电影,但是发现有电影的地方没有一起看功能,有一起看功能的视频网站没有电影,所以就想自己做一个一起看网站,于是就有了Plooks。 Plooks是一个完整的视频网站,其中包括…...

图像处理中底层、高层特征、上下文信息理解

1.图像的语义信息: 图像的语义分为视觉层、对象层和概念层。 视觉层即通常所理解的底层,即颜色、纹理和形状等等,这些特征都被称为底层特征语义; 对象层即中间层,通常包含了属性特征等,就是某一对象在某一时刻的状态&a…...

负载均衡的算法(静态算法与动态算法)

1.静态算法 静态算法是不考虑服务器动态负载的算法,包括: (1)轮转算法:轮流将服务请求(任务)调度给不同的节点(即:服务器)。 (2)加…...

mac安装jdk

1、下载jdk(我的电脑要下载arm版,截图不对) Java Downloads | Oraclehttps://www.oracle.com/java/technologies/downloads/#jdk17-mac 2、双击安装...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

【Oracle】分区表

个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积

1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...