使用Docker+Jenkins+Gitee自动化部署SpringBoot项目

news2024/11/24 0:04:12

目录

  • 搭建基础环境
    • 1、使用Docker-Compose搭建基础环境
    • 2、搭建项目仓库环境,创建Dockerfile文件
    • 3、配置Jenkins
      • 3.1、初始化Jenkins
      • 3.2、安装核心插件
      • 3.3、全局工具配置
        • 3.3.1、配置Git。
        • 3.3.2、配置Maven
        • 3.3.3、配置JDK
      • 3.4、配置Git凭证
      • 3.5、构建项目
        • 3.5.1、配置源码管理
        • 3.5.2、构建触发器(可选)
        • 3.5.3、构建环境(可选)
        • 3.5.4、Build
        • 3.5.5、Post Steps
        • 3.5.6、立即构建

搭建基础环境

1、使用Docker-Compose搭建基础环境

在linux中创建mydata文件夹。在该文件夹下写入以下代码脚本。
在这里插入图片描述
其中start.sh中涉及到的相关配置文件、文件夹需要自己准备。当然你也可以手动删除该相关配置,在搭建自动化部署的过程中,并未用到。因为想单独配置自己的git以及maven进行自动化,但是失败了,后期再考虑如何配置,保留相关环境。
如下为我自己的配置:
搭建mysql时自动初始化配置文件的pro.sql。cp /sql/pro.sql /mydata/mysql/init
复制maven配置文件:cp /sql/settings.xml ./
复制git安装包:cp /sql/git-2.38.1.tar.gz ./
修改jenkins镜像源:cp /sql/hudson.model.UpdateCenter.xml ./

