微服务CI/CD实践(四)Jenkins部署及环境配置

微服务CI/CD实践系列:
 
微服务CI/CD实践(一)环境准备及虚拟机创建
微服务CI/CD实践(二)服务器先决准备
微服务CI/CD实践(三)gitlab部署及nexus3部署
微服务CI/CD实践(四)Jenkins部署及环境配置
微服务CI/CD实践(五)Jenkins + Dokcer 部署微服务后端项目
微服务CI/CD实践(六)Jenkins + Dokcer 部署微服务前端VUE项目
微服务CI/CD实践(七)Minio服务器部署及应用

文章目录

  • 一、服务器环境配置
    • 1.1 软件先决配置
    • 1.2 防火墙配置
  • 二、Jenkins安装配置
    • 2.1 安装Jenkins
    • 2.2 配置Jenkins
      • 2.2.1 升级站点源
      • 2.2.3 插件管理
      • 2.2.3 用户管理
      • 2.2.4 全局系统配置
      • 2.2.5 全局工具配置
      • 2.2.6 凭据配置
        • 2.2.6.1 配置gitlab凭据
        • 2.2.6.2 配置ssh sit站点凭据
        • 2.2.6.2 配置ssh server SSH 凭证凭据
    • 2.3 Jenkins服务器运行分析及内存优化
      • 2.3.1 查看服务器运行情况
      • 2.3.2 Jenkins优化
        • 2.3.2.1 Jenkins内存优化
        • 2.3.2.2 Jenkins磁盘优化
  • 三、Server服务器配置
    • 3.1 docker网卡配置
      • 3.1.1 使用桥接模式部署docker镜像
    • 3.2 防火墙配置
    • 3.3 ssh server配置
    • 3.4 部署及备份目录准备

Jenkins是一个可持续集成、持续交互、持续部署的自动化工具。Jenkins拥有如下特点:

  • 友好完善的操作界面,简单学习、简单配置,方便开发者快速上手使用
  • 活跃的社区、开源且拥有众多的plugins
  • 丰富的集成方式,可与gitlab-runner、k8s、argo、rancher以及公有云厂商等完美集成
  • 自动化
  • 支持市面主流操作系统以及多种安装方式,包括war包安装、yum安装、docker安装等

Jenkins成为众多中小型团队实施CI/CD可持续化项目交付流程的首选工具。下面开始jenkins的安装部署流程。

一、服务器环境配置

1.1 软件先决配置

使用war包安装,Jenkins不同版本对于JDK版本依赖均不相同,具体参考官网版本说明

  • JDK,我们使用Jenkins 2.470版本安装,该版本最低支持JDK17。
  • Maven,Java后端服务打包工具,Maven3.8.1
  • node,vue项目打包工具,node 18
  • docker,容器构建工具
  • git,远程拉取代码工具
    上述工具的安装参考微服务CI/CD实践(二)服务器先决准备

1.2 防火墙配置

需要开启Jenkins运行端口,以便浏览器可以远程访问jenkins控制台。

# 启动并启用firewalld
sudo systemctl start firewalld
sudo systemctl enable firewalld

# 关闭防火墙
sudo systemctl stop firewalld
 
# 放行TCP的80端口
sudo firewall-cmd --permanent --add-port=80/tcp
 
# 重新载入firewall规则以应用更改
sudo firewall-cmd --reload

# 查看防火墙状态
sudo firewall-cmd --state

二、Jenkins安装配置

2.1 安装Jenkins

step1 下载安装包
本地下载Jenkins 2.470.war并上传到服务器。
step2 部署
使用java命令行方式运行

nohup java -Djava.awt.headless=true -server -Xms1024m -Xmx2048m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -jar jenkins.war &

