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

简单的docker学习 第13章 CI/CD与Jenkins(下)

第13章 CI/CD 与 Jenkins

13.13 自由风格的 CI 操作(最终架构)

前面的架构存在的问题是,若有多个目标服务器都需要使用该镜像,那么每个目标服务器都需要在本地构建镜像,形成系统资源浪费。若能够在 Jenkins 中将镜像相撞构建好并推送到 Harbor 镜像中心,那么无论有多少目标服务器需要该镜像,都只需要从 Harbor 拉取即可。

13.13.1 Jenkins 容器化实现
  • Jenkins 容器化实现方案

  • DioD:要容器内部安装 Docker 引擎

  • DooD:与宿主机共享 Docker 引擎

  • 修改 docker.sock 权限

    /var/run/docker.sock 文件是 docker client 和 docker daemon 在本地进行通信的 socket文件。默认的组为 docker,且 other 用户不具有读写权限,这样 Jenkins 是无法来操作该文件的。

    image-20240723134522840

    所以这里需要将其组调整为 root,且为其分配读写权限

    chown root:root docker.sock
    chmod o+rw docker.sock
    

    image-20240723135715036

  • 修改 Jenkins 启动命令后重启

    首先强制删除正在运行的 Jenkins 容器

    docker rm -f jenkins
    

    然后在 Jenkins 启动命令中新增**/var/run/docker.sock**,docker 命令文件**/usr/bin/docker**,及**/etc/docker/daemon.json** 文件为数据卷。重启 Jenkins 容器

        docker run --name jenkins \--restart always \-p 8080:8080 \-p 50000:50000 \-v /var/jenkins_home:/var/jenkins_home \-v /var/run/docker.sock:/var/run/docker.sock \-v /usr/bin/docker:/usr/bin/docker \-v /etc/docker/daemon.json:/etc/docker/daemon.json \-d jenkins/jenkins
    

    启动jenkins服务后,可以使用命令行进行互动,进入控制台使用docker version查看docker 版本信息,证明jenkins服务器内可以执行docker命令

    docker exec -it jenkins /bin/bash
    docker version
    

    image-20240723140544506

13.13.2 构建并推送镜像到 Harbor