echo -e "\e[1;31m安装本地maven环境\e[0m"
mkdir -p /mydata/maven
cd /mydata/maven
wget --no-check-certificate https://dlcdn.apache.org/maven/maven-3/3.8.6/binaries/apache-maven-3.8.6-bin.tar.gz
tar -zxvf apache-maven-3.8.6-bin.tar.gz
cd /mydata/maven/apache-maven-3.8.6/conf/
mkdir -p /m2/repository
rm -rf settings.xml
cp /sql/settings.xml ./
echo -e "\e[1;31m配置maven环境变量\e[0m"
cat >> /etc/profile <<EOF
MAVEN_HOME=/mydata/maven/apache-maven-3.8.6
PATH=\$MAVEN_HOME/bin:\$PATH
export MAVEN_HOME PATH
EOF
echo -e "\e[1;31m安装本地git环境\e[0m"
mkdir -p /mydata/git
cd /mydata/git
cp /sql/git-2.38.1.tar.gz ./
tar -zxvf git-2.38.1.tar.gz
mv git-2.38.1 /usr/local/
cd /usr/local/git-2.38.1/
yum -y install autoconf-2.69-11.el7.noarch
yum -y install automake-1.13.4-3.el7.noarch
make configure
./configure --prefix=/usr/local/git
make profix=/usr/local/git
make install
cd /etc/profile.d/
echo export PATH=\$PATH:/usr/local/git/bin > git.sh
chmod +x /etc/profile.d/git.sh
source /etc/profile.d/git.sh
echo -e "\e[1;31m重新加载配置文件\e[0m"
source /etc/profile
echo -e "\e[1;31m创建mysql相关目录....\e[0m"
mkdir -p /mydata/mysql/data
mkdir -p /mydata/mysql/conf
mkdir -p /mydata/mysql/init
chmod -R 777 /mydata/mysql
rm -rf /mydata/mysql/data/*
cp /sql/pro.sql /mydata/mysql/init
echo -e "\e[1;31m写入mysql配置文件....\e[0m"
cat > /mydata/mysql/conf/my.cnf << EOF
[mysqld]
user=mysql
default-storage-engine=INNODB
character-set-server=utf8mb4
collation-server = utf8mb4_general_ci
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
EOF
echo -e "\e[1;31m创建redis相关目录....\e[0m"
mkdir -p /mydata/redis/data
mkdir -p /mydata/redis/conf
chmod -R 777 /mydata/redis
rm -rf /mydata/redis/data/*rm -rf /mydata/redis/conf/*
echo -e "\e[1;31m写入redis相关配置文件....\e[0m"
cat > /mydata/redis/conf/redis.conf << EOF
appendonly yes
EOF
chmod 777 /mydata/redis/conf/redis.conf
echo -e "\e[1;31m创建rabbitmq相关配置文件\e[0m"
mkdir -p /mydata/rabbitmq/data
chmod -R 777 /mydata/rabbitmq
rm -rf /mydata/rabbitmq/data/*
echo -e "\e[1;31m创建Nginx相关配置文件\e[0m"
mkdir -p /mydata/nginx/html /mydata/nginx/conf /mydata/nginx/conf.d /mydata/nginx/logs
rm -rf /mydata/nginx/html/*
rm -rf /mydata/nginx/conf/*
rm -rf /mydata/nginx/conf.d/*
rm -rf /mydata/nginx/logs/*
chmod -R 777 /mydata/nginx
echo -e "\e[1;31m写入nginx相关配置文件\e[0m"
cat > /mydata/nginx/conf/nginx.conf << EOF
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  300;
    server {
        listen       80;
        server_name  192.168.56.103;
      
        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }
      
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
EOF
echo -e "\e[1;31m创建jenkins相关配置文件\e[0m"
mkdir -p /mydata/jenkins/home
chmod -R 777 /mydata/jenkins
echo -e "\e[1;31m写入nginx默认首页\e[0m"
cat > /mydata/nginx/html/index.html << EOF
<h3>welcome to Nginx!</h3>
EOF
echo -e "\e[1;31m创建Tomcat文件夹\e[0m"
mkdir -p /mydata/tomcat
chmod -R 777 /mydata/tomcat
echo -e "\e[1;31m清除docker-compose.yaml文件\e[0m"
rm -rf /mydata/docker-compose.yaml
echo -e "\e[1;31m写入docker-compose.yaml文件....\e[0m"
cat > /mydata/docker-compose.yaml << EOF
version: '3.3'
services:
  mysql:
    image: mysql:5.7
    container_name: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      TZ: Asia/Shanghai
      MYSQL_DATABASE: pro
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
    ports:
      - 3306:3306
    volumes:
      - /mydata/mysql/data:/var/lib/mysql
      - /mydata/mysql/conf:/etc/mysql/conf.d
      - /mydata/mysql/init:/docker-entrypoint-initdb.d/ 
  redis:
    image: redis:5.0.14-alpine3.15
    container_name: redis
    restart: always
    command: ["redis-server","/etc/redis/redis.conf"]
    ports:
     - 6379:6379
    volumes:
     - /mydata/redis/data:/data
     - /mydata/redis/conf/redis.conf:/etc/redis/redis.conf
  rabbitmq:
    image: rabbitmq:3.8.3-management
    container_name: rabbitmq
    restart: always
    ports:
     - 15672:15672
     - 5672:5672
    volumes:
     - /mydata/rabbitmq/data:/var/lib/rabbitmq
    environment:
     - RABBITMQ_DEFAULT_USER=root
     - RABBITMQ_DEFAULT_PASS=root
  nginx:
    image: nginx:stable-alpine-perl
    container_name: nginx
    restart: always
    ports:
     - 80:80
    volumes:
     - /mydata/nginx/html:/usr/share/nginx/html
     - /mydata/nginx/logs:/var/log/nginx
     - /mydata/nginx/conf.d:/etc/nginx/conf.d
     - /mydata/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
  tomcat:
    restart: always
    image: tomcat:9.0
    container_name: tomcat
    privileged: true
    ports:
     - 8080:8080
    volumes:
     - /mydata/tomcat/webapps:/usr/local/tomcat/webapps
     - /mydata/tomcat/conf:/usr/local/tomcat/conf
     - /mydata/tomcat/logs:/usr/local/tomcat/logs
    environment:
      TZ: Asia/Shanghai
  jenkins:
    restart: always
    image: jenkins/jenkins:lts-jdk8
    container_name: jenkins
    ports:
     - 10240:8080
     - 10241:50000
    volumes:
     - /mydata/jenkins/home:/var/jenkins_home
     - $(which docker):/usr/bin/docker
     - /var/run/docker.sock:/var/run/docker.sock
EOF
echo -e "\e[1;31m创建临时tomcat并获取配置文件....\e[0m"
docker run --name tomcat -d -p 8080:8080 tomcat:9.0
echo -e "\e[1;31m进行文件复制....\e[0m"
docker cp tomcat:/usr/local/tomcat/conf /mydata/tomcat
docker cp tomcat:/usr/local/tomcat/logs /mydata/tomcat
docker cp tomcat:/usr/local/tomcat/webapps /mydata/tomcat
echo -e "\e[1;31m停止tomcat并删除临时容器....\e[0m"
docker stop tomcat
docker rm tomcat
echo -e "\e[1;31m启动所有基础环境中....\e[0m"
cd /mydata/
docker-compose up -d
echo -e "\e[1;31m请核对docker进程的状态\e[0m"
docker ps -a
echo -e "\e[1;31m配置jenkins插件镜像加速\e[0m"
cd /mydata/jenkins/home
rm -rf hudson.model.UpdateCenter.xml
cp /sql/hudson.model.UpdateCenter.xml ./
echo -e "\e[1;31m授权docker.sock配置文件\e[0m"
chmod -R 777 /var/run/docker.sock 
echo -e "\e[1;31m重启jenkins\e[0m"
docker restart jenkins
echo -e "\e[1;31m请核对maven环境\e[0m"
mvn -version
echo -e "\e[1;31m请核对git环境\e[0m"
git --version

其中,在搭建jenkins环境以便于进行自动化部署时,参考了很多的文章始终得不到解决,无一例外在构建步骤,提示docker: command not found。网上很多参考方案说的是jenkins没有进行容器卷挂载,使用外部的Docker指令。需要在运行jenkins时挂载/var/run/docker.sock:/var/run/docker.sock。但事实证明是不够的的,还需要挂载如下指令:$(which docker):/usr/bin/docker。同时,需要确保挂载成功后,需要给docker.sock授予权限。

当出现以下面板时,基础环境搭建成功。
在这里插入图片描述
在这里插入图片描述

2、搭建项目仓库环境,创建Dockerfile文件

在IDEA根目录下,创建Dockerfile文件,连同Dockerfile文件一起上传至gitee/git。
在这里插入图片描述

FROM java:8

VOLUME /tmp

COPY ./target/JavaSpirder-1.0-SNAPSHOT.jar JavaSpirder-1.0-SNAPSHOT.jar

EXPOSE 8088

ENTRYPOINT ["java", "-jar", "/JavaSpirder-1.0-SNAPSHOT.jar", "&"]

其中,FROM java:8指的基础镜像是java镜像。COPY指的是将当前目录-target下的jar包一同拷贝到镜像里面,暴露端口为8088。当容器运行时执行java -jar JavaSpirder-1.0-SNAPSHOT.jar指令。target目录下的jar包名字需要自己在控制台输入mvn package执行打包命令。待打包完成过后查看。Volume用于创建一个挂载目录。
关于VOLUME的说明,可以参考这篇文章一文说清楚Dockerfile 中VOLUME到底有什么用?

同时,修改项目中yml的配置文件,将相关中间件的地址修改为基础环境中的地址。如:

spring:
  application:
    name: java-spider
  main:
    allow-bean-definition-overriding: true
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://yourip:port/database?useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai&allowMutiQueries=true
    username: yourusername # username
    password: yourpassword #password

一切完成后,上传至gitee/git。
在这里插入图片描述

3、配置Jenkins

3.1、初始化Jenkins

当步骤1完成后,可以开始配置Jenkins。在浏览器中输入你的服务ip+端口,访问Jenkins。由于已经挂载了目录,因此可以前往/mydata/jenkins/home/secrets/initialAdminPassword中查看密码。也可以进入到容器内部docker exec -it jenkins /bin/bash后进行查询。
在这里插入图片描述
登陆成功后,根据自己的需要选择,可以安装推荐的插件,也可以选择插件来安装。安装推荐的插件里,只有一个git是我们需要的,我们后续还要安装插件。如果不安装推荐的插件,则需要搜索如下三个插件进行安装。

  • Maven Integration:Maven工具,此处不是maven仓库
  • Publish Over SSH:远程连接工具
  • Gitee:gitee仓库的一些辅助工具
    在这里插入图片描述
    在这里我选的是安装推荐的插件,但由于源的问题,以及版本的问题,安装推荐插件并不是总是成功的,但这并不影响我们的自动化部署。我们只需要继续就好。
    在这里插入图片描述
    此处可以自己创建新的账户,或者继续使用admin账户。
    在这里插入图片描述
    随后保存并完成即可。

3.2、安装核心插件

左侧面板点击“Manage Jenkins”。随后下拉页面。
在这里插入图片描述
点击Manage Plugins
在这里插入图片描述
选择可选插件,并安装如下插件。

  • Maven Integration:Maven工具,此处不是maven仓库
  • Publish Over SSH:远程连接工具
  • Gitee:gitee仓库的一些辅助工具
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

当然,由于Jenkins的优化,大部分版本只支持JDK11,因此并不是所有的插件下载都是一帆风顺的,例如我就全部下载失败。问题就在于镜像,在Docker-Compose中我使用的是jenkins/jenkins:lts-centos7-jdk8这个镜像。因此,若小伙伴们下载失败,可以考虑换个镜像下载Jenkins,或通过下载war包的方式直接更新Jenkins。
在这里插入图片描述

安装完成后,可在linux中手动重启Jenkins。Docker restart jenkins
或者在插件栏勾选“安装完成后重启Jenkins”。
在这里插入图片描述

3.3、全局工具配置

系统管理-全局工具配置。
在这里插入图片描述

3.3.1、配置Git。

  • 默认配置

由于我们在安装推荐插件时,已经安装了git插件,因此我们的Jenkins里是存在Git的了,此处配置无需改动,使用默认配置即可。
在这里插入图片描述

  • 自定义本地环境Git

在步骤1搭建基础环境时,我的本地虚拟机环境也安装了Git,但是无论我怎么配置都配置失败。此处先占一个坑,后面有空的时候再研究一下。

3.3.2、配置Maven

  • 默认配置

由Jenkins帮我们下载Maven并使用。点击新增Maven。
在这里插入图片描述
填写Name,然后勾选自动安装即可。这样Jenkins在使用Maven时便会自动帮我们安装。
在这里插入图片描述

  • 自定义本地环境Maven
    同样,在步骤1的时候,我在本地虚拟机已搭建成功git环境,但是在配置的时候总是配置失败,占坑,等下次更新时补充完整。

3.3.3、配置JDK

由于Jenkins自带了JDK,因此此处无需再额外配置。

3.4、配置Git凭证

点击“Manage Credentials”。
在这里插入图片描述
点击“全局-添加凭证”。
在这里插入图片描述
填写Git的用户名密码。
在这里插入图片描述

3.5、构建项目

在菜单栏选中“新建项目”,选中构建一个Maven项目,输入你的项目名称。
在这里插入图片描述

3.5.1、配置源码管理

勾选中“源码管理”。在此处配置你的Git仓库。若凭证(即3.4中配置的Git凭证)错误或者未填写,则会出现以下错误。
在这里插入图片描述
若你的凭证正确,则没有任何提示。
在这里插入图片描述
同时需要注意构建的分支,根据自己代码的分支情况选择构建时拉取的分支。*/master的意思是构建的分支为master分支。