解释
在JDK17中永久代(PermGen space)已被元空间(Metaspace)所取代。因此,使用 -XX:PermSize-XX:MaxPermSize 参数已不再适用。
nohup 后台方式运行命令并将日志输出到nohup.out
-Djava.awt.headless=true: 设置系统属性,告诉 JVM 运行在无头模式下。
-server: 使用 server 类型的 JVM,适用于长时间运行的应用程序。
-Xms1024m: 设置初始堆内存大小为 1024MB。
-Xmx2048m: 设置最大堆内存大小为 2048MB。
-XX:MetaspaceSize=256m: 设置元空间初始大小为 256MB。
-XX:MaxMetaspaceSize=512m: 设置元空间最大大小为 512MB。

# 验证运行结果
[root@k8s-rancher-master /]# netstat -lnp|grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      12448/java 

注意事项:

  • 确保你的系统有足够的内存来支持这些设置。
  • 如果 Jenkins 启动后无法正常工作,检查日志文件以确定是否有内存相关的错误。
  • 如果使用 Docker 容器启动 Jenkins,确保容器的内存限制足够大以容纳这些设置。

安装完成后访问控制台进行Jenkins初始化。
step1 浏览器访问[服务器ip]:8080,进入Jenkins初始配置界面:
初始页面
根据页面提示,管理员密码设置在【/home/hka/.jenkins/secrets/initialAdminPassword】,使用cat命令查看:

[root@k8s-rancher-master /]# cat ./home/hka/.jenkins/secrets/initialAdminPassword
1154171ff706467596c01c8118df1819

step2.将密码粘贴到页面上,解锁Jenkins,并进入插件配置页面

