jenkins 使用教程

1. 安装最新长期稳定版 2.426.1

Redhat Jenkins Packages

sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo --no-check-certificate
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
yum install -y fontconfig java-11
yum -y install jenkins-2.426.1-1.1.noarch
systemctl enable jenkins
systemctl start jenkins

2. 本地hosts文件解析域名

10.0.0.72 jenkins.tom.com

3. 浏览器访问jenkins.tom.com:8080

[root@jenkins tools]# cat /var/lib/jenkins/secrets/initialAdminPassword
c7c62614a5d74aefae2966ceff362e4a

4. 更改密码

5. 安装插件

安装方式有2种:

1.在线搜索需要的插件进行安装

2.离线安装,把已有的.jpi文件复制到 /var/lib/jenkins/plugins/ 目录下,然后重启Jenkins即可。

用这种方式既可以批量安装插件,安装时又可以忽视插件之间的关联性。若依赖的插件不存在或者存在版本问题,则重启之后会在Manage Jenkins中进行提示,根据提示逐一解决问题即可。如果需要对Jenkins的插件配置进行迁移,直接将plugins文件目录直接替换即可,或者将.jpi复制过去之后直接重启Jenkins即可。

[root@jenkins yum.repos.d]# ll /var/lib/jenkins/plugins/
drwxr-xr-x 4 jenkins jenkins      56 Jul 12 14:35 bouncycastle-api
-rw-r--r-- 1 jenkins jenkins 8853632 Jul 12 14:35 bouncycastle-api.jpi
drwxr-xr-x 4 jenkins jenkins      56 Jul 12 14:35 instance-identity
-rw-r--r-- 1 jenkins jenkins   18216 Jul 12 14:35 instance-identity.jpi
drwxr-xr-x 4 jenkins jenkins      56 Jul 12 14:35 javax-activation-api
-rw-r--r-- 1 jenkins jenkins   77217 Jul 12 14:35 javax-activation-api.jpi
drwxr-xr-x 4 jenkins jenkins      56 Jul 12 14:35 javax-mail-api
-rw-r--r-- 1 jenkins jenkins  632494 Jul 12 14:35 javax-mail-api.jpi
drwxr-xr-x 5 jenkins jenkins      68 Jul 12 14:29 locale
-rw-r--r-- 1 jenkins jenkins   13518 Jul 12 14:29 locale.jpi
drwxr-xr-x 4 jenkins jenkins      56 Jul 12 14:35 localization-support
-rw-r--r-- 1 jenkins jenkins   24084 Jul 12 14:35 localization-support.jpi
drwxr-xr-x 5 jenkins jenkins      70 Jul 12 14:35 localization-zh-cn
-rw-r--r-- 1 jenkins jenkins  569475 Jul 12 14:35 localization-zh-cn.jpi

6. jenkins汉化插件安装

1、主要安装如下插件:Locale、Localization: Chinese (Simplified)

Manage Jenkins --> Manage Plugins --> Available,搜索上面2个插件安装即可

2.重启jenkins,systemctl restart jenkins

7. 常用插件安装

git,git parameter,git hub,gitlab,ansible,docker,maven,Workspace Cleanup

8. 案例:创建一个项目

为了方便jenkins进行操作与管理各种节点,避免出现权限问题。这里把jenkins运行用户改为root

]# egrep "User|Group" /usr/lib/systemd/system/jenkins.service
User=root
Group=root]# systemctl daemon-reload
[root@jenkins yum.repos.d]# systemctl restart jenkins

项目目标:

通过运行jenkins 任务 
提示我们进行: 
选择 
dev  #开发环境 
prod #生产环境 
把选择结果放在变量中choose。 
jenkins执行脚本
case "$choose" in
DEV) echo "部署到测试环境" ;;
PROD) echo "部署到生产环境" ;;
esac 
echo "当前用户:`whoami`"
echo "当前路径: `pwd`"

9. 案例:拉取gitlab仓库代码,根据分支进行拉取代码

10. job内置变量

