Jenkins-CICD项目自动化部署

news/2025/11/2 20:52:40/文章来源:https://www.cnblogs.com/xiaopixiong/p/19185412

1.环境准备

主机名 IP 配置
dev 192.168.233.146 2G C1
project_master 192.168.233.154 3G,2C1
project_slave 192.168.233.155 3G,2C1
auto_deployment 192.168.233.156 5G,2C1

2.初始化环境

四台都做

#1.修改主机名
hostnamectl  set-hostname  主机名
#2.修改host文件
192.168.233.146  dev
192.168.233.154 project_master
192.168.233.155 project_slave
192.168.233.156 auto_deployment
#3.关闭firewalld
systemctl disable firewalld --now
#4.关闭selinux
sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
setenforce 0
#5.配置yum源
rm -rf /etc/yum.repos.d/*
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
yum makecache 
#6.配置扩展源并开启所有扩展源
rpm -e epel-release
yum install epel-release –y
yum install yum-utils –y
yum-config-manager --enable epel*
#7.安装vim
yum  install  vim -y

3.安装CICD所需软件

[!NOTE]

软件版本:

jdk17

redis-6.2.6

mysql5.7

maven3.9.11

3.1 dev主机

yum install git -y
git config --global user.name "jesion-wang"
git config --global user.email "**@qq.com"

3.2 project_master&project_slave

  1. jdk

    tar -xf jdk-17.0.12_linux-x64_bin.tar.gz -C /usr/local
    vim /etc/profile#配置环境变量
    export JAVA_HOME=/usr/local/jdk-17.0.12
    export PATH=$PATH:$JAVA_HOME/bin
    source /etc/profile#测试
    java -version
    
  2. redis

    wget http://download.redis.io/releases/redis-6.2.6.tar.gz
    tar -zxvf redis-6.2.6.tar.gz -C /usr/local/
    cd /usr/local/redis-6.2.6
    yum -y install gcc
    make && make install#修改配置文件
    vim redis.conf
    bind 0.0.0.0
    protected-mode no
    daemonize yes#启动redis
    cd /usr/local/bin
    ./redis-server /usr/local/redis-6.2.6/redis.conf &
    #停止redis
    ps aux | grep redis / kill 进程PID
    
  3. mysql

    #1.安装 wget下载工具
    yum -y install wget
    #2.下载 mysql 官方 yum 源安装包
    wget https://repo.mysql.com/mysql57-community-release-el7-11.noarch.rpm 
    #3.安装 mysql 官方 yum 源
    yum -y localinstall mysql57-community-release-el7-11.noarch.rpm
    #4.配置yum源秘钥
    rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
    #5.检查启动版本
    yum repolist enabled | grep mysql
    #6.安装服务端,客户端
    yum -y install mysql-community-server mysql
    #7.设置开机启动机启动mysql服务端
    systemctl enable mysqld --now
    #8.检查mysql的安装
    ls /var/lib/mysql
    #9.获取首次登录密码
    grep 'password' /var/log/mysqld.log
    #10.登录mysql数据库
    mysql -uroot -p
    #11.修改 mysql 数据库密码(密码必须符合复杂性要求,包含字母大小写,数字,特殊符号,长度不少于8位)
    alter user 'root'@'localhost' identified by 'Aa123456=';
    

3.3 auto_deployment

  1. jdk

    tar -xf jdk-17.0.12_linux-x64_bin.tar.gz -C /usr/local
    vim /etc/profile#配置环境变量
    export JAVA_HOME=/usr/local/jdk-17.0.12
    export PATH=$PATH:$JAVA_HOME/bin
    source /etc/profile#测试
    java -version
    
  2. Jenkins

    # 1.安装wget
    yum install wget -y# 2.下载Jenkins的镜像源文件
    wget https://pkg.jenkins.io/redhat-stable/jenkins.repo -O /etc/yum.repos.d/jenkins.repo# 3.安装Jenkins
    rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key 
    yum -y install jenkins               # 4.修改配置文件,对jdk的引用vim /usr/lib/systemd/system/jenkins.service# 注意这里配置实际的jdk路径
    Environment="JAVA_HOME=/usr/local/jdk-17.0.12"# 注意这里配置实际的java可执行路径
    Environment="JENKINS_JAVA_CMD=/usr/local/jdk-17.0.12/bin/java"# 需要安装一个字体,不然会启动失败
    yum install fontconfig  -y# 5.启动Jenkins并设置为开机自启动
    systemctl daemon-reload
    systemctl enable jenkins --now# 第六步:访问验证
    http://192.168.233.156:8080
    
  3. maven

    tar -xf apache-maven-3.9.11-bin.tar.gz -C /usr/local/
    vim /etc/profile
    export MAVEN_HOME=/usr/local/apache-maven-3.9.11
    export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
    source /etc/profile
    mvn -v#配置镜像仓库
    vim /usr/local/apache-maven-3.9.11/conf/settings.xml
    <mirrors><mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf></mirror>
    </mirrors>
    
  4. git

4.初始化Jenkins

访问安装了jenkins的机器ip:http://192.168.233.156:8080

cat /var/lib/jenkins/secrets/initialAdminPassword 复制密码并粘贴到下图中

image-20251101122200215

选择安装推荐插件,可直接刷新页面跳过

image-20251101131239025

image-20251101143523163

继续,点保存并完成

image-20251101143556213

5.构建自动化部署

5.1 dev主机密钥至gitee

开发人员提交代码到Git仓库有以下两种方式:

  • 账号密码:在上传代码或者拉取代码需要账号密码认证
  • ssh密钥:需要提前配置好公钥私钥

此处,我们选择的是ssh密钥的方式,这样,配置好密钥之后,开发人员提交,拉取代码都不需要进行认证了。

  1. 在dev主机生成密钥对

    ssh-keygen -t rsa -f /root/.ssh/id_rsa -C "dev@vp21.cn" -N ""#-t:指定要创建的密钥类型。可能的值为“dsa”、“ecdsa”、“ecdsa-sk”、“ed25519”、“ed25519-sk”或“rsa”
    #-C:添加注释
    #-f:指定用来保存密钥的文件名#查看密钥,并复制
    cat /root/.ssh/id_rsa.pub
    
  2. 将公钥配置到gitee仓库

    1. 登录gitee,如下进入个人主页后,点击个人设置

      image-20251101145007371

    2. 在左边安全设置中选择ssh公钥

    3. 粘贴第一步复制的公钥至gitee,点击确定即可添加,标题会自动输入

5.2 从若依官网下载项目至dev

https://gitee.com/y_project/RuoYi-Vue

在dev主机执行:

git clone git@gitee.com:y_project/RuoYi-Vue.git

5.3 Jenkins密钥至gitee

ssh-keygen -t rsa -f /root/.ssh/id_rsa -C "jenkins@vp21.cn" -N ""

如上步骤一样,在auto_deployment主机内操作

image-20251101145804584

5.4 jenkins主机的私钥到凭据列表

凭据是jenkins给自己的构建项目授权用的。本项目案例里jenkins是通过ssh免密去找gitee的项目仓库clone或pull项目代码。在前面的配置里已经把jenkins服务器的公钥添加到了gitee仓库上,在jenkins服务器上root用户使用git clone 项目地址都可以成功。但是jenkins服务本身并不允许使用自己的私钥去访问gitee的公钥,给个凭据,让它能做就解决问题了。

总结: 凭据是一种和第三方程序(如gitee,gitlab等)通讯的权限授权。本案例的凭据就是允许使用ssh免密

  1. 登录Jenkins,打开凭据管理页面

    image-20251101150239220

    image-20251101150258238

    image-20251101150314914

    image-20251101150326747

    image-20251101150340578

  2. 添加凭据

    cat /root/.ssh/id_rsa
    #begin到end全部复制
    

    image-20251101150531726

    image-20251101150833925

    image-20251101150852690

5.5 jenkins添加插件

[!NOTE]

安装的插件有:

  • ssh 用于jenkins-project对web-project进行操作
  • git parameter 用于git版本提交进行参数构建
  • gitee
  • maven integration 用于编译

image-20251101151034360

image-20251101151052199

image-20251101151117563

在此分别搜索,ssh、git parameter、maven integration、gitee勾选点安装。等待安装,失败就重新下,实在不行换个网络或者用魔法

image-20251101151332191

5.6 jenkins配置

image-20251101155744026

  1. 工具配置

    1. jdk配置

      image-20251101155922980

    2. git配置

      git默认

    3. Maven配置

      image-20251101160628112

  2. 系统配置

    主要配置ssh插件,用于jenkins操作project_master&project_slave,让project_master&project_slave执行命令

    1. 连接至sever服务器的凭据(使用账号密码)

      如配置jenkins私钥凭据的位置,类型选择Username with password

    2. 配置ssh插件

      回到system设置,滑到最下方。master和slave都要添加进去

      image-20251101161344593

5.7 创建gitee仓库

在gitee主页

image-20251101152108393

image-20251101152511157

5.8 project导入数据库脚本

  1. 将dev机器的若依数据库分发到project_master&project_slave服务器。

    scp /root/RuoYi-Vue/sql/ry_20250522.sql root@project_master:~
    scp /root/RuoYi-Vue/sql/ry_20250522.sql root@project_slave:~
    
  2. 分别project_master&project_slave服务器内导入数据库

    # 登录数据库
    mysql -uroot -pAa123456=
    # 创建woniu_car数据库
    CREATE DATABASE ruoyi CHARACTER SET utf8 COLLATE utf8_bin;
    # 导入数据库文件
    use ruoyi;
    source /root/ry_20250522.sql
    # 退出数据库
    exit
    

5.9 project安装后端所需字体

yum install fontconfig -y

5.10 修改dev若依后端yml配置信息

vim /root/RuoYi-Vue/ruoyi-admin/src/main/resources/application-druid.yml
#==修改主数据库源==
#1.将master中url的ry-vue修改为刚导入的数据库名ruoyi
#2.修改master账号密码vim /root/RuoYi-Vue/ruoyi-admin/src/main/resources/application.yml
#==修改redis==
#找到redis的password,注释掉

5.11 推送项目到gitee仓库

#进入若依项目主文件内
cd	 /root/RuoYi-Vue
# 删除原来的git信息
git remote rm origin
# 关联到gitee的仓库,这个链接在我们刚创建完仓库后,有个快速配置选ssh复制即可
git remote add origin git@gitee.com:wangyexiong/ruoyi-jenkins.git
#commit说明
git commit -m "修改了数据库与redis配置信息"
git commit -a -m "修改了数据库与redis配置信息"
# 提交代码
git push origin master
# 查看标签
git tag
# 创建标签
git tag v4.0
# 将标签推送到远程仓库
git push origin v4.0

6.Jenkins构建任务

[!NOTE]

后端操作:

  1. jenkins获取项目代码
  2. jenkins对项目代码编译,由maven完成
  3. 将编译后的jar包发送到project服务器家目录中
  4. jenkins通过ssh命令启动后端服务

前端操作:

6.1 后端构建

6.1.1 创建任务

image-20251101162111395

image-20251101162135539

6.1.2 配置信息

image-20251101162429100

上面这边这个git出现错误,是因为我们jenkins服务器链接到git仓库需要指纹验证,而此时我们没有指纹验证。而jenkins账户无法登陆,所以我们再autoDe服务器用root账户git clone git@gitee.com:wangyexiong/ruoyi-jenkins.git拉取一下代码,即可生成一个指纹验证文件,此时我们把这个文件复制到jenkins中即可。

image-20251101163509215

#在autoDe服务器操作
cd
git clone git@gitee.com:wangyexiong/ruoyi-jenkins.git
#删除刚拉下来的项目
rm -rf ruoyi-jenkins/
#进入.ssh文件查看会多一个known_hosts文件
cd .ssh
#将这个文件复制到jenkins的.ssh中
cp known_hosts /var/lib/jenkins/.ssh/

将Credentials切换成none再切换回来即可

image-20251101163925295
image-20251101164145847

6.1.3 创建编译打包后的shell命令

image-20251101164318030

先在jenkins服务器中安装sshpass yum install sshpass -y
再分别用jenkins服务器登录到master和slave服务器形成指纹验证,并把指纹验证文件再次复制覆盖到jenkins目录中

ssh project_master
exit
ssh project_slave
exit
cp /root/.ssh/known_hosts /var/lib/jenkins/.ssh/

这边一定要填这个y,不然会覆盖失败

image-20251101175803412

再在图中框内输入shell命令

sshpass -p 'root' scp /var/lib/jenkins/workspace/ruoyi/ruoyi-admin/target/ruoyi-admin.jar root@192.168.233.154:/root/
sshpass -p 'root' scp /var/lib/jenkins/workspace/ruoyi/ruoyi-admin/target/ruoyi-admin.jar root@192.168.233.155:/root/

image-20251101165342493

在上方选项选择后的框内输入远程执行命令来启动项目,如下

cd
ps -ef | grep 'ruoyi-admin.jar' | grep -v grep | awk '{print $2}' | xargs kill -9
source /etc/profile
nohup java -jar /root/ruoyi-admin.jar > output.log 2>&1 &
sleep 8

image-20251101165530354

6.1.4 构建项目

image-20251102203021738

6.2 前端构建

6.2.1 安装所需软件

  1. jenkins服务器安装nodejs、npm

    yum install nodejs -yyum install npm -y
    
  2. project服务器安装nginx和sshpass

    #采用配置yum源方式安装
    vim /etc/yum.repos.d/nginx.repo#写入下面内容:
    [nginx-stable]
    name=nginx stable repo
    baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
    gpgcheck=1
    enabled=1
    gpgkey=https://nginx.org/keys/nginx_signing.key
    module_hotfixes=true[nginx-mainline]
    name=nginx mainline repo
    baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
    gpgcheck=1
    enabled=0
    gpgkey=https://nginx.org/keys/nginx_signing.key
    module_hotfixes=trueyum install nginx -y
    yum install sshpass -y
    
  3. 配置nginx代理

    vim /etc/nginx/conf.d/default.conf#找到,加入下面中间那行,root这行路径结尾加上dist
    location / {root   /usr/share/nginx/html/dist;#这边结尾要加上disttry_files $uri $uri/ /index.html;  # 加这行index  index.html index.htm;}#在下方添加nginx代理
    location /prod-api/ {proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header REMOTE-HOST $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://192.168.233.154:8080/;#该后端服务器地址
    }
    

6.2.2 补充构建前端任务shell

先分别在project的两台机器上登录到jenkins服务器生成指纹验证。

在Post Steps最下面加一个执行shell操作

cd /var/lib/jenkins/workspace/ruoyi/ruoyi-ui
npm cache clean --force
npm config set registry https://registry.npmmirror.com
npm install --save-dev @vue/cli
npm install
npm run build:prod
tar -zcf dist.tar.gz dist
cd

image-20251102191201729

再在Post Steps最下面加上两个Execute shell script on remote host using ssh操作

cd
systemctl stop nginx
rm -rf /usr/share/nginx/html/*
sshpass -p 'root' scp root@192.168.233.156:/var/lib/jenkins/workspace/ruoyi/ruoyi-ui/dist.tar.gz /usr/share/nginx/html/
cd /usr/share/nginx/html/
tar -xf dist.tar.gz
sleep 3
rm -rf dist.tar.gz
cd
systemctl start nginx 

image-20251102191129343

image-20251102191359655

上构建项目操作步骤测试构建,可以访问前端页面即成功

6.3 配置webhook自动部署

配置webhook需要内网穿透,所以要在jenkins服务器中下载ngrok,并在ngrok官网注册登录。

6.3.1 下载ngrok并注册登录

  1. 在jenkins服务器下载ngrok

    wget https://bin.equinox.io/c/bNyj1mQVY4c/ngrok-v3-stable-linux-amd64.tgz
    tar -xzf ngrok-v3-stable-linux-amd64.tgz -C /usr/local
    
  2. 到ngrok官网注册登录

    image-20251102195556175

    cd /usr/local

    ./ngrok config add-authtoken $YOUR_AUTHTOKEN
    $YOUR_AUTHTOKEN就是上面copy的那一串

  3. 测试执行

    # 将本地8080端口暴露到公网
    ./ngrok http 8080
    

    看到下面这个就成功了,Forwarding这一行,http一直到dev这一段都复制

    https://pure-superelegantly-callum.ngrok-free.dev,然后按ctrl+c退出

    image-20251102200220954

6.3.2 在构建任务中配置webhook

  1. 配置webhook

    勾选下面两项

    image-20251102200403450

    第二项勾选就行,第一项需要配置点东西,勾选的东西都默认,滑到下方Gitee WebHook 密码下面点生成,全选复制,待会有用

    在构建任务中点save保存设置

    注意:前面复制的那段http链接,后面要加上第一项这一行后面URL的/gitee-project/ruoyi才行,组成https://pure-superelegantly-callum.ngrok-free.dev/gitee-project/ruoyi

  2. 到gitee配置webhook

    点进项目,点管理,左边点webhook,点右上角橙色的添加webhook。url填上面组成的那段http链接;密码填上面生成的密码

    image-20251102201144838

    image-20251102201207460

    image-20251102201929677

  3. 测试执行

    上方点添加后,右边会有个测试按钮,我们再jenkins服务器再次启动ngrok

    ./ngrok http 8080,然后点测试,回到jenkins服务器可以看到下面内容。

    image-20251102202350289

    可以看到自动构建了。

    image-20251102202358946

  4. 添加shell自动启动ngrok

    image-20251102202726782

    在编译打包的执行shell块中添加下面内容

    pkill -f 'ngrok http 8080' || true
    sleep 2export BUILD_ID=dontKillMe
    # 启动 ngrok 前先配置认证
    echo "正在配置 ngrok authtoken..."
    /usr/local/ngrok authtoken 34oXHfz5nsVNOIyyl7OoihYoUFD_772r29bvCYx821WxMTfhtecho "正在启动 ngrok..."
    nohup /usr/local/ngrok http 8080 > /var/lib/jenkins/ngrok.log 2>&1 &
    NGROK_PID=$!
    echo "Ngrok 进程 ID: $NGROK_PID"
    sleep 8# 判断 ngrok 是否启动成功
    if ps -p $NGROK_PID > /dev/null 2>&1 && \(curl -s --max-time 5 http://localhost:4040/api/tunnels > /dev/null 2>&1 || \grep -q "started tunnel" /var/lib/jenkins/ngrok.log 2>/dev/null); thenecho "✓ Ngrok 启动成功!进程 ID: $NGROK_PID"
    elseecho "✗ Ngrok 启动失败!"echo "错误日志:"tail -20 /var/lib/jenkins/ngrok.logexit 1
    fi
    cd
    

    如上构建项目操作步骤,点构建测试,在jenkins服务器看看有没有ngrok进程

    ps -ef | grep ngrok,如果有两行以上即成功运行。

    可以访问https://pure-superelegantly-callum.ngrok-free.dev前面手动运行ngrok生成的这段链接(未组合的),如果可以访问进jenkins页面就行了。

    可以测试访问登录到项目前端页面看看192.168.233.154(你自己的项目ip)

    image-20251102203723390

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

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

相关文章

使用Stream API重构你的数据处理

如果你还在使用繁琐的for循环和临时集合来处理数据,是时候了解Java 8引入的Stream API了。它让数据处理变得声明式、可组合,并且更加优雅。 什么是Stream? Stream不是数据结构,而是对数据源(集合、数组等)的元素…

js实现页面弹框,每天没个浏览器只在第一次访问会有弹框

js实现页面弹框,每天没个浏览器只在第一次访问会有弹框localStorage.getItem方法<script type="text/javascript">function GetDateStr(AddDayCount) {var dd = new Date();dd.setDate(dd.getDate()+…

[省选联考]追忆——题目背景美化

\[\textrm{\textit{\textbf{\large \textcolor{#8b5cf6}{我常常}\textcolor{#6366f1}{追忆}\textcolor{#0ea5e9}{过去。}}}} \]\[\textstyle \mathcal {\small {^{\frac{\textrm{\textit{\textbf{\textcolor{#f472b6}{…

多线程封装

//Thread.hpp #pragma once #include<iostream> #include<string> #include<cstring> #include<functional> #include<unistd.h> #include<cassert> #include<pthread.h> c…

使用 GeckoCircuits 设计 Buck 电源环路

使用 GeckoCircuits 设计 Buck 电源环路使用 GeckoCircuits 设计 Buck 电源环路 笔者最近发现一款开源的电力电子仿真软件 GeckoCircuits,它是由苏黎世联邦理工学院(ETH)开发的,具有极高的仿真速度,软件小巧,功能…

第k小的数的分治算法

include using namespace std; int x=100; int rr(int b[],int left,int right) { int m=left,n=right+1; int h=b[left]; while(1) { while(b[++m]<h&&m<right); while(b[--n]>h); if(m>=n) { br…

Day29-C:\Users\Lenovo\Desktop\note\code\JavaSE\Basic\src\com\reflect

单元测试 Junit单元测试框架package Basic.src.com.Junit;public class StringUtil {public static void printNumber(String name) {if (name == null) {System.out.println(0);return;//停掉方法}System.out.println…

k8s-Pod中的网络通信(3)

部署的pod都会涉及到和内外网络通信,我们部署的pod 有一个ip,这个IP 是集群内部的IP ,只能在集群内被访问,k8s中pod的网路通信是交给service来管理的,简称svc。负责将外部流量引入,和内部流量引出。 1.外部流量访…

一个灵感:思维的断章

一个灵感:思维的断章 它来时,没有预兆。 不是在逻辑的链条上规行矩步,也不是在记忆的仓库里按图索骥。它诞生于一片更为辽阔、更为混沌的模糊空间。 那片空间,是意识的背景辐射,是思想形成之前的星云。那里,概念…

第十届中国大学生程序设计竞赛 哈尔滨站(CCPC 2024 Harbin Site)

第十届中国大学生程序设计竞赛 哈尔滨站(CCPC 2024 Harbin Site)比赛链接 Review 因为下周就要“一起哈啤”,所以这周末来 VP 去年的“一起哈啤”,然而已经一个多月没写代码了! 开题顺序依旧,看了个 J 感觉还挺可…

CSP-S 回顾

开考后发现自己穿了一个绒秋裤,考场上要被热死了,不断通过喝水降低体温。 $1min$ 第一题一下想到$DP和反悔贪心$,还好学了(汗) $1min 1s$否决掉了$DP$ $20min$ 奶龙考试时遇到了一些问题: 优先队列pair<int,p…

https://heylink.me/tizihacks/

https://heylink.me/tizihacks/https://heylink.me/tizihacks/

2025CSP-J游记

今年是最后一次打J组了,考的还可以。 上考场了,心想必将 J组 \(AK\),我带着信心又有点慌进考场了。 先看 \(T_1\) \(T_1\) 我感觉隔壁同学(好像是华辰的)语文挺好,看题好快,迅速开打。 \(应该是“最难的题”了吧…

通达信:引用函数 - Leone

DRAWNULL 无效数返回无效数。用法: DRAWNULL例如: IF(CLOSE>REF(CLOSE,1),CLOSE,DRAWNULL)表示下跌时不画线。 BACKSET 向前赋值用法: BACKSET(X,N),若X非0,则将当前位置到N周期前的数值设为1. 例如: BACKSET(CLO…

项目架构

聊天机器人项目架构

CSP总结

DAY-1 机房里萦绕着一种特有的氛围,我复习了 \(wiki\) 上的数学与 \(DP\) 章节(但并没有用到)。 DAY1 8点到校,或许是前一天没睡好的缘故,在车上就想睡觉,于是在原本几乎全车人都很活跃的时间段里没有什么参与。…

AI泡沫再思考:技术革命与投资狂潮的真相

本文探讨了当前AI领域的投资泡沫现象与技术发展前景,分析了AGI实现时间表、就业市场影响以及初创企业生存率等关键问题,指出技术突破与市场震荡并存的复杂性。重新审视AI泡沫 | Daniel Miessler 为什么重大崩盘、AGI…

[群表示论]基本概念

取基础域为 \(\mathbb k\). 令 \(G\) 是一个群,同态 \(\rho\colon\ G\longrightarrow GL(V)\) 给出 \(G\) 的表示 \((V,\rho)\),其中 \(V\) 是线性空间. 我们称 \(V\) 是 \(G-\)模. 令 \(V\) 是 \(G-\)模,\(W\) 是 …

P14362 [CSP-S 2025] 道路修复

题目大意 给定 \(n\) 个点,\(m\) 条边的无向图且有边权,有 \(k\) 个额外点,每个额外点向这 \(n\) 个点连边,且额外点有点权,求最小生成树。 \(n\leq 1e4\),\(m\leq 1e6\),\(k\leq 10\)。 Sol 从考场思路改了一点…