点击【选择插件来安装】,进入插件选择页面(这里无需选择推荐插件,因为过多无用插件会对服务器本身带来压力,这里仅需要选择安装构建需要的插件
在这里插入图片描述

2.2 配置Jenkins

2.2.1 升级站点源

左侧菜单树-》系统管理—》插件管理—》Advanced settings

http://updates.jenkins.io/update-center.json
或
http://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

在这里插入图片描述

2.2.3 插件管理

左侧菜单树-》系统管理—》插件管理—》可下载镜像(available plugins)

#需要下载的插件
Localization: Chinese (Simplified)
Publish Over SSH
Git client
Git Parameter
SSH plugin
Pipeline
NodeJS
SSH server
Workspace Cleanup Plugin
Jenkins List Git Branches

# jenkins Pipeline  withMaven 构建依赖插件
Maven Integration Plugin
Pipeline Maven Integration Plugin
Maven Release Plugin
Maven Dependency Plugin

其他的插件在实际构建和部署环节可以根据构建需求进行添加。

2.2.3 用户管理

左侧菜单树-》系统管理—》用户管理
在这里插入图片描述
添加jenkins用户

2.2.4 全局系统配置

左侧菜单树-》系统管理—》全局系统配置
step1 maven项目配置
在这里插入图片描述
配置maven_opts为服务器安装地址

step2 全局环境变量配置
在这里插入图片描述
添加 JAVA_TOOL_OPTIONS -Dfile.encoding=UTF-8 配置,有效解决Jenkins在构建过程遇到的中文乱码问题。
step3 SSH remote hosts
在这里插入图片描述
jenkins需要远程连接的服务器配置

step4 SSH Servers
在这里插入图片描述
SSH Servers,sshPublisher流水任务需要的配置,包括上传文件的默认地址,流水线构建任务上传文件和执行shell命令必须

2.2.5 全局工具配置

左侧菜单树-》系统管理—》全局工具配置
Maven配置
在这里插入图片描述
配置maven,使用服务器本地maven,后续流水线构建会通过name引用当前maven
nodejs配置
在这里插入图片描述
配置nodejs,使用服务器本地nodejs,后续流水线构建vue项目会通过name引用当前nodejs

JDK配置
在这里插入图片描述
配置JDK,使用服务器本地JDK,后续流水线构建Java项目会通过name引用当前JDK

2.2.6 凭据配置

登录 Jenkins。
导航到 Manage Jenkins -> Manage Credentials -> System -> Global credentials.

2.2.6.1 配置gitlab凭据

配置gitlab用户名密码用于拉取代码:

  • 创建一个新的凭证,选择 Username with password 类型。
  • 输入私有仓库的用户名和密码。
  • 保存凭证,并记下凭证的 ID。
    在这里插入图片描述
2.2.6.2 配置ssh sit站点凭据

配置ssh sit站点用户名密码用于远程执行shell:

  • 创建一个新的凭证,选择 Username with password 类型。
  • 输入ssh sit站点的用户名和密码。
  • 保存凭证,并记下凭证的 ID。
    在这里插入图片描述
2.2.6.2 配置ssh server SSH 凭证凭据

配置ssh server SSH 凭证 用于远程执行shell和上传文件
step1 创建ssh server 站点的私钥文本
生成带有 Passphrase 的 SSH 密钥对:

  • 使用 ssh-keygen 命令来生成新的 SSH 密钥对,并在提示时输入密码短语。
  • 如果您已经有了一个没有密码短语的私钥,可以使用 ssh-keygen 重新设置密码短语。
    使用 Passphrase:
  • 当您使用私钥文件时,需要输入密码短语。
  • 您可以使用 ssh-agent 和 ssh-add 来暂时存储密码短语,以便在一段时间内无需重复输入。
# 生成带有 Passphrase 的 SSH 密钥对
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

# 查看私钥文本并复制私钥文本
cat ~/.ssh/id_rsa

step2 创建凭证

  • 创建一个新的凭证,选择 SSH Username with private key 类型。
  • 输入上一步复制的ssh server 站点的私钥文本。
  • 保存凭证,并记下凭证的 ID。
    在这里插入图片描述

2.3 Jenkins服务器运行分析及内存优化

2.3.1 查看服务器运行情况

top命令查看服务器运行时状况
在这里插入图片描述
free命令查看服务器内存分配

[root@k8s-rancher-master /]# free -m
              total        used        free      shared  buff/cache   available
Mem:           7820        2294        1905           8        3620        5218
Swap:             0           0   

du命令查看指定文件目录下磁盘使用情况

[root@k8s-rancher-master /]# cd /root/.jenkins/workspace
[root@k8s-rancher-master workspace]# du -sh * | sort -hr
921M	hka-web-01
731M	hka-web
314M	base-common-pipeline
293M	projects-pipeline
286M	task
254M	uaa-center-pipeline
190M	gateway-pipeline
177M	base-common
151M	gateway
96M	projects-pipeline@2

df命令查看磁盘使用情况

[root@k8s-rancher-master workspace]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 3.9G     0  3.9G   0% /dev
tmpfs                    3.9G     0  3.9G   0% /dev/shm
tmpfs                    3.9G  9.0M  3.9G   1% /run
tmpfs                    3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/mapper/centos-root   50G   28G   23G  55% /
/dev/sda1               1014M  154M  861M  16% /boot
/dev/mapper/centos-home  142G  147M  141G   1% /home
tmpfs                    783M     0  783M   0% /run/user/1000
tmpfs                    783M     0  783M   0% /run/user/0

slabtop
显示实时内核slab缓存信息,给出slab使用情况和汇总

# 按cache大小倒排
slabtop -s c 

2.3.2 Jenkins优化

2.3.2.1 Jenkins内存优化

手工释放内存
当内存占用过高时,可以执行以下命令手工释放内存

# 用sync来确保文件系统的完整性
# sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-Node、已延迟的块 I/O 和读写映射文件
sync
# 清除pagecache
echo 1 > /proc/sys/vm/drop_caches
# 清除回收slab分配器中的对象(包括目录项缓存和inode缓存)
echo 2 > /proc/sys/vm/drop_caches
# 清除pagecache和slab分配器中的缓存对象
echo 3 > /proc/sys/vm/drop_caches

调整Jenkins JVM内存分配

step1 根据服务器配置合理调整Jenkins内存分配

在JDK17中永久代(PermGen space)已被元空间(Metaspace)所取代。因此,使用 -XX:PermSize-XX:MaxPermSize 参数已不再适用。
nohup 后台方式运行命令并将日志输出到nohup.out
-Djava.awt.headless=true: 设置系统属性,告诉 JVM 运行在无头模式下。
-server: 使用 server 类型的 JVM,适用于长时间运行的应用程序。
-Xms1024m: 设置初始堆内存大小为 1024MB。
-Xmx2048m: 设置最大堆内存大小为 2048MB。
-XX:MetaspaceSize=256m: 设置元空间初始大小为 256MB。
-XX:MaxMetaspaceSize=512m: 设置元空间最大大小为 512MB。

step2 结束 Jenkins进程根据调整后的命令重新运行Jenkins

# 立即关闭Jenkins
java -jar jenkins-cli.jar -s http://192.168.1.105:8080/ shutdown

# 运行调整内存配置后的命令重新启动Jenkins
nohup java -Djava.awt.headless=true -server -Xms1024m -Xmx2048m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -jar jenkins.war &
2.3.2.2 Jenkins磁盘优化

Jenkins磁盘占用主要是项目构建的磁盘占用,可以通过如下方式达到磁盘空间释放:
step1 调整项目构建配置
设置构建记录的保留策略,减少历史构建记录占用的空间,在项目配置中勾选丢弃旧的构建选项
根据项目实际情况调整历史构建存储策略
在这里插入图片描述
step2 使用"Disk Usage" 插件
安装"Disk Usage" 插件,配置全局历史构建存储策略,设置该插件的步骤:

  • 在 Jenkins 中安装 “Disk Usage” 插件。
  • 在 Jenkins 配置中,找到 “Disk Usage” 相关的设置。
  • 配置磁盘空间阈值,当空间不足时,系统将执行自动清理。
  • 配置要保留的构建记录的数量。
  • 配置要保留的每个工程的构建记录数量。
// 假设你已经安装了 Disk Usage 插件
 
diskUsage {
    // 设置 Jenkins 实例的总磁盘配额
    totalBuildDiskUsageLimit '10GB'
 
    // 设置全局保留的构建数量
    numberOfDaysToKeepBuilds '30'
 
    // 设置每个工程保留的构建数量
    numberOfBuildsToKeepPerJob '5'
 
    // 如果启用,将保留最新和最旧的构建
    useBuildsInDaysToKeep 'true'
 
    // 如果磁盘空间不足,则在构建前进行检查
    checkInSchedule '* * * * *'
 
    // 如果启用,将在计划的时间清理构建记录
    performScheduleCheck 'true'
}

step3 使用定时脚本清理磁盘空间

# 新增脚本Jenkins_disk_clenup.sh
#!/bin/bash
 
#jenkins 构建项目目录
DIR="/root/.jenkins/jobs"
 
#保留天数
OLDEST_DATE=$(date -d "$(date +%Y-%m-%d) -7 days" +%s)
 
#添加项目 "Product" 和 "Dev"
for DIRECTORY in $(find "$DIR" -maxdepth 1 -type d -name "task" -o -name "gateway-pipeline" | sort); do
  if [ -d "$DIRECTORY/builds" ]; then
    echo "Processing $DIRECTORY/builds directory..."
    find "$DIRECTORY/builds" -maxdepth 1 -type d -name "[0-9]*" | while read LINE
    do
      MOD_DATE=$(stat -c %Y "$LINE")
      if [[ $MOD_DATE -lt $OLDEST_DATE ]]; then
 
        echo "Deleting old directory ${LINE}"
        ls -ld ${LINE}
        rm -rf "${LINE}"
      fi
    done
  else
    echo "Skipping $DIRECTORY/builds directory..."
  fi
done

# 设置脚本可执行权限
sudo chmod +x  Jenkins_disk_clenup.sh

# 设置定时任务
#crontab -e
0 23 * * * /root/.jenkins/jobs/Jenkins_disk_clenup.sh > /dev/null 2>&1 &

三、Server服务器配置

下图为基于Jenkins的持续交付的简单流程
在这里插入图片描述
要实现Jenkins自动化部署应用到Server服务器,Server服务器应该进行如下配置:

  1. 安装docker及网卡配置
  2. 防火墙配置
  3. ssh server配置
  4. 部署及备份目录准备

3.1 docker网卡配置

docker安装及加速源配置参考微服务CI/CD实践(二)服务器先决准备,这里主要说明下docker网络配置。
docker安装后会自动创建3种网络:bridge、host、none

docker network ls    #使用以下命令查看
cd harbor/
docker-compose down     ##停止容器
docker network ls     ##docker的原生网络有三个
ip addr     #docker安装后有一个docker0的桥接口

默认运行docker会使用Docker原生网络,此时通过宿主机的ip+应用的端口是无法正常访问应用。

3.1.1 使用桥接模式部署docker镜像

step1 创建网桥

#创建网桥指定网段,不能和本机现有网段冲突
docker network create --subnet 192.169.1.0/24 --gateway 192.169.1.1 my-network

# 查询网络
[root@k8s-rancher-node02 ~]# docker network ls 
NETWORK ID     NAME         DRIVER    SCOPE
a51a3fdf5507   bridge       bridge    local
08184c970fdb   host         host      local
6586a3619099   my-network   bridge    local
e93acf5c5cda   none         null      local 
# 查看网络详细配置
[root@k8s-rancher-node02 docker-sh]# docker network inspect  my-network
[
    {
        "Name": "my-network",
        "Id": "6586a36190999c86a70133e9521d3a86ec352abfe08bf5ddd4913b0600d23d15",
        "Created": "2024-07-30T10:54:03.821607311+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "192.169.1.0/24",
                    "Gateway": "192.169.1.1"
                }
            ]
        },
        // 省略...