10.1. jenkins job有一些自带的环境变量,在配置中可以直接引用,这里列出基础参数。

BUILD_NUMBER:当前构建号,如1
BUILD_ID:构建的id编号,一般可为构建号,也可是时间戳(需添加时间戳插件,开启时间记录)
JOB_NAME:当前job名称 如: job-04-game-auto-webhook
BUILD_TAG:本次构建记录,一般标记为jenkins-{JOB_NAME}−{BUILD_NUMBER}
EXECUTOR_NUMBER:执行者编号,在“build executor status”中看到的数字
NODE_NAME:运行的节点名称
NODE_LABELS:运行的节点标签名称
WORKSPACE:job的工作区地址 如:/var/lib/jenkins/workspace/job-04-game-auto-webhook
HUDSON_URL:jenkins的url,如:http://jenkins.tom.com/
JOB_URL:job的url,如:http://jenkins.tom.com/job/job-04-game-auto-webhook/ 
BUILD_URL:构建记录的url,如:http://jenkins.tom.com/job/job-04-game-auto-webhook/7/ ,形式为 http://ip:端口/job/{JOB_NAME}/${BUILD_NUMBER}

10.2. 也可以安装Build Environment插件,可以通过查看历史构建记录得知本次构建的所有参数)

10.3. 如需查看系统环境变量,可在系统管理-系统属性中查询。

11. 案例:拉取gitlab仓库代码,根据tag标签拉取代码

这里jenkins做了免密登录web服务器,以实现代码推送到web服务器

ssh-keygen
ssh-copy-id root@web

ssh root@10.0.0.8 "mkdir -p /app/code-back"
dirname="/app/code-back/game-${git_tag}"
scp -o StrictHostKeyChecking=no -r ${WORKSPACE}  root@10.0.0.8:$dirname
ssh -o StrictHostKeyChecking=no root@10.0.0.8 "rm -rf /app/code/game"
ssh -o StrictHostKeyChecking=no root@10.0.0.8 "ln -s $dirname  /app/code/game"

如果不选参数,会报错

12. 案例:代码上传到测试分支,自动触发jenkins构建部署

注意:不可用于生产环境,如果代码故障会导致生产环境故障

步骤:

  1. jenkins添加gitlab插件
  2. jenkins创建钩子令牌认证
  3. gitlab配置jenkins钩子和令牌
  4. 向gitlab提交代码

12.1. 需要gitlab允许来自钩子和服务的对本地网络的请求,否则会报错误

12.2. jenkins URL设置,否则一会webhook的url是带8080的

12.3. 先记录下刚才jenkins生成的两个数据,gitlab会用

webhook url:  http://jenkins.tom.com/project/job-04-game-auto-webhook
Secret token: 1b061a9f1fa423f086b72882863d5132

12.4. gitlab新建钩子,加上jenkins的webhook地址

看到上面错误,不一定是真的无法完成构建,这里采用手动推送来试试,发现可以触发jenkins构建的。

13. 案例:java项目编译部署

13.1. jenkins服务器安装maven

cd /app/tools
wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz
ln -s apache-maven-3.8.8 maven
echo 'export PATH=/app/tools/maven/bin/:$PATH' >> /etc/profile
source /etc/profile
]# mvn --version
Apache Maven 3.8.8 (4c87b05d9aedce574290d1acc98575ed5eb6cd39)
Maven home: /app/tools/maven
Java version: 11.0.8, vendor: N/A, runtime: /usr/lib/jvm/java-11-openjdk-11.0.8.10-1.el7.x86_64
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-1160.el7.x86_64", arch: "amd64", family: "unix"

13.2. 配置maven仓库地址

vim maven/conf/settings.xml</mirrors><mirror><id>aliyunmaven</id><mirrorOf>*</mirrorOf><name>阿里云公共仓库</name><url>http://maven.aliyun.com/repository/public</url></mirror></mirrors>

13.3. jenkins全局工具配置里面添加maven路径

项目代码:

