Jenkins通知目标服务器拉取Harbor镜像部署

news2025/1/13 8:05:27

1.告诉目标服务器拉取哪个镜像

2.判断当前有没有正在运行此容器,有就删除

3.接着查看拉取的镜像目标服务器上是否已存在,有就删除

4.拉取Harbor镜像

5.运行容器

目标服务器编写脚本

创建个部署脚本

vim deploy.sh

告诉目标服务器Harbor地址、仓库、镜像、版本号、端口信息

#第一个参数,仓库地址
harbor_addr=$1
#第二个参数,仓库名
harbor_warehouse=$2
#第三个参数,镜像名
harbor_image=$3
#第四个参数,镜像版本号
image_version=$4
#第五个参数,宿主机端口号
host_port=$5
#第六个参数,容器端口号
container_port=$6

#1.将参数都拼接起来,告知服务器要拉取的镜像
imageName=$harbor_addr/$harbor_warehouse/$harbor_image:$image_version

#2.判断当前有没有正在运行此容器,有就删除
#获取当前容器的ID
containerId=`docker ps -a | grep ${harbor_image} | awk '{print $1}'`
#判断容器是否存在
if [ "$containerId" != "" ] ; then
docker stop $containerId
docker rm $containerId
fi

#3.接着查看拉取的镜像目标服务器上是否已存在,有就删除
images=`docker images | grep ${harbor_image} | awk '{print $2}'`
#判断语句,包含我要拉取的镜像就执行删除动作
if [[ "$images" =~ $image_version ]] ; then
docker rmi $images
fi

#4.拉取Harbor镜像
#登录Harbor
docker login -u admin -p Harbor12345 $harbor_addr:80/$harbor_warehouse/$harbor_image:$image_version
#拉取镜像
docker pull $imageName
#运行容器
docker run -d --name $harbor_image -p $host_port:$container_port $imageName

添加权限,让所有用户可执行脚本

chmod a+x deploy.sh

将deploy脚本移到bin目录下,让其在任何位置都能直接使用

mv deploy.sh /usr/bin/

修改Jenkins任务

在镜像推送到Harbor仓库步骤的下面,再添加一个构建后操作

在这里插入图片描述
选择目标服务器,添加执行脚本和参数命令

deploy.sh 192.168.170.111:80 monster ${JOB_NAME} $version $host_port $container_port

直接deploy.sh,目标服务器放在bin目录下可以直接运行

紧跟着Harbor地址,Monster仓库

JOB_NAME就是当前Jenkins任务的名称mytest

version就是获取上面拉取的Gitlab标签版本号

在这里插入图片描述
host_port、container_port两个参数现在是获取不到的

所以需要再添加两个参数,在上面的参数化构建添加字符参数

在这里插入图片描述
一个宿主机端口host_port,默认值8081

一个容器端口container_port,默认值8080

在这里插入图片描述

构建验证

开始构建,界面可以看见多了两个默认值的参数

在这里插入图片描述

Started by user 我是真滴帅
Running as SYSTEM
Building in workspace /var/jenkins_home/workspace/mytest
The recommended git tool is: NONE
No credentials specified
 > git rev-parse --resolve-git-dir /var/jenkins_home/workspace/mytest/.git # timeout=10
Fetching changes from the remote Git repository
 > git config remote.origin.url http://192.168.170.111:8888/root/jenkins-cicd-mytest.git # timeout=10
Fetching upstream changes from http://192.168.170.111:8888/root/jenkins-cicd-mytest.git
 > git --version # timeout=10
 > git --version # 'git version 2.30.2'
 > git fetch --tags --force --progress -- http://192.168.170.111:8888/root/jenkins-cicd-mytest.git +refs/heads/*:refs/remotes/origin/* # timeout=10
 > git rev-parse refs/remotes/origin/main^{commit} # timeout=10
Checking out Revision b92e927c41d08ab99a8ac8a462535deadc68c972 (refs/remotes/origin/main)
 > git config core.sparsecheckout # timeout=10
 > git checkout -f b92e927c41d08ab99a8ac8a462535deadc68c972 # timeout=10