3.5.2、构建触发器(可选)

Gitee webhook 提供了灵活的选择,可以指定为推送到仓库时自动拉取并构建项目。但若需要启用webhook功能,需要有一个公网的IP服务器地址才行,由于我的服务器是本地虚拟机,因此此处我不做任何配置。占坑,等买了云服务器后回来填坑。
在这里插入图片描述

3.5.3、构建环境(可选)

此处我只选择了Add timestamps to the console output。作用是在构建的时候,将输出到控制台的内容加上时间戳。
在这里插入图片描述

3.5.4、Build

Goals and Optains中输入:clean install -Dmaven.test.skip=true
clean为清空jar包。
install为打jar包,打好的jar包在项目的target下面。
-Dmaven.test.skip=true为不执行测试用例,也不编译测试用例类,跳过此类的打包。
此处Build的意思是调用Maven对项目进行编译打包,在对应的Target目录下生成jar包的意思。相当于直接在IDEA中,执行打包命令生成jar。方便在3.5.5、Post Steps步骤中,执行shell时,将项目jar包复制到镜像容器内。
在这里插入图片描述

3.5.5、Post Steps

选择执行shell。
在这里插入图片描述

填写shell语句。

在这里插入图片描述
cd /var/jenkins_home/workspace/Jenkins-Docker-Spider。这句话的意思是进入Jenkins容器内部工作目录。Jenkins-Docker-Spider是你自己在3.5构建项目中你自己输入的项目名称。

