当前位置: 首页 > 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、双击安装...

云计算——弹性云计算器(ECS)

弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

Kafka入门-生产者

生产者 生产者发送流程&#xff1a; 延迟时间为0ms时&#xff0c;也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于&#xff1a;异步发送不需要等待结果&#xff0c;同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...