Commit message: "删除docker-compose.yml,修改页面内容"
 > git rev-list --no-walk b92e927c41d08ab99a8ac8a462535deadc68c972 # timeout=10
[mytest] $ /bin/sh -xe /tmp/jenkins13710554383855071698.sh
+ git checkout v1.0.2
HEAD is now at b92e927 删除docker-compose.yml,修改页面内容
[mytest] $ /var/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/maven/bin/mvn clean package -DskipTests
[INFO] Scanning for projects...
[INFO] 
[INFO] -------------------------< com.monster:mytest >-------------------------
[INFO] Building mytest 0.0.1-SNAPSHOT
[INFO]   from pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[WARNING] Parameter 'archive' is unknown for plugin 'spring-boot-maven-plugin:2.6.13:repackage (repackage)'
[INFO] 
[INFO] --- clean:3.2.0:clean (default-clean) @ mytest ---
[INFO] Deleting /var/jenkins_home/workspace/mytest/target
[INFO] 
[INFO] --- resources:3.3.1:resources (default-resources) @ mytest ---
[INFO] Copying 2 resources from src/main/resources to target/classes
[INFO] 
[INFO] --- compiler:3.8.1:compile (default-compile) @ mytest ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 4 source files to /var/jenkins_home/workspace/mytest/target/classes
[INFO] 
[INFO] --- resources:3.3.1:testResources (default-testResources) @ mytest ---
[INFO] skip non existing resourceDirectory /var/jenkins_home/workspace/mytest/src/test/resources
[INFO] 
[INFO] --- compiler:3.8.1:testCompile (default-testCompile) @ mytest ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to /var/jenkins_home/workspace/mytest/target/test-classes
[INFO] 
[INFO] --- surefire:3.2.2:test (default-test) @ mytest ---
[INFO] Tests are skipped.
[INFO] 
[INFO] --- jar:3.3.0:jar (default-jar) @ mytest ---
[INFO] Building jar: /var/jenkins_home/workspace/mytest/target/mytest.jar
[INFO] 
[INFO] --- spring-boot:2.6.13:repackage (repackage) @ mytest ---
[INFO] Replacing main artifact with repackaged archive
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  2.677 s
[INFO] Finished at: 2024-03-16T17:27:43Z
[INFO] ------------------------------------------------------------------------
[mytest] $ /var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.host.url=http://192.168.170.111:9000 ******** -Dsonar.projectKey=mytest -Dsonar.projectname=mytest -Dsonar.java.binaries=target -Dsonar.source=./ -Dsonar.projectBaseDir=/var/jenkins_home/workspace/mytest
INFO: Scanner configuration file: /var/jenkins_home/sonar-scanner/conf/sonar-scanner.properties
INFO: Project root configuration file: NONE
INFO: SonarScanner 5.0.1.3006
INFO: Java 17.0.7 Eclipse Adoptium (64-bit)
INFO: Linux 3.10.0-1160.el7.x86_64 amd64
INFO: User cache: /var/jenkins_home/.sonar/cache
INFO: Analyzing on SonarQube server 9.2.3
INFO: Default locale: "en", source code encoding: "UTF-8"
INFO: Load global settings
INFO: Load global settings (done) | time=614ms
INFO: Server id: 54000601-AYjKh1Zs1hD1Rss9XdjF
INFO: User cache: /var/jenkins_home/.sonar/cache
INFO: Load/download plugins
INFO: Load plugins index
INFO: Load plugins index (done) | time=218ms
INFO: Plugin [l10nzh] defines 'l10nen' as base plugin. This metadata can be removed from manifest of l10n plugins since version 5.2.
INFO: Load/download plugins (done) | time=297ms
INFO: Process project properties
INFO: Process project properties (done) | time=1ms
INFO: Execute project builders
INFO: Execute project builders (done) | time=1ms
INFO: Project key: mytest
INFO: Base dir: /var/jenkins_home/workspace/mytest
INFO: Working dir: /var/jenkins_home/workspace/mytest/.scannerwork
INFO: Load project settings for component key: 'mytest'
INFO: Load project settings for component key: 'mytest' (done) | time=191ms
INFO: Load project branches
INFO: Load project branches (done) | time=253ms
INFO: Load project pull requests
INFO: Load project pull requests (done) | time=26ms
INFO: Load branch configuration
INFO: Load branch configuration (done) | time=1ms
INFO: Auto-configuring with CI 'Jenkins'
INFO: Load quality profiles
INFO: Load quality profiles (done) | time=600ms
INFO: Auto-configuring with CI 'Jenkins'
INFO: Load active rules
INFO: Load active rules (done) | time=2826ms
INFO: Indexing files...
INFO: Project configuration:
INFO: 10 files indexed
INFO: 14 files ignored because of scm ignore settings
INFO: Quality profile for java: Easyspeed
INFO: Quality profile for web: Sonar way
INFO: Quality profile for xml: Sonar way
INFO: ------------- Run sensors on module mytest
INFO: Load metrics repository
INFO: Load metrics repository (done) | time=111ms
INFO: Sensor JavaSensor [java]
INFO: Configured Java source version (sonar.java.source): none
INFO: JavaClasspath initialization
INFO: JavaClasspath initialization (done) | time=7ms
INFO: JavaTestClasspath initialization
INFO: JavaTestClasspath initialization (done) | time=0ms
INFO: Java "Main" source files AST scan
INFO: 5 source files to be analyzed
INFO: Load project repositories
INFO: Load project repositories (done) | time=225ms
INFO: 5/5 source files have been analyzed
WARN: Dependencies/libraries were not provided for analysis of SOURCE files. The 'sonar.java.libraries' property is empty. Verify your configuration, as you might end up with less precise results.
WARN: Unresolved imports/types have been detected during analysis. Enable DEBUG mode to see them.
INFO: Java "Main" source files AST scan (done) | time=1189ms
INFO: No "Test" source files to scan.
INFO: No "Generated" source files to scan.
INFO: Sensor JavaSensor [java] (done) | time=1406ms
INFO: Sensor JaCoCo XML Report Importer [jacoco]
INFO: 'sonar.coverage.jacoco.xmlReportPaths' is not defined. Using default locations: target/site/jacoco/jacoco.xml,target/site/jacoco-it/jacoco.xml,build/reports/jacoco/test/jacocoTestReport.xml
INFO: No report imported, no coverage information will be imported by JaCoCo XML Report Importer
INFO: Sensor JaCoCo XML Report Importer [jacoco] (done) | time=2ms
INFO: Sensor CSS Rules [javascript]
WARN: Error when running: 'node -v'. Is Node.js available during analysis?
INFO: Sensor CSS Rules [javascript] (done) | time=1721ms
INFO: Sensor C# Project Type Information [csharp]
INFO: Sensor C# Project Type Information [csharp] (done) | time=1ms
INFO: Sensor C# Analysis Log [csharp]
INFO: Sensor C# Analysis Log [csharp] (done) | time=16ms
INFO: Sensor C# Properties [csharp]
INFO: Sensor C# Properties [csharp] (done) | time=0ms
INFO: Sensor SurefireSensor [java]
INFO: parsing [/var/jenkins_home/workspace/mytest/target/surefire-reports]
INFO: Sensor SurefireSensor [java] (done) | time=2ms
INFO: Sensor HTML [web]
INFO: Sensor HTML [web] (done) | time=50ms
INFO: Sensor XML Sensor [xml]
INFO: 1 source file to be analyzed
INFO: 1/1 source file has been analyzed
INFO: Sensor XML Sensor [xml] (done) | time=179ms
INFO: Sensor VB.NET Project Type Information [vbnet]
INFO: Sensor VB.NET Project Type Information [vbnet] (done) | time=1ms
INFO: Sensor VB.NET Analysis Log [vbnet]
INFO: Sensor VB.NET Analysis Log [vbnet] (done) | time=12ms
INFO: Sensor VB.NET Properties [vbnet]
INFO: Sensor VB.NET Properties [vbnet] (done) | time=0ms
INFO: Sensor com.github.mc1arke.sonarqube.plugin.scanner.ScannerPullRequestPropertySensor
INFO: Sensor com.github.mc1arke.sonarqube.plugin.scanner.ScannerPullRequestPropertySensor (done) | time=0ms
INFO: ------------- Run sensors on project
INFO: Sensor Zero Coverage Sensor
INFO: Sensor Zero Coverage Sensor (done) | time=7ms
INFO: Sensor Java CPD Block Indexer
INFO: Sensor Java CPD Block Indexer (done) | time=22ms
INFO: CPD Executor 3 files had no CPD blocks
INFO: CPD Executor Calculating CPD for 3 files
INFO: CPD Executor CPD calculation finished (done) | time=6ms
INFO: Load New Code definition
INFO: Load New Code definition (done) | time=22ms
INFO: Analysis report generated in 88ms, dir size=101.0 kB
INFO: Analysis report compressed in 25ms, zip size=24.7 kB
INFO: Analysis report uploaded in 55ms
INFO: ANALYSIS SUCCESSFUL, you can browse http://ci.hkeasyspeed.com/dashboard?id=mytest
INFO: Note that you will be able to access the updated dashboard once the server has processed the submitted analysis report
INFO: More about the report processing at http://ci.hkeasyspeed.com/api/ce/task?id=AY5IRf2h3PsONgf4Xut0
INFO: Analysis total time: 9.763 s
INFO: ------------------------------------------------------------------------
INFO: EXECUTION SUCCESS
INFO: ------------------------------------------------------------------------
INFO: Total time: 11.504s
INFO: Final Memory: 18M/67M
INFO: ------------------------------------------------------------------------
[mytest] $ /bin/sh -xe /tmp/jenkins15276106874998699608.sh
+ mv target/mytest.jar docker
+ docker build -t mytest:v1.0.2 docker/
DEPRECATED: The legacy builder is deprecated and will be removed in a future release.
            Install the buildx component to build images with BuildKit:
            https://docs.docker.com/go/buildx/