docker stop java-spider || true。这句话的意思是,如果存在已经运行的容器,则暂停容器,否则默认为true,不做任何处理。

docker rm java-spider || true。这句话的意思是,如果存在已经暂停了的容器,则移除该容器,否则默认为true,不做任何处理。

docker rmi java-spider || true。这句话的意思是,如果已经移除了容器,则删除该容器对应的镜像,否则默认为true,不做任何处理。

docker build -t java-spider .。这句话的意思是,根据目录下的 Dockerfile 文件构建镜像,-t 后面指定该镜像名称。注意后面还有一个“点”。这个点的意思就是表示当前目录,即Dockerfile所在目录。该Dockerfile即为我们在IDEA根目录下的文件。

docker run -d -p 8088:8088 --name java-spider java-spider:latest。这句话的意思就是在后台运行该镜像生成容器,容器名为java-spider。

cd /var/jenkins_home/workspace/Jenkins-Docker-Spider
docker stop java-spider || true
docker rm java-spider || true
docker rmi java-spider || true
docker build -t java-spider .
docker run -d -p 8088:8088 --name java-spider java-spider:latest

3.5.6、立即构建

当以上步骤完成后,点击保存。即可开始进行构建。
在这里插入图片描述

在构建任务出,查看控制台输出,观察构建过程。