从gitee克隆一份代码(链接)到本地,然后在自己的gitlab仓库中新建一个项目,把代码上传到仓库

然后jenkins开始创建一个maven job

10.0.0.8上面是web服务器,上面安装了tomcat和jdk,构建完成后,访问10.0.0.8:8080可以可以看到项目已部署成功

14. 案例:java项目编译推送至docker仓库,然后在web服务器运行docker容器

14.1. 步骤:

  1. 代码上传至gitlab
  2. 书写测试dockerfile(只需要代码+docker环境即可)
  3. jenkins创建任务
    1. 拉取代码
    2. 执行构建,shell命令(docker build,docker push)
    3. web机器docker run 镜像
  1. 检测结果

14.2. 环境

gitlab

10.0.0.71

jenkins

10.0.0.72

web1

10.0.0.7

web2

10.0.0.8

docker harbor

10.0.0.81

14.3. jenkins 10.0.0.72 机器安装docker,并配置docker仓库地址

#1.安装相关依赖.
yum install -y yum-utils device-mapper-persistent-data lvm2
#2.下载官方的docker yum源文件
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#3.替换yum源地址
sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
#4.安装docker-ce
yum makecache fast
yum -y install docker-ce docker-compose 
systemctl enable --now docker  mkdir -p /etc/docker
tee /etc/docker/daemon.json <<'EOF'
{"registry-mirrors": ["https://bjjtv7cs.mirror.aliyuncs.com"],"insecure-registries": ["harbor.tom.cn"]
}
EOF
systemctl daemon-reload
systemctl restart docker

14.4. docker harbor 安装docker-ce ,docker-compose,harbor

#----------------------------------------------------------------------------------
#1.安装相关依赖.
yum install -y yum-utils device-mapper-persistent-data lvm2
#2.下载官方的docker yum源文件
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#3.替换yum源地址
sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
#4.安装docker-ce
yum makecache fast
yum -y install docker-ce docker-compose 
systemctl enable --now docker  mkdir -p /etc/docker
tee /etc/docker/daemon.json <<'EOF'
{"registry-mirrors": ["https://bjjtv7cs.mirror.aliyuncs.com"],"insecure-registries": ["harbor.tom.cn"]
}
EOF
systemctl daemon-reload
systemctl restart docker#----------------------------------------------------------------------------------
mkdir -p /app/tools/
cd /app/tools/
wget https://github.com/goharbor/harbor/releases/download/v2.11.0/harbor-offline-installer-v2.11.0.tgz
tar -xvf harbor-offline-installer-v2.11.0.tgz 
cd harbor
cp harbor.yml.tmpl harbor.yml
#----------------------------------------------------------------------------------
vim harbor.yml
#修改域名
hostname: harbor.tom.cn#注释掉证书配置
#https:
#  # https port for harbor, default is 443
#  port: 443
#  # The path of cert and key files for nginx
#  certificate: /your/certificate/path
#  private_key: /your/private/key/path#修改登录密码
harbor_admin_password: Admin
#----------------------------------------------------------------------------------
./install.sh  
#注意要检查80是否被占用
提示successfully
? ----Harbor has been installed and started 
successfully.----
#----------------------------------------------------------------------------------

14.5. 把代码上传到自己的gitlab仓库

源码:git clone zhrzzzzzzzzz/bird

14.6. web1和web2安装docker,并配置仓库地址(参照jenkins安装docker的过程)

14.7. jenkins新建项目

docker build  -t harbor.tom.cn/prod/nginx_bird:${git_tag} .
docker login -uadmin -padmin harbor.tom.cn
docker push harbor.tom.cn/prod/nginx_bird:${git_tag}
#部署
ansible -i /server/ansible/hosts web -m shell -a"\
docker rm -f bird; \
docker rmi harbor.tom.cn/prod/nginx_bird:${git_tag}; \
docker login -uadmin -padmin harbor.tom.cn; \
docker run -d --name bird -p 80:80 harbor.tom.cn/prod/nginx_bird:${git_tag}"