Sending build context to Docker daemon  17.57MB

Step 1/4 : FROM daocloud.io/library/java:8u40-jdk
 ---> 4aefdb29fd43
Step 2/4 : COPY mytest.jar /usr/local/
 ---> ee2b2d803137
Step 3/4 : WORKDIR /usr/local
 ---> Running in 174dacdeaca1
 ---> Removed intermediate container 174dacdeaca1
 ---> 8759ed1a2fd5
Step 4/4 : CMD java -jar mytest.jar
 ---> Running in 735d3d6093e4
 ---> Removed intermediate container 735d3d6093e4
 ---> 7180e79a6982
Successfully built 7180e79a6982
Successfully tagged mytest:v1.0.2
+ docker login -u admin -p Harbor12345 192.168.170.111:80
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /var/jenkins_home/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
+ docker tag mytest:v1.0.2 192.168.170.111:80/monster/mytest:v1.0.2
+ docker push 192.168.170.111:80/monster/mytest:v1.0.2
The push refers to repository [192.168.170.111:80/monster/mytest]
b4d16baca513: Preparing
50ecdabc71b7: Preparing
3e9cda2eceec: Preparing
5f70bf18a086: Preparing
5f70bf18a086: Preparing
5f70bf18a086: Preparing
bb7b60f93aea: Preparing
0ef3d186e2bd: Preparing
1e0931f30489: Preparing
5f70bf18a086: Preparing
fd97e4a10f39: Preparing
5f70bf18a086: Preparing
0ef3d186e2bd: Waiting
1e0931f30489: Waiting
fd97e4a10f39: Waiting
3e9cda2eceec: Layer already exists
bb7b60f93aea: Layer already exists
5f70bf18a086: Layer already exists
50ecdabc71b7: Layer already exists
fd97e4a10f39: Layer already exists
0ef3d186e2bd: Layer already exists
1e0931f30489: Layer already exists
b4d16baca513: Pushed
v1.0.2: digest: sha256:bdcbb6cfc266ddb11da8c16f021ecb90785546a8300582dff7c5969d044f0882 size: 2828
SSH: Connecting from host [1dc2bb3ce84f]
SSH: Connecting with configuration [应用服务器-170.111] ...
SSH: EXEC: completed after 13,608 ms
SSH: Disconnecting configuration [应用服务器-170.111] ...
SSH: Transferred 0 file(s)
Build step 'Send files or execute commands over SSH' changed build result to SUCCESS
Finished: SUCCESS