在这里插入图片描述

在这里插入图片描述

此处可以看到我构建失败了,原因是因为Jenkins内部无法执行Shell命令。虽然我在步骤1搭建基础环境时,我是将Jenkins内部使用的Docker指令和外部Docker进行挂载(- /var/run/docker.sock:/var/run/docker.sock)。但此时我并没有授权。因此只需要授权即可。在对应Linux终端输入[root@localhost ~]# chmod -R 777 /var/run/docker.sock即可。此时就可以正常的进行构建啦。

在这里插入图片描述
构建成功

在这里插入图片描述

此时查看我的Jenkins目录。可以看到Build步骤成功将jar包打包,在工作空间目标目录中,生成了我项目的jar包。

在这里插入图片描述

查看容器运行状态。可以发现我自己的镜像服务已经启动。

在这里插入图片描述

此时通过Postman访问我自己的服务,也可以成功将数据保存到我的虚拟机mysql中。

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

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

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

相关文章

Docker教程(centos下安装及docker hello world)

Docker介绍 Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中&#xff0c;然后发布到任何流行的 Linux或Windows操作系统的机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之间不会有任何…

STC51单片机38——按键控制舵机连续运动,稳定不抖动

仿真&#xff1a; //开发板按钮K3和K4&#xff0c;舵机信号线P27 //程序为12m晶振&#xff0c;开发板为11.0592M #include"reg52.h" #define u8 unsigned char #define u16 unsigned int sbit P27P2^7;//舵机信号线 sbit K3P3^2; //正偏转 sbit K4P3^3; //反偏…

我的大二web课程设计 使用HTML做一个简单漂亮的页面(纯html代码)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

Flutter中GetX系列四--BottomSheet(底部弹框)

BottomSheet介绍 BottomSheet 是底部弹出的一个组件&#xff0c;常用于单选、验证码二次校验弹窗等&#xff0c;GetX的BottomSheet底部弹出是自定义通过路由push的方法实现底部弹窗的一个效果。 BottomSheet使用 我们可以通过GetX很轻松的调用bottomSheet()&#xff0c;而且…

HTML+CSS大作业:使用html设计一个简单好看的公司官网首页 浮动布局

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

web前端期末大作业:网站设计与实现——咖啡网站HTML+CSS+JavaScript

&#x1f380; 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

PMBOK史上最大的改版,你知道到底有什么精华嘛?

1、项目管理经典的5大过程组、10大知识领域和49个过程&#xff08;第六版&#xff09;的结构彻底被改变&#xff0c;取而代之的是项目管理12大原则和8大绩效域组成的全新结构&#xff1b; 2、项目管理标准顺应趋势&#xff0c;从基于过程&#xff08;Process-based&#xff09…

AI+保险,打造让投保人“叫绝”的服务方式

近年来,信息技术在保险领域的应用越来越广泛&#xff0c;在稳步推进保险业务的线上化与智能化的同时&#xff0c;也让保险服务覆盖率有了极大的提升。然而,保险业服务在智能化转型方面仍面临着诸多挑战。 咨询热线统一接入&#xff0c;客户来电不遗漏 保险企业客户不仅体量大…