这里有个问题,如果同样的tag,被推送到harbor仓库以后,再次推送的是推不上相同的tag的,只能删除

这里提供如下方案,在push前,把相同tag的镜像从仓库里删除,再进行推送

HARBOR_URL="harbor.tom.cn"
PROJECT="prod"
REPOSITORY="nginx_bird"
USER="admin"
PASSWORD="admin"
curl -s -X DELETE "http://${HARBOR_URL}/api/v2.0/projects/${PROJECT}/repositories/${REPOSITORY}/artifacts/${git_tag}/tags/${git_tag}" -u "$USER:$PASSWORD"
docker build  -t ${HARBOR_URL}/${PROJECT}/${REPOSITORY}:${git_tag} .
docker login -uadmin -padmin ${HARBOR_URL}
docker push ${HARBOR_URL}/${PROJECT}/${REPOSITORY}:${git_tag}
#部署
ansible -i /server/ansible/hosts web -m shell -a"\
docker rm -f bird; \
docker rmi ${HARBOR_URL}/${PROJECT}/${REPOSITORY}:${git_tag}; \
docker login -u$USER -p$PASSWORD ${HARBOR_URL}; \
docker run -d --name bird -p 80:80 ${HARBOR_URL}/${PROJECT}/${REPOSITORY}:${git_tag}"

15. jenkins引入安全扫描工具sonarqube

sonarqube服务器:10.0.0.73,下面安装的软件都是在这台机器安装

15.1. jdk1.8安装

yum -y install java

15.2. 安装依赖

yum install git java unzip wget -y

15.3. 安装mysql 5.7

yum install -y https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
yum install -y mysql-community-server
systemctl start mysqld
]# grep -i password /var/log/mysqld.log 
2024-07-16T06:21:23.103934Z 1 [Note] A temporary password is generated for root@localhost: *PpB&()jE0<a
mysql -uroot -p"*PpB&()jE0<a"
mysql> alter user root@localhost identified by '新密码';#创建数据库及用户
mysql> create database sonarqube charset utf8;
mysql> grant all on sonarqube.* to 'sonarqube'@'localhost' identified by 'Sonar123...';

15.4. sonarqube安装

cd /app/tools
wget  https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.7.zip
unzip sonarqube-7.7.zip
ln -s sonarqube-7.7 sonar
useradd sonar
chown -R sonar.sonar /app/tools/sonar/
#修改配置文件
]# egrep -v '^$|^#' sonar/conf/sonar.properties
sonar.jdbc.username=sonarqube
sonar.jdbc.password=Sonar123...
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonarqube?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
#启动sonarqube
]# su - sonar -c '/app/tools/sonar/bin/linux-x86-64/sonar.sh start'
Starting SonarQube...
Started SonarQube.

15.5. 访问sonarqube界面 http://sonar.tom.cn:9000

点击login,输入用户名:admin 用户密码:admin

windows本地做host解析
10.0.0.73 sonar.tom.cn

15.6. sonarqube汉化

rm -rf sonar/extensions/plugins/
tar -xvf sonarqube_7.7.plugins_new.tar.gz -C ./sonar/extensions/
]# su - sonar -c '/app/tools/sonar/bin/linux-x86-64/sonar.sh restart'
Stopping SonarQube...
Stopped SonarQube.
Starting SonarQube...
Started SonarQube.

15.7. sonarqube新建一个项目,创建token,复制用于扫描java的maven命令

mvn sonar:sonar \-Dsonar.projectKey=test \-Dsonar.projectName=test \-Dsonar.host.url=http://sonar.tom.cn:9000 \-Dsonar.login=06fd5a5f31971847aa7c3caab9a87ee378a83c41

15.8. jenkins项目中调用sonarqube扫描

16. jenkins分布式

背景:

jenkins服务器上运行maven编译,ansible(执行剧本),docker build(构建镜像) ,jenkins慢了.

解决:

把一些功能拆分出去. 运行指定任务的时候指定这个新的(jenkins)节点即可.

16.1. 案例:拆分docker功能