在这里插入图片描述

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

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

相关文章

零基础学python:5、循环语句的使用

循环 目标 程序的三大流程while 循环基本使用break 和 continuewhile 循环嵌套01. 程序的三大流程 在程序开发中,一共有三种流程方式: 顺序 —— 从上向下,顺序执行代码分支 —— 根据条件判断,决定执行代码的 分支循环 —— 让 特定代码 重复 执行02. while 循环基本使用…

基于卷积神经网络实现手写数字识别

基于卷积神经网络实现手写数字识别 基于卷积神经网络实现手写数字识别。具体过程如下&#xff1a; &#xff08;1&#xff09; 定义ConvNet结构类及其前向传播方式 &#xff08;2&#xff09; 设置超参数以及导入相关的包。 &#xff08;3&#xff09; 定义训练网络函数和绘…

R语言实现多要素偏相关分析

偏相关分析是指当两个变量同时与第三个变量相关时&#xff0c;将第三个变量的影响剔除&#xff0c;只分析另外两个变量之间相关程度的过程&#xff0c;判定指标是相关系数的R值。 在GIS中&#xff0c;偏相关分析也十分常见&#xff0c;我们经常需要分析某一个指数与相关环境参…

基于Java中的SSM框架实现快餐店线上点餐系统项目【项目源码+论文说明】