人类真的与恐龙无缘见面吗?看看雕刻和绘画怎样说

人类真的与恐龙无缘见面吗&#xff1f;看看雕刻和绘画怎样说 恐龙的形象经常出现在电影、电视和网络动画。它们庞大的身躯、凶猛的样子都让人留下深刻的印象。 但是我们今天看到的恐龙都只是出现在屏幕或书籍中&#xff0c;还有在博物馆内恐龙的模型或骨架&#xff0c;那历史上…

计算机考研,我不建议考408

这篇文章是抖音和b站上上传的同名视频的原文稿件&#xff0c;感兴趣的csdn用户可以关注我的抖音和b站账号&#xff08;GeekPower极客力量&#xff09;。同时这篇文章也为视频观众提供方便&#xff0c;可以更加冷静地分析和思考。文章同时在知乎发表。欢迎大家的留言。 b站视频链…

【计算机毕业设计】22.学校试卷生成系统+vue

一、系统截图&#xff08;需要演示视频可以私聊&#xff09; 摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的…

三维重建之NeRF(pytorch)

神经辐射场&#xff08;NeRF&#xff09;是一个简单的全连接网络&#xff08;权重约为5MB&#xff09;&#xff0c;经过训练&#xff0c;可以使用渲染损失再现单个场景的输入视图。网络直接从空间位置和观看方向&#xff08;5D输入&#xff09;映射到颜色和不透明度&#xff08…

为dev c++配置图形开发环境easyx

easyx广泛支持VC6~C2022,并且在VC中配置十分容易&#xff0c;点击安装一个按钮搞定。但配置dev C则难度要大很多。这里我们来详细讲述配置过程。笔者也是经过几次尝试才配置成功&#xff0c;希望给试图在dev上配置easyx的童鞋带来帮助。 1、下载easyX 第一步就不用说了&#…

【强化学习论文合集】ICML-2022 | 人工智能 CCF-A类会议(附链接)

第39届国际机器学习会议(International Conference on Machine Learning, ICML 2022)于北京时间7月17日至7月23日,在美国马里兰州巴尔的摩市以线上线下结合的方式举办。 [1]. EAT-C: Environment-Adversarial sub-Task Curriculum for Efficient Reinforcement Learning.[2]…

接口测试 - 从0不到1的心路历程

我是一名做了三年测试的tester&#xff0c;2020年以功能测试工程师的身份入职北京一家医疗培训公司&#xff0c;入职后为了提高测试效率&#xff0c;接触到接口测试&#xff0c;以下是从零到现在 (还有很大完善的空间&#xff0c;所以不能算是1) 的一些心路历程。 做接口测试的…

学生HTML个人网页作业作品——湘菜美食网页设计作品(12页) 美食网站设计与实现

&#x1f380; 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

图解LeetCode——1742. 盒子中小球的最大数量(难度:简单)

一、题目 你在一家生产小球的玩具厂工作&#xff0c;有 n 个小球&#xff0c;编号从 lowLimit 开始&#xff0c;到 highLimit 结束&#xff08;包括 lowLimit 和 highLimit &#xff0c;即 n highLimit - lowLimit 1&#xff09;。另有无限数量的盒子&#xff0c;编号从 1 到…

【JavaWeb】第五章 jQuery(中篇)

&#x1f341;【JavaWeb】第五章 jQuery&#xff08;上篇&#xff09; 文章目录9、内容过滤选择器10、属性过滤选择器11、表单过滤器12、元素的筛选13、jQuery属性操作之html()、text()、val()方法14、jQuery属性操作之attr()和prop()9、内容过滤选择器 1&#xff09;&#xf…

web大作业 静态网页 HTML+CSS+JavaScript橙色的时尚服装购物商城

常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他等网页设计题目, A…

(十)Java算法:归并排序(详细图解)

目录一、前言1.1、概念1.2、算法原理二、maven依赖三、流程解析3.1、整体流程图3.2、合并流程图四、编码实现一、前言 1.1、概念 归并排序&#xff1a;是建立在归并操作上的一种有效的排序算法。该算法是采用分治法&#xff08;Divide and Conquer&#xff09;的一个非常典型的…