目标:未来我们的任务中只要有docker build相关操作就交给对应docker节点.

16.1.1. 添加节点 :

  1. 准备节点上安装jdk/jre环境. yum install -y java-11
  2. web页面添加节点 Dashbord-->系统管理-->节点管理(Clouds)

16.1.2. 创建任务并绑定到指定节点中

注意:拉取代码会被拉到新建的节点机器上,shell部分的操作命令全都会在新节点上运行,就相当于jenkins让新节点干活了,所以新节点上要部署ansible,否则编译会报错

17. jenkins权限控制rbac认证

17.1. 安装插件

Role-based Authorization Strategy

Matrix Authorization Strategy

17.2. 启用rbac的认证

17.3. 配置权限

在系统管理页面点击Manage and Assign Roles进入角色管理页面:

17.4. 管理角色(manager roles)

选择该项可以创建全局角色、项目角色,并可以为角色分配权限

全局角色(Global roles)与项目角色(item roles)的区别就是,项目角色只能管理项目,没有管理jenkins的权限配置,全局角色适用于Jenkins中的任何项目,并覆盖您在项目角色中指定的任何内容。也就是说,当您在全局角色中为角色指定job read权限时,无论您在项目角色中指定什么,该角色都可以读取所有作业。在全局角色中提供job create将允许创建任何名称的作业。

添加项目角色时,需要指定匹配项目的模式,官方文档介绍该选项支持正则表达式,

"Roger-." 表示所有以Roger-开头的项目,

"(?i)roger-.*" 表示以roger-开头的项目并且不区分大小写,

"ABC|ABC.*",ABC开头的项目可以配置为“

"abc|bcd|efg" 直接匹配多个项目

"aa[^abc].*" 匹配以aa开头并且不包括abc的字符串:

全局角色:

OPS: 运维人员权限

项目角色:

上面根据项目,每个项目建立了2组角色,一个是开发用,一个测试用

DEV-DEV:  DEV环境 开发人员权限  
DEV-SIT: DEV环境 测试人员权限
PROD-DEV:  PROD环境 开发人员权限
PROD-SIT: PROD环境 测试人员权限

17.5. 新建用户:

OPS-01 
DEV-01
SIT-01

17.6. 给用户分配角色(assign roles)

18. jenkins pipeline

安装插件:Pipeline: Stage View Plugin,Pipeline Stage View

pipeline流水线:通过jenkins的工作框架,通过代码的方式,将多个任务联合起来

流水线优点:

  1. 模块化
  2. 方便检查
  3. 方便排错
  4. 整体运行流程清晰

18.1. pipeline代码书写格式

pipeline {agent anyenvironment {host="web1"}stages {stage('1.获取代码') {steps {echo "get code $host"}}stage('2.质量检测') {steps {echo "check code $host"}}stage('3.maven编译') {steps {echo "result code $host"}}}
}
所有代码都放在pipeline层内
agent定义在哪台机器上运行:any,none
environment{} 环境变量=变量值
stages{} 集合一个大项目的结合,用来包含stage子项目
stage{} 单个任务,用来包含steps{}部分
steps{} 用来实现具体动作(命令/脚本)

18.2. 新建一个流水线job

这里可以通过流水线语法生成流水线的部分代码,比如拉取代码等

Git Parameter | Jenkins plugin

Git plugin

pipeline {agent anyparameters {gitParameter branchFilter: 'origin.*/(.*)', defaultValue: 'main', name: 'git_tag', type: 'PT_TAG', useRepository: 'http://gitlab.tom.com/dev/helloworld.git'}stages {stage('1.获取代码') {steps {checkout([$class: 'GitSCM', branches: [[name: "${params.git_tag}"]], extensions: [], userRemoteConfigs: [[credentialsId: 'fc5d2626-f02d-4b07-b709-8c04f8709c57', url: 'http://gitlab.tom.com/dev/helloworld.git']]])	}}stage('2.质量检测') {steps {sh '''/app/tools/maven/bin/mvn sonar:sonar \-Dsonar.projectKey=${JOB_BASE_NAME} \-Dsonar.projectName=${JOB_BASE_NAME} \-Dsonar.host.url=http://sonar.tom.cn:9000 \-Dsonar.login=06fd5a5f31971847aa7c3caab9a87ee378a83c41'''}}stage('3.maven编译') {steps {sh '''/app/tools/maven/bin/mvn clean package''' }}stage('4.部署') {steps {sh '''scp ${WORKSPACE}/target/*.war root@10.0.0.8:/app/tools/tomcat/webapps/ROOT.war''' }}}
}