基于Java中的SSM框架实现快餐店线上点餐系统演示 摘要 随着计算机互联网的高速发展。餐饮业的发展也加入了电子商务团队。各种网上点餐系统纷纷涌现&#xff0c;不仅增加了商户的销售量和营业额&#xff0c;而且为买家提供了极大的方便&#xff0c;足不出户&#xff0c;就能订…

Docker进阶教程 - 4 Docker网络

更好的阅读体验&#xff1a;点这里 &#xff08; www.doubibiji.com &#xff09; 4 Docker网络 先说我们现在遇到的问题&#xff1a; 我们现在有一个 Redis 容器&#xff0c;一个 SpringBoot 项目容器&#xff0c;在 SpringBoot 项目的代码中如何访问 Redis 容器中的服务呢…

Harbor镜像仓库的安装和使用

1 Harbor安装 参考文章&#xff1a; 银河麒麟v10离线安装harbor 由于配置了本地私有yum源&#xff0c;因此&#xff0c;直接使用yum命令安装docker和docker-compose 1.1 安装docker yum install docker-ce1.2 安装docker-compose yum install docker-compose1.3 安装harbo…

服务器被挖矿后修改密码报错Authentication token manipulation error

服务器被挖矿&#xff0c;需要修改密码&#xff0c;结果执行的时候发现报错 passwd: Authentication token manipulation error 尝试执行下列命令后再进行密码修改&#xff0c;修改成功 chattr -i /etc/passwd /etc/shadowchattr的主要用法 参考文章: https://c.biancheng.ne…

GEE遥感云大数据林业应用典型案例及GPT模型应用

近年来遥感技术得到了突飞猛进的发展&#xff0c;航天、航空、临近空间等多遥感平台不断增加&#xff0c;数据的空间、时间、光谱分辨率不断提高&#xff0c;数据量猛增&#xff0c;遥感数据已经越来越具有大数据特征。遥感大数据的出现为相关研究提供了前所未有的机遇&#xf…

威纶通触摸屏在编辑画面时如何更改窗口画面大小?

威纶通触摸屏在编辑画面时如何更改窗口画面大小&#xff1f; 如下图所示&#xff0c;Windows11系统下&#xff0c;打开威纶通触摸屏编程软件easy builder pro&#xff0c;此时可以看到画面窗口非常小&#xff0c;不方便编辑和操作&#xff0c; 如下图所示&#xff0c;点击上方工…

swagger3快速使用

