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

news2024/11/16 23:33:06

微服务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配置文件

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

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

相关文章

ClickHouse的安装教程

ClickHouse的安装教程 文章目录 ClickHouse的安装教程写在前面准备工作关闭防火墙CentOS 取消打开文件数限制安装依赖CentOS 取消 SELINUX 单机安装在 **node01** 的/opt/software 下创建 clickhouse 目录将下载的文件上传到 node01 的 /opt/software/clickhouse 目录下将安装文…

MFC工控项目实例之九选择下拉菜单主界面文本框显示菜单名

承接专栏《MFC工控项目实例之八选择下拉菜单添加打钩图标》 1、在主界面添加一个组合框和一个静态文本框。 2、在SEAL_PRESSUREDlg.cpp文件中添加代码 BOOL CSEAL_PRESSUREDlg::OnInitDialog() {CDialog::OnInitDialog(); ... GetDlgItem(IDC_STATIC_TYPNAME)->SetFont(&a…

通用大模型应用研究重点六:AgentOS

智能体:一个能够自主感知环境、做出决策并执行行动的系统。具备规划思考能力、记忆能力以及使用工具函数的能力,能自主完成给定任务的计算机程序。 智能体的关键组成部分包括: 规划(Planning):智能体能够将…

(二)、软硬件全开源智能手表,可全面高精度采集生命体征数据,进行健康检测。(HealthyPi Move)

HealthyPi Move是一款开放式硬件设备,可让您高精度地跟踪所有生命体征。它不仅仅是另一款带有心率监测器的智能手表,它还是手腕上的完整生命体征监测和记录设备,可以测量心电图(ECG)、光电容积脉搏波 (PPG)、SpO₂、血压(基于手指)、EDA/GSR、…

Clobotics 计算机视觉场景存储实践:多云架构、 POSIX 全兼容、低运维的统一存储

Clobotics 是一家将计算机视觉和机器学习技术应用于风电以及零售行业的企业。在风电行业,Clobotics 利用无人机对风力发电机叶片进行检查,显著降低了对人工作业的依赖。在零售领域,公司通过分析捕获的包装商品图像来提供基于实时数据的洞察&a…

Java-数据结构-ArrayLis与线性表 (๑╹◡╹)ノ“““

目录: 一、List的简单的介绍: 二、线性表: 三、顺序表: 1、基本代码: 2、操作代码: display()方法: add(int data)方法: add(int pos,int data)方法: contains(i…

大模型企业应用落地系列》基于大模型的对话式推荐系统》对话推荐系统技术架构

注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】 文章目录 大模型企业应用落地系列全貌基于大模型的对话式推荐系统》技术架…

SpringWeb后端开发-登录认证

Author:Dawn_T17🥥 目录 登录功能 基础登录 登录校验 一、会话技术 1.基于 Cookie 和 Session 的传统会话技术(传统) 2.基于 Token 的会话技术(如 JWT)(主流)​ JWT 二、过滤器(Filter) 具体代…

《JavaEE进阶》----1.<JavaEE进阶可以学到什么>

本篇博客会讲到 一、JavaEE进阶学习内容: 1.框架的学习:Spring、Spring Boot、Spring MVC、MyBatis 2.大项目实践 3.源码阅读 二、JavaEE简介 B/S架构web开发流程 web前端开发(了解) web后端开发(重点) 三、…

properties文件提示未引用

问题描述 以前用的好好的项目,今天突然打开就发现idea不识别spring配置信息显示未引用,如果config代码中引入的配置却可以高亮显示,然后输入spring相关的配置,文件是没有提示的。经过研究发现是spring相关的插件被关闭了。效果如下 解决方法 启用三个插件spring Boot,Sp…

Idea发布springboot项目无法识别到webapp下面的静态资源

问题: Idea发布springboot项目无法识别到webapp下面的静态资源 访问报错404 解决办法: 修改之后重新构建,访问成功

Web3开发与安全:6个月高效学习路径

学习计划概览 总时长:6个月每周学习时间:10-15小时目标:掌握 Solidity 智能合约开发,并具备基本的智能合约安全审计能力。 第一阶段:基础准备(第1-2周) 1. 区块链基础(1周&#x…

workman和GateWay学习笔记

前言 workman支持Udp GateWay是基于workman的二次封装,更适合长链接场景 windows安装workman composer create-project workerman/webman windows运行workman cd webman php windows.php windows访问 http://ip地址:8787 将workman引入thinkphp框架理念

4000字三合一!Stata、SPSS、MATLAB实现多元线性回归详解!

参加数学建模的小伙伴要注意了:多元线性回归几乎是所有分析方式里面最核心、最常用、最全面的模型,博主本科大致参加了10次数模,还有一次正大杯市场调研赛,其中获得拿得出手的奖有9次,有5次都用到了多元线性回归——至…

用Python在PDF文档中创建动作

PDF格式因其跨平台兼容性和丰富的功能集而成为许多行业中的首选文件格式。其中,PDF中的动作(Action) 功能尤为突出,它允许开发者嵌入交互式元素,如链接、按钮或是更复杂的脚本,从而显著提升文档的互动性和功…

c++vscode多文件实现通讯录管理系统

cvscode多文件实现通讯录管理系统 作为c入门级别的实战项目,此通讯管理系统项目不仅仅是对c入门阶段学习成果的检验,也是对c基础知识的回顾,体会c在实战制作中的思路,是入门c单文件实现通讯录系统的改进 一、多文件通讯录管理系统简介 系统需…

JAVA—多线程

关于线程以及多线程的学习,包括创建和常用方法还有解决线程安全的措施,最后学习线程池和了解并发和并行,对于悲观锁和乐观锁的部分没有学习 目录 1.线程概述 2.多线程的创建 (1)继承Thread类 (2&#…

【GPT】基于GPT_API_free做一个自己的gpt

最终效果 项目背景 秉持能免费就绝不花钱的原则,基于github项目GPT_API_free获取的gpt apikey。下面是简单的代码 import json import os import requestsopenai_url os.getenv("openaiproxy") openai_apikey os.getenv("openaikey") # 初始…

[图解]SysML和EA建模住宅安全系统-活动作为块

1 00:00:00,210 --> 00:00:04,360 下一个步骤是识别潜在的失效 2 00:00:06,850 --> 00:00:11,150 这里它是用一个块定义图来表达的 3 00:00:12,150 --> 00:00:16,790 图17.21,失效模式识别和因果依赖 4 00:00:19,110 --> 00:00:22,400 但是这个块定义…

【AutoX.js】定时器 Timers

文章目录 原文:https://blog.c12th.cn/archives/36.html定时器 Timers笔记实例 最后 原文:https://blog.c12th.cn/archives/36.html 定时器 Timers 笔记 JavaScript Date 参考手册 时间戳 //当前时间戳 log(Math.round(new Date() / 1000));当前星期 …