由于这里是根据tag进行拉取代码的,第一次构建的时候,页面上不出现选项,成功后,再次构建的时候,就会提示要选择tag,进行拉取代码了

19. Maven私服仓库配置-Nexus

19.1. nexus安装

#https://www.sonatype.com/download-oss-sonatype
#10.0.0.74机器,上传nexus压缩包
cd /app/tools/
tar -xvf nexus-3.13.0-01-unix.tar.gz
ln -s /app/tools/nexus-3.13.0-01/bin/nexus /bin/nexus
]# tar -xvf nexus-3.13.0-01-unix.tar.gz ^C
[root@nexus tools]# nexus --version
No suitable Java Virtual Machine could be found on your system.
The version of the JVM must be at least 1.8 and at most 1.8.
Please define INSTALL4J_JAVA_HOME to point to a suitable JVM.
#提示需要安装java1.8
yum -y install java-1.8.0
[root@nexus tools]# nexus --version
WARNING: ************************************************************
WARNING: Detected execution as "root" user.  This is NOT recommended!
WARNING: ************************************************************
Usage: /usr/bin/nexus {start|stop|run|run-redirect|status|restart|force-reload}
[root@nexus tools]# nexus start
WARNING: ************************************************************
WARNING: Detected execution as "root" user.  This is NOT recommended!
WARNING: ************************************************************
Starting nexus
[root@nexus tools]# nexus status
WARNING: ************************************************************
WARNING: Detected execution as "root" user.  This is NOT recommended!
WARNING: ************************************************************
nexus is running.

本地hosts做解析

10.0.0.74 nexus.tom.cn

访问:http://nexus.tom.cn:8081 用户名:admin 密码:admin123

admin登陆后,点击左侧【Security–Users】,在列表中选择用户,右键可更改密码和重围密码, 底部表格中可修改用户其余信息

System Requirement: max file descriptors [4096] likely too low, increase to at least [65536].

翻译nexus要求: 文件描述符过低,请增加到65536(每个进程可以打开的文件数量)

#配置后重启生效。
vim /etc/security/limits.conf
#新增* soft nofile 65536* hard nofile 65536
#命令临时重启后失效 ulimit -n 65536

19.2. nexus配置远程的仓库为阿里云的nexus地址

http://maven.aliyun.com/nexus/content/groups/public/

19.3. maven修改配置连接nexus

jenkins机器做hosts解析

echo '172.16.1.74 nexus.tom.cn' >> /etc/hosts

cp /app/tools/maven/conf/settings.xml{,.back}
cat /app/tools/maven/conf/settings.xml
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"><servers><server><id>my-nexus-releases</id><username>admin</username>  <password>admin123</password>  </server><server><id>my-nexus-snapshot</id><username>admin</username><password>admin123</password></server></servers><mirrors><mirror><id>nexus</id><mirrorOf>*</mirrorOf><url>http://nexus.tom.cn:8081/repository/maven-public/</url></mirror></mirrors><profiles><profile><id>nexus</id><repositories><repository><id>central</id><url>http://nexus.tom.cn:8081/repository/maven-public/</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository></repositories><pluginRepositories><pluginRepository><id>central</id><url>http://nexus.tom.cn:8081/repository/maven-public/</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></pluginRepository></pluginRepositories></profile></profiles>
<activeProfiles><activeProfile>nexus</activeProfile>
</activeProfiles>
</settings>

测试

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

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