step2 使用网桥模式运行docker

# 运行时指定网络
docker run -d --name demo1 --network my-network demo
# 查看桥接信息
[root@k8s-rancher-node02 docker-sh]# brctl show
bridge name	bridge id		STP enabled	interfaces
br-6586a3619099		8000.0242892a3249	no		veth1faec54
							veth65db6be
							veth825e30f
							veth879b307
							veth921c0ff
							vethe34ab14
docker0		8000.02425f0e36f9	no		veth6fa47df

# 查看容器网络
docker inspect demo
// 省略...
 "Networks": {
                "my-network": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "MacAddress": "02:42:c0:a9:01:02",
                    "NetworkID": "6586a36190999c86a70133e9521d3a86ec352abfe08bf5ddd4913b0600d23d15",
                    "EndpointID": "1c3d34694592514bbd76b4639cd37551c8ab6cb5532725ca38f060ce79ee03bd",
                    "Gateway": "192.169.1.1",
                    "IPAddress": "192.169.1.2",
                    "IPPrefixLen": 24,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "DriverOpts": null,
                    "DNSNames": [
                        "gateway-server",
                        "196e455ccff9"
                    ]
                }
            }
        }
// 省略...

看到容器的网关为192.169.1.1

3.2 防火墙配置

需要开启ssh端口、应用的端口