这里要实现 Jenkins 将来自 GitLab 的 jar 包构建为镜像,并推送到 Harbor。

  • 修改 daemon.json 文件

    Jenkins 是 Harbor 的客户端,需要修改/etc/docker/daemon.json 文件。修改后重启 Docker。

    {"registry-mirrors": ["https://docker.m.daocloud.io","https://huecker.io","https://dockerhub.timeweb.cloud","https://noohub.ru"],"insecure-registries": ["192.168.138.134:80"]
    }
    

    image-20240723141020532

  • Jenkins 删除构建后操作

    原来的 Jenkins 中配置的“构建后操作”完成的是将代码推送到目标服务器后,让目标服务器通过 docker compose 完成镜像的构建与启动。但现在不需要了,因为镜像构建任务要由 Jenkins 自己完成了。在 Jenkins 当前任务下的“配置”中删除。

    在这里插入图片描述

  • Jenkins 添加 shell 命令

    再添加一个“构建步骤”。这个构建步骤通过 shell命令方式完成。

    image-20240723141659468

    image-20240723143323439

    mv target/*.jar docker/
    cd docker
    mv docker-hello-1.0-SNAPSHOT.jar docker-hello.jar
    docker build -t docker-hello .
    docker login -u admin -p 101022 192.168.138.134:80
    # 此处的tag可以在后面标记上版本编号,比如时间戳等,方便后续版本管理
    docker tag docker-hello 192.168.138.134:80/jks/docker-hello
    docker image prune -f
    docker push 192.168.138.134:80/jks/docker-hello
    
  • 重新构建

    Jenkins 中在返回的任务首页中,再次执行立即构建。构建成功后,在 Jenkins 主机中可以查看到构建好的镜像与重 tag 过的镜像

    image-20240723143458895

    image-20240723143423957

    在 harbor 的仓库中也可以看到推送来的镜像

    image-20240723143719491

13.13.3 通知目标服务器
  • 修改 daemon.json 文件

    目标服务器是 Harbor 的客户端,需要修改/etc/docker/daemon.json 文件。修改后重启Docker。

    image-20240723143830583

  • 定义脚本文件

    在目标服务器 PATH 路径下的任意目录中定义一个脚本文件 deploy.sh。例如,定义在/usr/local/bin 目录下。然后再为其赋予可执行权限。这样该 deploy 命令就可以在任意目录下运行了。

    image-20240723145113131

    harbor_addr=$1
    harbor_proj=$2
    image_repo=$3
    image_tag=$4
    app_port=$5
    export_port=$6
    exist_cont_id=`docker ps -a | grep $image_repo | awk '{print $1}'`
    echo $exist_cont_idif [ "$exist_cont_id" != "" ] ; thendocker stop $exist_cont_iddocker rm $exist_cont_id
    fiexist_image_tag=`docker images | grep $harbor_addr/$harbor_proj/$image_repo | awk '{print $2}'`
    image=$harbor_addr/$harbor_proj/$image_repo:$image_tag
    echo $image
    if [[ "$exist_image_tag" =~ "$image_tag" ]] ; thendocker rmi -f simage
    fiecho 101022 | docker login -u admin --password-stdin $harbor_addrdocker pull $image
    docker run --name $image_repo -dp $export_port:$app_port $imageecho "SUCCESS"
    
  • Jenkins 添加端口号参数

    为了使用户可以随时指定容器对外暴露的参数,这里在 Jenkins 当前任务下的“配置”中“参数化构建过程”中添加一个字符参数

    image-20240723145346433

    image-20240723145445446

    image-20240723145539776

  • Jenkins 添加构建后操作

    还是在 Jenkins 当前任务下的“配置”中,为任务添加构建后操作

    image-20240723145704952

    docker-deploy.sh 192.168.138.134:80 jks docker-hello latest 8088 $export_port
    

    image-20240723150555388

  • 重新构建工程

    这次重新构建,可以看到出现了 export_port 的文本框。在这里可以修改容器对外暴露的端口号。

    image-20240723150345538

    image-20240723160619572

    构建成功后可以看到,目标服务器中增加了新的镜像,该镜像是从 harbor 拉取的,还可以看到,该镜像的容器也已经启动

    image-20240723160649270

13.14 自由风格的 CD 操作

现在要为 GitLab 中当前的项目主干分支 origin/master 上的代码打上一个 Tag,例如 v1.0.0。然后修改代码后仍提交到 GitLab 的主干分支 origin/master 上,此时再给项目打上一个 Tag,例如 v2.0.0。这样, hellojenkins 项目的主干分支 origin/master 上就打上了两个 Tag。

而 Jenkins 可以根据主干分支 origin/master 上代码的不同 Tag 对项目进行分别构建。实现项目的持续交付与持续部署。

13.14.1 发布 V1.0.0 版本
  • 修改代码并推送

    简单修改一个 Controller 中方法的返回值。修改代码后,将其推送到 GitLab

    image-20240723160946006

  • GitLab 中项目打 Tag

    image-20240723161117269

    image-20240723161130919

image-20240723161230049
image-20240723161305824

13.14.2 发布 V2.0 版本
  • 修改代码

    简单修改一个 Controller 中方法的返回值。将修改后的项目源码提交到 GitLab。

    image-20240723161437182

  • GitLab 中再打 Tag

    image-20240723161535871

    image-20240723161549589

13.14.3 Jenkins 配置 tag 参数

由于 GitLab 中的项目具有 tag 标签,那么 Jenkins 在进行项目构建时就需要让用户选择准备构建哪个 tag 的项目。所以,需要在 Jenkins 中配置一个 Git 参数 tag 作为用户选项。

  • 添加 Git 参数

    image-20240724084339474

    image-20240724084419695

    这里选择的 Git 参数,即为前面下载的 Git Parameter 插件

    image-20240724091209956

  • 添加 checkout 命令

    然后当前页面继续下拉,找到 Build Steps

    image-20240724084751233

    git checkout $proTag
    

    image-20240724091526359

    注意:此处位置需要在maven打包之前,打包后切换起不到代码切换作用导致打出的包都一样

  • 修改构建命令配置

    然后当前页面继续下拉,找到 Build Steps 中原来添加的构建命令。在所有涉及镜像的命令中添加上$hjtag 变量引用。然后应用保存

    mv target/*.jar docker/
    cd docker
    mv docker-hello-1.0-SNAPSHOT.jar docker-hello.jar
    docker build -t docker-hello:$proTag .
    echo 101022 | docker login -u admin --password-stdin 192.168.138.134:80
    docker tag docker-hello:$proTag 192.168.138.134:80/jks/docker-hello:$proTag
    docker image prune -f
    docker push 192.168.138.134:80/jks/docker-hello:$proTag
    

    image-20240724091302296

  • 修改 SSH 配置

    然后当前页面继续下拉,找到“构建后操作”中的 Send build artifacts over SSH 中的 Exec command,将原来写死的版本 latest 修改为$docker-hello-tag

    docker-deploy.sh 192.168.138.134:80 jks docker-hello $proTag 8088 $export_port
    

    image-20240724091346160

13.14.4 部署 v1.0
  • 重新构建工程

    任务首页中再次点击 Build with Parameters 构建项目,发现增加了 $docker-hello-tag 选项。这里选择v1.0 进行构建

    image-20240724085648172

    image-20240724091602664

  • 构建结果

    构建成功后,在 Jenkins 中可以看到增加了新的镜像

    image-20240724091649661

    image-20240724091754489

    目标节点服务器上docker-hello:v1.0也正在正常的运行中

    image-20240724091836464

    在浏览器上访问到的页面内容也是 v1.0的内容了 http://192.168.138.129:8081/some/test

    image-20240724094214419

    image-20240724092027542

13.14.5 部署v2.0

此时再选择 v2.0.0 进行构建

image-20240724094236381

image-20240724094257732

image-20240724092329607

image-20240724094311334

13.15 流水线任务

13.15.1 流水线简介

流水线是 Jenkins 对项目构建过程的一种管理方式。其将项目的构建过程按照构建阶段进行非常清晰的划分显示。用户可以通过可视化操作方式来轻松查看、管理构建过程中的各个阶段。

13.15.2 Hello World
  • 新建流水线任务

    image-20240724094739839

    image-20240724094820489

  • Hello World 项目创建与构建

    image-20240724094949806

    点击立即构建后,就会看到阶段视图

    image-20240724095053811

    将鼠标放到各个阶段上会显示出 logs,点击 logs 可看到相关的日志

    image-20240724095122109

    image-20240724095134669

  • 修改项目脚本

    为了更好的理解脚本,这里对 hello workd 项目的脚本进行修改

    pipeline {agent anystages {stage('Hello1') {steps {echo 'Hello World1'}}stage('Hello2') {steps {echo 'Hello World2'}}stage('Hello3') {steps {echo 'Hello World3'}}}
    }

    image-20240724095346156

  • 再次构建

    应用保存后,再次立即构建。阶段视图发生较大变化。每个阶段上均可看到相应的日志

    image-20240724095441696

13.15.3 SCM 方式维护脚本

Jenkins 流水线任务提供了两种维护脚本的方式。本地方式与 SCM 方式。在 Jenkins 中维护的方式称为本地方式

  • 代码中追加 Jenkinsfile

    每个要构建的项目采用 piple 方式进行构建管理,要求必须要有一个构建脚本,而采用 SCM 脚本维护方式时,默认该脚本文件名为 Jenkinsfile。

    对于本例,在 Idea 中的项目根目录下追加一个名为 Jenkinsfile 的文件。然后再将原来的脚本内容复制到该文件中。为了显示区别,这里对脚本内容进行了简单修改,并且提交修改到 GitLab

    pipeline {agent anystages {stage('第一阶段') {steps {echo 'Hello World1'}}stage('第二阶段') {steps {echo 'Hello World2'}}stage('第三阶段') {steps {echo 'Hello World3'}}}
    }
    

    image-20240724100205559

    然后在 GitLab 的项目首页中就可看到多了一个 Jenkinsfile 文件。然后再复制该项目的http 地址。

    image-20240724100309695

  • Jenkins 配置

    在 Jenkins 中流水线任务的“配置”中,流水线选择 SCM 方式,SCM 选择 Git,然后再将刚才复制的 GitLab 仓库地址粘贴到这里。

    image-20240724100454921

image-20240724100516253

  • 重新构建

    重新立即构建后会发现,除了这些阶段名称更新为了修改过的外,还新增了一个新的阶段 Checkout SCM。即从 SCM 中检出脚本

    image-20240724100618674

13.15.4 流水线管理 docker-hello
  • 更新 Jenkinsfile

    现要将之前的 docker-hello 项目通过流水线方式进行构建管理。所以,首先需要修改 Idea 中的 Jenkinsfile 文件内容,然后再提交到 GitLab。

    Jenkinsfile 文件操作步骤大体内容如下:

    pipeline {agent anystages {stage('从 GitLab 拉取代码') {steps {echo '从 GitLab 拉取代码,成功'}}stage('将项目打为 jar 包') {steps {echo '将项目打为 jar 包,成功'}}stage('代码质量检测') {steps {echo '代码质量检测,成功'}}stage('构建并推送镜像到 Harbor') {steps {echo '构建并推送镜像到 Harbor,成功'}}stage('通知目标服务器') {steps {echo '通知目标服务器,成功'}}}
    }
    
  • 重新构建

    image-20240724101324531

13.15.5 GitLab 拉取代码
  • 定义Git参数

    在 Jenkins 中的 pipeline 任务中定义一个 Git 参数,该参数仍为发布的 tag

    image-20240724101439837

    image-20240724101514543

    image-20240724101556937

  • 流水线语法

    在 pipeline 脚本文件中如何定义具体的命令语句来实现“从 GitLab 位取代码”“将项目打为 jar 包”等任务?pipeline 脚本文件是具有其特殊的语法的。不过,通过当前 pipeline 任务中的流水线语法,可自动生成符合 pipeline 脚本语法的脚本语句

    image-20240724101647512

  • 生成脚本命令

    下面要通过流水线语法生成“从 GitLab 拉取代码”的语句。首先从 GitLab 的项目中复制项目地址。

    image-20240724101728057

    然后在 Jenkins 的流水线语法中选择“checkout:Check out from version control”,并将复制来的 GitLab 的项目地址粘贴到 Repository URL 中。

    image-20240724101814090

    image-20240724101850979

    image-20240724101915887

  • 更新 Jenkinsfile

    复制生成的流水线脚本,并将其写入到 Idea 中的 Jenkinsfile 的相应 stage{}中,并提交到GitLab。

    image-20240724102103825

  • 重新构建

    对任务进行重新构建,发现可以对构建的版本进行选择了

    image-20240724102205000

    image-20240724102950598

13.15.6 将项目打为 jar 包
  • 生成脚本命令

    在 Jenkins 中通过流水线脚本语法生成“将项目打为 jar 包”的脚本语句

    sh "/var/jenkins_home/maven/bin/mvn clean package -DskipTests"
    
  • 更新 Jenkinsfile

    复制生成的流水线脚本,并将其写入到 Idea 的 Jenkinsfile 的相应 stage{}中,提交

  • 重新构建

    对任务进行重新构建,然后便可在最上层的“将项目打为 jar 包”阶段中点击 Logs,便可看到 maven 构建的日志

    在这里插入图片描述

13.15.7 构建镜像并推送到 Harbor
  • Jenkinsfile 中定义环境变量

    在Idea中的Jenkinsfile文件中添加环境变量,这些变量将在后面生成的脚本命令中使用

    environment {harbor_user='admin'harbor_password='101022'harbor_url='192.168.138.134:80'harbor_repository='jks'
    }
    

    image-20240724121053382

  • 生成脚本命令

    在 Jenkins 中通过流水线脚本语法生成“推送镜像到 Harbor”的脚本语句。脚本语句中使用的是 Jenkinsfile 中定义的环境变量

    image-20240724120521106

  • 重新构建

    对任务进行重新立构建,然后便可在最上层的“构建镜像并推送到 Harbor”阶段中点击 Logs,便可看到推送镜像到 Harbor 的日志

    image-20240724120605993

    此时查看 harbor 的管理页面,可以看到在 jks 项目中新增加了 hello_pipeline 的仓库,且仓库中具有 v1.0 的镜像。

    image-20240724120623412

    此时在 Jenkins 中就可看到出现了 hello_pipeline 的镜像。

    在这里插入图片描述

13.15.8 目标服务执行deploy脚本
  • 添加端口号参数

    为了使用户可以随时指定容器对外暴露的参数,这里在 Jenkins 当前任务下的“配置”中“参数化构建过程”中添加一个字符参数

    image-20240724133753690

    在这里插入图片描述

  • 生成脚本命令

    在 Jenkins 中通过流水线脚本语法生成“通知目标服务器执行 deploy 脚本语句。选择 sshPublisher:Send build artifacts over SSH,并从中找到目标服务器

    image-20240724135719017

    在exec command当中,填写执行shell 语句信息然后点击生成流水线脚本

    deploy.sh $harbor_url $harbor_repository $JOB_NAME $proTag 8088 $export_port
    

    image-20240724135956419

  • 更新 Jenkinsfile

    复制生成的流水线脚本,并将其写入到 Idea 的 Jenkinsfile 的相应 stage{}中,提交,最终Jenkinsfile文件内容如下

    pipeline {agent anytools {maven 'my_maven'jdk 'my_jdk'}environment {harbor_user='admin'harbor_password='101022'harbor_url='192.168.138.134:80'harbor_repository='jks'}stages {stage('从 GitLab 拉取代码') {steps {checkout scmGit(branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: 'dae57456-d8ef-407a-9817-0922f9e562c9', url: 'http://192.168.138.134:8098/root/docker-hello.git']])}}stage('将项目打为 jar 包') {steps {script {sh """java -versionmvn -versiongit checkout $proTag/var/jenkins_home/maven/bin/mvn clean package -DskipTests"""}}}stage('构建并推送镜像到 Harbor') {steps {sh """echo job_name=${JOB_NAME}mv target/*.jar docker/cd dockermv docker-hello-1.0-SNAPSHOT.jar docker-hello.jardocker build -t ${JOB_NAME}:$proTag .echo ${harbor_password} | docker login -u ${harbor_user} --password-stdin ${harbor_url}docker tag ${JOB_NAME}:$proTag ${harbor_url}/${harbor_repository}/${JOB_NAME}:$proTagdocker image prune -fdocker push ${harbor_url}/${harbor_repository}/${JOB_NAME}:$proTag"""}}stage('通知目标服务器') {steps {sshPublisher(publishers: [sshPublisherDesc(configName: 'my_target_server', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "deploy.sh $harbor_url $harbor_repository $JOB_NAME $proTag 8088 $export_port", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])}}}
    }
    

    注意 :原本生成的脚本中的 docker-deploy.sh 命令是使用单引号括起来的,需要将这里的单引号更改为双引号。否则这些变量无法完成引用

  • 重新构建

    对任务进行重新构建,然后便可在最上层的“通知目标服务器”阶段中点击 Logs,便可看到推送镜像到 Harbor 的日志

    在这里插入图片描述

    查看harbor上传镜像信息

    在这里插入图片描述

    查看目标服务器服务运行情况

    image-20240724141317251

    通过浏览器访问目标服务器服务 http://192.168.138.129:8081/some/test

    image-20240724141339019

  • 发布v2.0版本

    image-20240724141425256

    image-20240724141452979

    通过目标服务器服务查看,已经修改为tag为v2.0的镜像信息

    image-20240724141511401

相关文章:

简单的docker学习 第13章 CI/CD与Jenkins(下)

第13章 CI/CD 与 Jenkins 13.13 自由风格的 CI 操作(最终架构) 前面的架构存在的问题是,若有多个目标服务器都需要使用该镜像,那么每个目标服务器都需要在本地构建镜像,形成系统资源浪费。若能够在 Jenkins 中将镜像相撞构建好并推送到 Har…...

基于STM32设计的智能鱼缸_带鱼儿数量视觉识别(华为云IOT)(202)

文章目录 一、前言1.1 项目介绍【1】项目功能介绍【2】设计实现的功能【3】项目硬件模块组成1.2 设计思路【1】整体设计思路【2】ESP8266工作模式配置【3】自动换水原理1.3 项目开发背景【1】选题的意义【2】可行性分析【3】参考文献1.4 开发工具的选择【1】设备端开发【2】上位…...

立体连接模式下的传播与沟通:AI智能名片小程序的创新应用与深度剖析

摘要:在数字化浪潮的推动下,信息传播与沟通方式正经历着前所未有的变革。立体连接模式,作为这一变革的重要产物,通过整合物理空间、虚拟网络空间与社群心理空间的三维联动,实现了信息的深度传播与高效互动。AI智能名片…...

基于Python的Scrapy爬虫的个性化书籍推荐系统【Django框架、超详细系统设计原型】

文章目录 有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主项目介绍系统分析系统设计展示总结 有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主 项目介绍 近年来,随着互联网的蓬勃发展,企事业单…...

二叉树bst

二叉搜索树的中序遍历结果有序 ,二叉搜索树性质,左小右大,二叉搜索树中序遍历的结果应该是从小到大的。 题目描述二叉树是从上到下,从左到右描述,并非前中后序中的一种。 99. 恢复二叉搜索树 class Solution:first …...

elasticsearch的使用(二)

DSL查询 Elasticsearch的查询可以分为两大类: 叶子查询(Leaf query clauses):一般是在特定的字段里查询特定值,属于简单查询,很少单独使用。 复合查询(Compound query clauses)&am…...

YOLOv8由pt文件中读取模型信息

Pytorch的pt模型文件中保存了许多模型信息,如模型结构、模型参数、任务类型、批次、数据集等 在先前的YOLOv8实验中,博主发现YOLOv8在预测时并不需要指定任务类型,因为这些信息便保存在pt模型中,那么,今天我们便来看看…...

js遍历效率

1w条数据&#xff0c;遍历效率 1、for 15s let t(new Date()).getTime()let a[]for(var i 0; i < 100000; i){a.push({id:i,val:i})}let ts[]for(var i 0; i < a.length; i){if(a[i].val!2 && a[i].val!4 && a[i].val!8){ts.push(a[i])}}let c(new D…...

QModbus例程分析

由于有一个Modebus上位机的需要&#xff0c;分析一下QModbus Slave的源代码&#xff0c;方便后面的开发。 什么是Modbus Modbus是一种常用的串行通信协议&#xff0c;被广泛应用于工业自动化领域。它最初由Modicon&#xff08;目前属于施耐德电气公司&#xff09;于1979年开发…...

Vue万字学习笔记(入门1)

目录 简介 Vue是什么 渐进式框架 单文件组件 API 风格​ 选项式 API (Options API)​ 组合式 API (Composition API)​ 创建一个 Vue 应用 挂载应用 DOM 中的根组件模板​ 应用配置 多个应用实例​ 模板语法​ 文本插值​ 原始 HTML​ Attribute 绑定​ 简写​…...

Cesium手动建模模型用Cesiumlab转3D Tiles模型位置不对,调整模型位置至指定经纬度

Cesium加载3Dtiles模型的平移和旋转_3dtiles先旋转再平移示例-CSDN博客 Cesium 平移cesiumlab生产的3Dtiles切片模型到目标经纬度-CSDN博客 【ArcGISCityEngine】自行制作Lod1城市大尺度白膜数据_cityengine 生成指定坐标集指定区域的白模-CSDN博客 以上次ArcGISCityEngine制…...

学习C语言第23天(程序环境和预处理)

1. 程序的翻译环境和执行环境 在ANSIC的任何一种实现中&#xff0c;存在两个不同的环境 第1种是翻译环境&#xff0c;在这个环境中源代码被转换为可执行的机器指令。 第2种是执行环境&#xff0c;它用于实际执行代码。 2. 详解编译链接 2.1 翻译环境 每个源文件单独经过编…...

Ubuntu22.04安装

使用Vmware安装好后 首先执行下面命令&#xff0c;不然每次打开终端会出现To run a command as administrator (user root)… touch ~/.sudo_as_admin_successful换源 参考 sudo cp /etc/apt/sources.list /etc/apt/sources.list.baksudo gedit /etc/apt/sources.list清空…...

从入门到自动化:一篇文章掌握Python的80%

Python作为一种高级编程语言&#xff0c;以其简洁明了的语法和强大的功能性&#xff0c;在全球编程社区内享有极高的声誉。本文将带领你从Python的基础语法入手&#xff0c;介绍其常用库的应用&#xff0c;以及如何将Python用于数据分析、网络爬虫和简单的自动化任务&#xff0…...

开源的主流机器学习框架

主流的开源机器学习框架包括&#xff1a; 1. TensorFlow&#xff1a;由Google开发和维护的深度学习框架&#xff0c;广泛用于生产环境和研究。支持多种平台&#xff0c;并具有丰富的工具和库支持。 2. PyTorch&#xff1a;由Facebook开发的深度学习框架&#xff0c;以其动态计…...

RabbitMQ:发送者的可靠性之配置发送者重试机制

文章目录 为什么需要重试机制&#xff1f;如何配置重试机制&#xff1f;测试重试机制使用重试机制的注意事项 在使用消息队列&#xff08;MQ&#xff09;系统时&#xff0c;网络故障是不可避免的问题&#xff0c;尤其是在与RabbitMQ等服务交互时。如果生产者在发送消息时遇到网…...

基于深度学习的大规模MIMO信道状态信息反馈

MIMO系统 MIMO系统利用多个天线在发送端和接收端之间建立多条独立的信道&#xff0c;从而使得同一时间可以传输多个数据流&#xff0c;从而使得同一之间可以传输多个数据流&#xff0c;提高数据传输速率。 优势 增加传输速率和容量&#xff0c;提高信号覆盖范围和抗干扰能力…...

在Docker中部署Rasa NLU服务

最近因为项目需要将rasa nlu配置到docker容器中供系统调用&#xff0c;本篇主要整理该服务的docker配置过程。 本篇的重点在于docker的使用&#xff0c;不在Rasa NLU。 系统环境&#xff1a;Ubuntu 18.04.6 1. Rasa介绍 Rasa是一个开源的机器学习框架&#xff0c;专为构建基于文…...

SQL语句创建数据库(增删查改)

SQL语句 一.数据库的基础1.1 什么是数据库1.2 基本使用1.2.1 连接服务器1.2.2 使用案例 1.2 SQL分类 二.库的操作2.1 创建数据库2.2 创建数据库示例2.3 字符集和校验规则2.3.1 查看系统默认字符集以及校验规则2.3.2查看数据库支持的字符集2.3.3查看数据库支持的字符集校验规则2…...

微信小程序-Vant组件库的使用

一. 在app.json里面删除style&#xff1a;v2 为了避免使用Vant组件库和微信小程序组件样式的相互影响 二.在app.json里面usingComponents注册Vant组件库的自定义组件 "usingComponents": {"van-icon": "./miniprogram_npm/vant-weapp/icon/index&qu…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

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

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

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...