目录 &#x1f37f;1.导入依赖 &#x1f32d;2.添加配置文件 &#x1f9c2;3.添加注解 &#x1f96f;4.访问客户端 1.导入依赖 引入swagger3的依赖包 <dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artif…

B3870 [GESP202309 四级] 变长编码(膜拜版)

本题包括&#xff1a; 1.进制的超强使用 2.进制的截位使用 本题参考洛谷题解&#xff1a;https://www.luogu.com.cn/article/daqzhu5m &#xff08;在线膜拜作者的代码中&#xff09; 难度&#xff1a;普及- 对于笔者而言&#xff1a; 这道题在洛谷上通过率很高&#xff0c;…

“JavaScript: void(0)的替代方案有哪些?”

学习目标&#xff1a; 理解javascript:void(0)的工作原理&#xff0c;以及它在前端开发中的作用和用途。掌握javascript:void(0)的正确用法&#xff0c;包括在HTML中使用和在事件处理程序中使用。能够识别javascript:void(0)可能引起的常见问题&#xff0c;并学会相应的解决方…

理财第一课:炒股词典

文章目录 基础代码规则委比委差量比换手率市盈率市净率 短线操作散户亏钱的原因庄家分析炒股战法波浪理论其它 钱者&#xff0c;人生之大事&#xff0c;死生存亡之地&#xff0c;不可不察也。耕田之利&#xff0c;十倍&#xff1b;珠玉之赢&#xff0c;百倍&#xff1b;闹革命&…

安科瑞消防产品监控系统解决方案【电气火灾 消防设备 】

一、电气火灾监控系统 系统概述 l针对低压用电环节各回路中的剩余电流、温度和故障电弧等进行实时监测&#xff1b; l侧重点为低压用电环节的安全性&#xff0c;当剩余电流越限时报警输出&#xff0c;以提醒维护人员进行安全检查&#xff0c;防止因漏电引起的火灾发生&#…

【GameFramework框架内置模块】9、有限状态机(FSM)

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 【GameFramework框架】系列教程目录&#xff1a; https://blog.csdn.net/q7…

从零开始写 Docker(七)---实现 mydocker commit 打包容器成镜像

本文为从零开始写 Docker 系列第七篇&#xff0c;实现类似 docker commit 的功能&#xff0c;把运行状态的容器存储成镜像保存下来。 完整代码见&#xff1a;https://github.com/lixd/mydocker 欢迎 Star 推荐阅读以下文章对 docker 基本实现有一个大致认识&#xff1a; 核心原…

解决jenkins运行磁盘满的问题

参考&#xff1a;https://blog.csdn.net/ouyang_peng/article/details/79225993 分配磁盘空间相关操作&#xff1a; https://cloud.tencent.com/developer/article/2230624 登录jenkins相对应的服务或容器中查看磁盘情况&#xff1a; df -h在102挂载服务器上看到是这两个文件…

OSPF特殊区域(stub\nssa)

stub区域——只有1类、2类、3类&#xff1b;完全stub区域——只有1类、2类 NSSA区域&#xff1a;本区域将自己引入的外部路由发布给其他区域&#xff0c;但不需要接收其他区域的路由 在NSSA区域的路由器上&#xff0c;引入外部路由时&#xff0c;不会转换成5类LSA&#xff0c…

Ethsign银河活动开启,简单参与领6个NFT

简介&#xff1a;EthSign是一个基于区块链技术的去中心化电子签名平台&#xff0c;目的是解决传统中心化电子签名服务的各种问题。用户可以使用钱包或社交媒体帐户生成的私钥签署文件和协议&#xff0c;数字签名记录在链上&#xff0c;文件经过加密存储在去中心化存储网络中&am…

CSS学习(3)-浮动和定位

一、浮动 1. 元素浮动后的特点 脱离文档流。不管浮动前是什么元素&#xff0c;浮动后&#xff1a;默认宽与高都是被内容撑开&#xff08;尽可能小&#xff09;&#xff0c;而且可以设置宽 高。不会独占一行&#xff0c;可以与其他元素共用一行。不会 margin 合并&#xff0c;…