# 启动并启用firewalld
sudo systemctl start firewalld
sudo systemctl enable firewalld

# 关闭防火墙
sudo systemctl stop firewalld
 
# 放行TCP的80端口
sudo firewall-cmd --permanent --add-port=22/tcp
sudo firewall-cmd --permanent --add-port=其他应用端口/tcp
 
# 重新载入firewall规则以应用更改
sudo firewall-cmd --reload

# 查看防火墙状态
sudo firewall-cmd --state

3.3 ssh server配置

centos操作系统默认是安装的 SSH client、SSH server,这里需要检查SSH client、SSH server是否可用

# 检查openssh包是否已安装
[root@k8s-rancher-node02 docker-sh]# rpm -qa | grep openssh
openssh-clients-7.4p1-21.el7.x86_64
openssh-7.4p1-21.el7.x86_64
openssh-server-7.4p1-21.el7.x86_64

# 如果已安装,检查SSH服务是否正在运行
[root@k8s-rancher-node02 docker-sh]# systemctl status sshd
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since 一 2024-08-19 17:59:50 CST; 1 weeks 2 days ago
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 1379 (sshd)
    Tasks: 1
   Memory: 6.4M
   CGroup: /system.slice/sshd.service
           └─1379 /usr/sbin/sshd -D
# 启动ssh
systemctl start sshd
# 设置在系统启动时自动运行
systemctl enable sshd