相关文章

ubuntu20.04支持win10远程桌面连接

1. 安装xrdp sudo apt install xrdp 2. 检查xrdp状态 sudo systemctl status xrdp 要处于running状态 3.&#xff08;若为Ubuntu 20&#xff09;添加xrdp至ssl-cert sudo adduser xrdp ssl-cert 4. 重启服务 sudo systemctl restart xrdp 5. window 远程桌面连接&am…

大模型实战—大模型赋能网络爬虫

大模型赋能网络爬虫 简单来说,网页抓取就是从网站抓取数据和内容,然后将这些数据保存为XML、Excel或SQL格式。除了用于生成潜在客户、监控竞争对手和市场研究外,网页抓取工具还可以用于自动化你的数据收集过程。 借助AI网页抓取工具,可以解决手动或纯基于代码的抓取工具的…

Springcloud之gateway的使用详解

官网地址&#xff1a;https://docs.spring.io/spring-cloud-gateway/docs/4.0.4/reference/html/ 1.网关入门 helloword 网关不依赖start-web 导入的pom&#xff1a; <!--gateway--> <dependency><groupIdorg.springframework.cloud</groupId><arti…

openEuler 知:版本比较

文章目录 前言工具oe_diffoepkg 前言 本文的“版本比较”主要是指比较 openEuler 操作系统两个版本之间的 rpm 包的版本差异&#xff0c;只比较版本差异&#xff0c;不比较文件内容的差异。 比较版本主要用于分析两个操作系统版本之间软件包的版本变化。 工具 oe_diff 工具…

CUDA编程00 - 配置CUDA开发环境

第一步&#xff1a; 在一台装有Nvidia显卡和驱动的机器上&#xff0c;用nvidia-smi命令查看显卡所支持cuda版本 第二步&#xff1a; 到Nvidia官网下载CUDA Toolkit并安装&#xff0c;CUDA Toolkit Archive | NVIDIA Developer 安装时按提示下一步即可&#xff0c;安装完成用 …

【端智能】端智能技术演进与实践

什么是端智能技术 端智能&#xff08;On-Device Machine Learning&#xff09;是指把机器/深度学习算法模型应用和部署到端设备上&#xff0c;这里“端设备”是相对于云服务而言的&#xff0c;可以是手机&#xff0c;也可以是物联网IoT设备。 Google对端智能的介绍&#xff1…

系统架构设计师教程(清华第二版) 第3章 信息系统基础知识-3.2 业务处理系统-解读