3.4 部署及备份目录准备

# 创建目录
mkdir -p /opt/tmp /opt/bak /usr/docker-sh /data/container/nginx/www /data/container/nginx/logs /data/container/app/logs /data/container/nginx/etc
# 赋予读写权限
chmod -R 777 /opt/tmp /opt/bak /usr/docker-sh /data/container/nginx/www /data/container/nginx/logs  /data/container/app/logs /data/container/nginx/etc

解释:

  • 新建 /opt/tmp 目录,用于Jenkins打包后,通过 Publish Over SSH插件将包传输到服务器的临时目录(如果前面创建过,这里无需再创建)。
  • 新建 /opt/bak 目录,用于存储所有部署过的包备份,方便后续版本回滚。此目录可能会占用很大空间,所以需要选择一个磁盘空间大的挂载目录(如果前面创建过,这里无需再创建)。
  • 新建 /usr/docker-sh目录,用于Jenkins将包传输完成之后,执行安装、备份操作的相关命令脚本(如果前面创建过,这里无需再创建)。
  • 新建 /data/container/nginx/www,映射Nginx容器内的/var/www目录。
  • 新建 /data/container/nginx/logs,映射Nginx容器内的/var/log/nginx目录,存放nginx运行日志。
  • 新建 /data/container/app/logs,映射Nginx容器内的/logs目录,存放app运行日志。
  • 新建 /data/container/nginx/etc,映射Nginx容器内的/etc/nginx目录
  • 新建 /data/container/nginx/etc/nginx.conf,映射Nginx容器内的/etc/nginx/nginx.conf配置文件

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

英伟达AI超级计算机SuperPod:H100→GH200→GB200

英伟达的 DGX SuperPOD 是一台完整的数据中心级 AI 超级计算机,采用模块化的设计,支持不同规模大小的设计。每台超级计算机都在出厂前完成了搭建、布线和测试,从而大大加快了在用户数据中心的部署速度 。 NVIDIA DGX SuperPOD是下一代数据中心…

DML、DQL、DCL的基础介绍