教材中,一会儿“业务处理系统”,一会儿“事务处理系统”,语法毛病一堆。真是清华的水平!!! 系统架构设计师教程 第3章 信息系统基础知识-3.2 业务处理系统 3.2.1 业务处理系统的概念3.2.2 业务处理系统的功能3.2.2.1 数据输入3.2.2.2 数据处理3.2.2.2.1 批处理 (Batch …

计算机体系结构||指令的调度和延迟分布(3)

实验3 指令的调度和延迟分布 3.1实验目的 &#xff08;1&#xff09;加深对指令调度技术的理解。 &#xff08;2&#xff09;加深对延迟分支技术的理解。 &#xff08;3&#xff09;熟练掌握用指令调度技术来解决流水线中的数据冲突的方法。 &#xff08;4&#xff09;进一…

使用AI给编程赋能

传送门&#xff1a;https://www.bilibili.com/video/BV1pf421B71v?p23&vd_source092ecb16e8482a7243d0f8f7718c31a2 1. AIGC AI&#xff08;Artificial Intelligence&#xff09;&#xff1a;人工智能&#xff0c;是计算机科学体系下的一个学科&#xff0c;是指通过计算机…

c# 开发AutoCAD扩展

在C#中开发AutoCAD扩展涉及使用AutoCAD的.NET API&#xff0c; 利用AutoCAD的功能并创建自定义命令、对话框、块、图层和其他图形元素。以下是一些关键步骤和概念&#xff0c;可以帮助你开始使用C#开发AutoCAD扩展&#xff1a; 准备开发环境 安装AutoCAD&#xff1a;确保你有一…

【Linux】线程互斥和同步

目录 线程互斥 相关概念 互斥量mutex 互斥量的接口 初始化互斥量 销毁互斥量 互斥量加锁/解锁 可重入VS线程安全 概念 可重入与线程安全的联系 可重入与线程安全的区别 死锁 死锁的四个必要条件 避免死锁 避免死锁的算法 线程同步 条件变量 条件变量函数 初始…

语义分割——为什么单通道8bit灰度图像能显示多种色块???

目录 一、问题二、解答2.1 标签图的实际存储格式2.2 标签图的显示颜色2.3 颜色映射示例 三、应用颜色映射3.1 OpenCV显示标签图3.2 Matplotlib显示标签图 四、总结 一、问题 大家在做语义分割时不知道有没有这样的疑惑&#xff0c;使用打标签工具后&#xff0c;标签图是单通道…

项目收获总结--大数据量存储架构设计方案

项目收获总结--大数据量存储架构设计方案 一、背景二、数据存储层技术选型2.1 MySQL2.2 MongoDB2.3 HBase2.4 HBaseElasticSearch 三、HBaseElasticSearch基本原理3.1 前置考虑3.2 HBaseElasticSearch优点3.3 HBaseElasticSearch缺点 四、HBaseElasticSearch数据一致性架构4.1 …

大语言模型-Transformer-Attention Is All You Need

一、背景信息&#xff1a; Transformer是一种由谷歌在2017年提出的深度学习模型。 主要用于自然语言处理&#xff08;NLP&#xff09;任务&#xff0c;特别是序列到序列&#xff08;Sequence-to-Sequence&#xff09;的学习问题&#xff0c;如机器翻译、文本生成等。Transfor…

【UE5】可反射的射线检测

目录 效果 步骤 一、准备射线 二、生成第一次反射后的射线 三、多次反射 四、通过循环进行多次反射 效果 步骤 一、准备射线 1. 新建一个工程&#xff0c;添加一个俯视角游戏资源包 2. 双击打开俯视角游戏地图 删除大纲中的后期处理体积使得地图可以正常显示 3. 添加一…

SAP批量报工源码

SAP批量报工源码,适用于工序少的情景。 *&---------------------------------------------------------------------* *& Report ZPPR106 *& *&---------------------------------------------------------------------* *& *& *&--------------…

网络编程中的TCP和UDP

什么是TCP协议 TCP( Transmission control protocol )即传输控制协议&#xff0c;是一种面向连接、可靠的数据传输协议&#xff0c;它是为了在不可靠的互联网上提供可靠的端到端字节流而专门设计的一个传输协议。 面向连接 &#xff1a;数据传输之前客户端和服务器端必须建立连…

Aouth2单点登录

信息来源B站 不改bug早点睡&#xff0c;北冥 时序图 -----------------------------总结描述 总体流程 浏览器 - 系统1 - 系统2 - 认证中心(SSO) 访问系统1 浏览器&#xff0c;访问系统1&#xff0c;询问认证中心是否登录 未登录&#xff0c;重定向一个登录页面返回给浏…

(二)原生js案例之数码时钟计时

原生js实现的数字时间上下切换显示时间的效果&#xff0c;有参考相关设计&#xff0c;思路比较难&#xff0c;代码其实很简单 效果 代码实现 必要的样式 <style>* {padding: 0;margin: 0;}.content{/* text-align: center; */display: flex;align-items: center;justif…

光盘防水嘛 ? DVD+R 刻录光盘泡水实验

首发日期 2024-07-20, 以下为原文内容: 同志们好, 欢迎来到 胖喵穷人实验室 ! 这里专注于 低成本, 低难度, 低风险 的 “三低” 小实验. 胖喵穷人实验室 (PM-PLab-E)正式名称: 紫腹巨蚊 (Toxorhynchites gravelyi) 系列穷人 (Poor people) 实验室风险警告: 低风险并不是零风险…