1.DML、DQL、DCL 1.1DML-介绍 DML英文全称Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增删改操作 添加数据(INSERT)修改数据(UPDATE)删除数据(DEL…

echarts环形图

let dataValue[{value: 30,name: 桥梁,percent: 0.25,color: rgba(248,95,94,1),radius: [75%, 80%],center: [22%, 50%],},{value: 15,name: 隧道,percent: 0.25,color: rgba(243,185,71,1),radius: [65%, 70%],center: [22%, 50%],},{value: 18,name: 路基,percent: 0.25,col…

基于Android Studio的行程记录APK开发指南(三)---界面设计及两种方法获取用户位置

前言 本系列教程我们来看看如何使用Android Studio去开发一个APK用于用户的实时行程记录 第一期:基于Android Studio的用户行程记录APK开发指南(一):项目基础配置与速通Kotlin-CSDN博客第二期:基于Android Studio的行程记录APK开发指南(二):…

设计模式学习-简单的命令模式例子

上一章节介绍过了命令模式,这一篇文章就简单的做一个小案例来巩固学习 搭建场景 简单的搭建一个场景就行 ,随便准备一个物体放在场景中位置Reset一下即可。 代码编写 定义接口(或者抽象类)ICommand 用来规范Command的行为。注意…

Linux查看jar包错误日志及持久化运行jar包

一、查看jar包运行信息命令:ps -ef | grep java 如图,给出了所部署jar包的环境变量,服务名称,服务端口信息。 这样便能得到部署的jar包是否在服务器成功运行及基本信息。 二、查看日志 启动信息无误,查看日志是否有报错…

SprinBoot+Vue在线商城微信小程序的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue3.6 uniapp代码 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平…

基于ssm+vue+uniapp的跑腿平台小程序

开发语言:Java框架:ssmuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:M…

SSM非物质文化遗产社区APP---附源码98956

摘 要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存…

使用el-select只能选中最后一项,且options全部是选中状态

经过盘查,发现是key值重复了 把key值换为不同的值就好了,很细小的问题,但是很容易疏忽.

Android Studio(3) 使用 Kotlin DSL和 Gradle 8.7 打包远程库到 AAR 的自定义方法

背景介绍 在 Gradle 7.3 及更早版本中,通常使用 com.kezong.fat-aar 插件来打包远程库到 AAR 中,随着 Gradle 的不断升级,尤其是到 8.7 版本后,Kotlin DSL开发逐渐成为主流,fat-aar 社区没有更新,插件的兼容性问题逐渐显现。我探索一种新的自定义方法,能够在 Kotlin DS…

C#归并排序算法

前言 归并排序是一种常见的排序算法,它采用分治法的思想,在排序过程中不断将待排序序列分割成更小的子序列,直到每个子序列中只剩下一个元素,然后将这些子序列两两合并并排序,最终得到一个有序的序列。 归并排序实现原…

第T9周:使用TensorFlow实现猫狗识别2

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 文章目录 一、前期工作1.设置GPU(如果使用的是CPU可以忽略这步)2. 导入数据 二、数据预处理1、加载数据2、再次检查数据3、可视化数据3…

【C++题解】1053 - 求100+97+……+4+1的值。

欢迎关注本专栏《C从零基础到信奥赛入门级(CSP-J)》 问题:1053 - 求10097……41的值。 类型:简单循环 题目描述: 求 10097⋯41 的值。 输入: 无。 输出: 输出一行,即求到的和…

Linux--网络层 IP协议

目录 0.往期文章 1.IP基本概念 2. IP协议报头格式 3.网段划分 两种网段划分的方式 为什么要进行网段划分 4.特殊的IP 地址 5.IP 地址的数量限制 6.私有 IP 地址和公网 IP 地址*** NAT技术 认识公网 运营商扮演的角色 7.路由 8.16位标识,3为标志和13位…

加速自动驾驶模型迭代,数据存算一体是关键

自动驾驶的每一个业务阶段都会涉及到 AI 深度学习算法和算力的参与,机器视觉,深度学习,传感器技术等均在自动驾驶领域发挥着重要的作用。自动驾驶系统不断迭代的前提是算法的持续优化,目前,自动驾驶发展的瓶颈主要在于…

解决ubuntu22.04无法识别CH340/CH341和vscode espidf插件无法选择串口设备节点问题

文章目录 解决ubuntu22.04无法识别CH340/CH341和vscode espidf插件无法选择串口设备节点问题不识别CH340/CH341报错解决办法升级驱动编译安装 卸载brltty程序 vscode espidf插件无法选择串口设备节点问题解决办法编译安装 解决ubuntu22.04无法识别CH340/CH341和vscode espidf插…

坐标大连!提交EI、Scopus、知网检索!第五届经济管理与大数据应用国际学术会议(ICEMBDA 2024)

合作ACM出版-EI稳检索 高录用,快见刊! 管理、经济、金融、计算机相关主题均可投稿 目前仍有口头汇报名额,如有需要请尽快报名 重要信息 会议官网:www.icembda.org 会议时间:2024年10月25日-27日 会议地点&#x…

【Python系列】方法返回2个值

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

spring security 入门基础,表单认证web页面跳转

一、导入所需依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.2</version></parent><!-- web 支持 --><dependency><groupId>…