gitlab runner 安装、注册、配置、使用(Docker部署)

news2024/11/15 23:59:41

天行健,君子以自强不息;地势坤,君子以厚德载物。


每个人都有惰性,但不断学习是好好生活的根本,共勉!


文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。

文章目录

  • 一、介绍
    • 1. 类型
    • 2. 状态
    • 3. 原理
    • 4. 部署方式
    • 5. 运行方式
  • 二、Docker中部署Gitlab Runner
    • 1. 环境
    • 2. 安装
    • 3. Token获取
    • 4. 注册
      • 4.1 交互式注册
        • 4.1.1 注册指令
        • 4.1.2 Gitlab-Url
        • 4.1.3 Runner-Token
        • 4.1.4 Runner的名称
        • 4.1.5 Runner-Tag
        • 4.1.6 Runner-Maintenance
        • 4.1.7 Runner-Executor
        • 4.1.8 Runner-Executor-Version
        • 4.1.9 完整注册流程的截图
        • 4.1.10 查看运行列表
        • 4.1.11 Gitlab平台查看Runner
        • 4.1.12 退出容器
      • 4.2 非交互式注册
        • 4.2.1 进入容器
        • 4.2.2 注册
        • 4.2.3 查看Runner
        • 4.2.4 退出容器
    • 5. 配置
      • 5.1 容器内config.toml文件查看
      • 5.2 容器外挂载目录的config.toml文件查看
    • 6. 命令使用
      • 6.1 注册指令
      • 6.2 列举运行程序
      • 6.3 验证runner是否连接
      • 6.4 注销runner
        • 6.4.1 用令牌注销
        • 6.4.2 用名称注销
        • 6.4.3 注销所有runner
    • 7. 作业演示1
      • 7.1 Gitlab创建项目并拉取到本地
      • 7.2 项目文件
      • 7.3 流程定义文件
        • 7.4 将代码推送到Gitlab
    • 8. 作业演示2


一、介绍

Gitlab Runner作为一个开源的项目,使用Go语言编写,可运行在不同系统重
Gitlab Runner用于运行作业并将结果发给gitlab服务器
Gitlab Runner与Gitlab CI结合使用,Gitlab CI是gitlab的开源持续集成服务,用于协调作业
Gitlab Runner的版本安装时应注意与Gitlab版本尽量同步以防版本差异导致报错

1. 类型

Gitlab Runner包含三种类型,分别对应三种不同情况(或者说是作用范围)
Shared:共享类型,运行整个平台的项目的作业(gitlab)
Group:项目组类型,运行特定group下的所有项目的作业(group)
Specific:项目类型,运行指定的项目作业(project)
不同的类型有对应的token,可到对应的位置获取
区别在于左上角的名称不一样,平台-Admin Area,组-组名,项目-项目名称
平台Runner
在这里插入图片描述
组Runner
在这里插入图片描述
项目Runner
这里可以看到gitlab的url和token
在这里插入图片描述

本篇在平台类型注册runner,即 使用平台类型的token进行注册runner

2. 状态

Gitlab Runner有两种状态,locked和paused
locked:无法运行项目作业
paused:不会运行作业

3. 原理

gitlab-runner注册到gitlab,gitlab中的代码更新时gitlab就会通知gitlab-runner
gitlab-runner拉取本地最新代码后执行.gitlab-ci.yaml文件定义的脚本,具体的脚本可参考官网

4. 部署方式

gitlab-runner支持多种部署方式,如本地Windows部署、容器Docker中部署、K8S集群中以pod形式部署
本篇尝试以docker容器部署及k8s集群中部署

5. 运行方式

gitlab-runner可以选择以什么执行器来运行,如docker、kubernetes、shell等
在注册时可以选择一种执行器来指定,本篇以docker为例

注:以下说明只针对建立group组且未授权root权限的用户
由于gitlab账号并不是管理员权限,仅对group具备maintainer权限,所以gitlab-runner使用group作为绑定方式
绑定关系:gitlab–gitlab-runner–创建pod运行gitlab-runner中的stages
但是,我们安装gitlab后,使用的账号为root权限,没有权限限制,故,此步骤省略无需绑定

注:为避免注册失败或后续runner不可用,gitlab-runner与gitlab最好不要安装在相同的服务器
如果只是测试环境,可在同一台进行尝试,遇到问题再解决,一般不会出问题
本篇gitlab服务在woker2节点,runner安装的位置为master主节点

二、Docker中部署Gitlab Runner

1. 环境

系统版本:Linux—centos
docker版本:24.0.7
gitlab版本:gitlab/gitlab-ce:15.6.0-ce.0
gitlab-runner版本:gitlab-runner:v15.6.0
注:gitlab-runner的版本号和gitlab的略有差异,runner的版本需加v前缀方可使用

2. 安装

为了挂载runner的配置文件,我们先创建一个文件夹用于后续挂载使用

mkdir -p /data/gitlab-runner/config

在这里插入图片描述

拉取gitlab-runner镜像,尽量与gitlab版本保持一致

docker pull gitlab/gitlab-runner:v15.6.0

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

运行容器

docker run -itd --restart always --name gitlab-runner \
-v /data/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:v15.6.0

在这里插入图片描述

查看运行的容器

docker ps | grep gitlab

在这里插入图片描述

进入容器查看查看版本

docker exec -it gitlab-runner bash
gitlab-runner -v

在这里插入图片描述

3. Token获取

在gitlab的平台Runner中找到对应的URL地址和Token复制准备好,以备后续注册使用
主菜单–Admin–Runner
在这里插入图片描述
如图将其复制下来
在这里插入图片描述
RuUyXm9kDKxRLkeeCLXv

4. 注册

可通过gitlab-runner register命令进行交互式注册,也可通过命令行一次性将参数配置进行非交互注册

4.1 交互式注册

4.1.1 注册指令

首先进入容器,gitlab-runner为容器名

docker exec -it gitlab-runner bash

在容器中输入注册指令

gitlab-runner register

在这里插入图片描述

4.1.2 Gitlab-Url

根据提示填写gitlab的URL地址
此IP地址就是gitlab服务的地址,如gitlab服务器访问地址为172.30.0.222:30021

http://172.30.0.222:30021/

在这里插入图片描述
注:这里需要注意的是根据提示填写的是ip地址,但实际上应该填写完整的地址加端口号,如果不加端口则默认使用80端口访问,如果我们的gitlab访问地址的端口不是80则需要在这里加上端口来避免访问失败

4.1.3 Runner-Token

根据提示填写runner的Token,我们之前复制的是平台类型的共享型token,粘贴到这里

RuUyXm9kDKxRLkeeCLXv

在这里插入图片描述

4.1.4 Runner的名称

根据提示填写Runner的描述信息,也就是runner的名称,此处填gr01,会在Gitlab界面显示并可修改,也可不填

gr01

在这里插入图片描述

4.1.5 Runner-Tag

根据提示填写Runner的Tag信息,会在Gitlab的界面显示并可修改,也可不填
后续作业可通过tag指定在哪个runner上面运行构建

01

在这里插入图片描述

4.1.6 Runner-Maintenance

根据提示填写用户权限备注,可不填

root

在这里插入图片描述

4.1.7 Runner-Executor

根据提示选择Runner使用的执行器种类并填写,建议docker

docker

在这里插入图片描述

4.1.8 Runner-Executor-Version

根据提示填写docker执行器版本,后续作业以哪个镜像版本来运行job(可在.gitlab-ci.yml中修改需要的image)
这里用docker的最新版latest

docker:latest

在这里插入图片描述
执行完以上内容即可生成一个runner的配置文件,位置为/etc/gitlab-runner/config.toml
由于我们创建runner容器时挂载了目录,该文件会同步出现在我们创建的本地挂载目录中/data/gitlab-runner/config/config.toml

4.1.9 完整注册流程的截图

在这里插入图片描述

4.1.10 查看运行列表

使用命令查看运行列表,可以看到刚注册的gr01已在列表中

gitlab-runner list

在这里插入图片描述

4.1.11 Gitlab平台查看Runner

此时我们到gitlab平台上查看我们已注册的runner
主菜单–Admin–Overview–Runners
在这里插入图片描述

4.1.12 退出容器
exit

4.2 非交互式注册

4.2.1 进入容器
docker exec -it gitlab-runner /bin/bash
4.2.2 注册

在容器中执行以下命令即可完成注册

gitlab-runner register \
--non-interactive \
--url "http://172.30.0.222:30021" \
--registration-token "RuUyXm9kDKxRLkeeCLXv" \
--executor "docker" \
--docker-image maven:latest \
--description "gr02" \
--tag-list "02" \
--run-untagged="true" \
--locked="false" \
--access-level="not_protected"

--non-interactive 非交互注册执行时添加该参数
--url gitlab服务器地址,如端口不是80则需要将端口加上
--registration-token Runner Token ,gitlab平台获取
--executor 执行器引擎,可选,建议docker
--docker-image 镜像版本,后续Runner中pipeline以此镜像版本来执行作业,该参数也可后续在.gitlab-ci.yml文件中指定
--description Runner描述信息,即Runner的名称,后续可在平台中看到也可修改
--tag-list Runner的Tag信息,后续作业可通过tag指定在哪个runner上运行构建Runner,注册成功后会在gitalbCICD界面查看
--run-untagged 运行未指定tag的作业,开启
--locked 注册成功后runner为锁定状态,关闭
--access-level runner的访问级别,not_protected表示不受保护

执行后完成注册
命令行如下

[root@k8s-master ~]# docker exec -it gitlab-runner /bin/bash
root@5befda15d9b2:/# gitlab-runner register \
> --non-interactive \
> --url "http://172.30.0.222:30021" \
> --registration-token "RuUyXm9kDKxRLkeeCLXv" \
> --executor "docker" \
> --docker-image maven:latest \
> --description "gr02" \
> --tag-list "02" \
> --run-untagged="true" \
> --locked="false" \
> --access-level="not_protected"
Runtime platform                                    arch=amd64 os=linux pid=118 revision=44a1c2be version=15.6.0
WARNING: The 'register' command has been deprecated in GitLab Runner 15.6 and will be replaced with a 'deploy' command. For more information, see https://gitlab.com/gitlab-org/gitlab/-/issues/380872 
Running in system-mode.                            
                                                   
Registering runner... succeeded                     runner=RuUyXm9k
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
 
Configuration (with the authentication token) was saved in "/etc/gitlab-runner/config.toml"

截图如下
在这里插入图片描述

4.2.3 查看Runner

到gitlab平台中查看新建的Runner
主菜单–Admin–Overview–Runners
如图,gr02就是我们刚刚创建的Runner
在这里插入图片描述

4.2.4 退出容器
exit

5. 配置

这一步其实就是查看config.toml文件内容然后进行简单的描述,暂时不需要做任何修改,如后续有修改的需要可根据以下参数进行修改配置

5.1 容器内config.toml文件查看

进入gitlab-runner容器中查看生成的config.toml配置文件
进入容器gitlab-runner

docker exec -it gitlab-runner bash

查看配置文件

cat /etc/gitlab-runner/config.toml

内容如下:

concurrent = 1
check_interval = 0
shutdown_timeout = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "gr01"
  url = "http://172.30.0.222:30021/"
  id = 1
  token = "_6msnKT89DcSsr8SCW9b"
  token_obtained_at = 2024-01-25T04:41:12Z
  token_expires_at = 0001-01-01T00:00:00Z
  executor = "docker"
  [runners.custom_build_dir]
  [runners.cache]
    MaxUploadedArchiveSize = 0
    [runners.cache.s3]
    [runners.cache.gcs]
    [runners.cache.azure]
  [runners.docker]
    tls_verify = false
    image = "docker:latest"
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache"]
    shm_size = 0

[[runners]]
  name = "gr02"
  url = "http://172.30.0.222:30021"
  id = 2
  token = "k1zsbdVfgMA_4R9syxL6"
  token_obtained_at = 2024-01-25T08:06:33Z
  token_expires_at = 0001-01-01T00:00:00Z
  executor = "docker"
  [runners.custom_build_dir]
  [runners.cache]
    MaxUploadedArchiveSize = 0
    [runners.cache.s3]
    [runners.cache.gcs]
    [runners.cache.azure]
  [runners.docker]
    tls_verify = false
    image = "maven:latest"
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache"]
    shm_size = 0

参数描述:
第一部分
concurrent 可并行运行作业的数量,0表示无限制
check_interval gitlab-runner检查配置的时间间隔,0表示默认3秒

第二部分[session_server]
session_timeout 作业完成后会话可以保持活动状态的描述,默认1800秒

第三部分[[runners]]
name Runner名称
url gitlab server地址和端口,如果你的gitlab访问地址端口为80则可省略端口号
token Runner的特殊令牌,不是注册令牌
token_obtained_at token获取时间
token_expires_at token过期时间
executor Runner的执行器,表示runner中pipeline以什么方式运行即如何构建项目,执行器决定了runner用什么方式在什么环境上完成gitlab分配的CI job
[runners.custom_build_dir] 允许用户为作业定义自定义构建目录
[runners.cache] 分布式缓存目录
[runners.docker] 定义docker容器参数
tls_verify 启用或禁用对docker守护程序连接的TLS验证,这里是默认的禁用(false)
image 用于运行镜像的镜像,也可在.gitlab-ci.yml中指定
privileged 使容器以特权模式运行,不安全,默认关闭
disable_entrypoint_overwrite 禁用镜像覆盖entrypoint
oom_kill_disable 内存不足时报错,不终止容器中的进程,默认关闭
disable_cache docker执行器有两个级别的缓存:全局缓存和基于docker卷的本地缓存,此配置参数表示仅作用于禁用自动创建(未映射到主机目录)缓存卷的本地配置标志
volumes 安装挂载卷与docker-v标志的语法相同
shm_size 镜像的共享内存大小(以字节为单位)

截图
在这里插入图片描述

5.2 容器外挂载目录的config.toml文件查看

当然,因为我们挂载了该文件目录,故退出容器,在宿主机的对应的挂载位置找到这个文件查看
退出容器

exit

查看挂载目录的文件/data/gitlab-runner/config/config.toml

cat /data/gitlab-runner/config/config.toml

在这里插入图片描述
后续如需修改配置,文件修改后不需要重启,每隔三秒gitlab-runner会检查配置是否修改并重新加载
如需修改检查间隔时间可修改参数check_interval的值,300表示5分钟,即后续会5分钟检查一次

6. 命令使用

gitlab-runner命令汇总
命令均为容器内使用

6.1 注册指令

容器内注册Runner到gitlab

gitlab-runner register

6.2 列举运行程序

容器中,列举保存在配置文件中的所有运行程序

gitlab-runner list

6.3 验证runner是否连接

容器内,检查注册的runner是否可以正常连接,不能验证gitlab服务是否在使用runner

gitlab-runner verify

6.4 注销runner

容器内,注销已注册的runner

gitlab-runner unregister
6.4.1 用令牌注销

使用令牌注销已注册的runner

gitlab-runner unregister --url http://gitlab.xxxx.com/ --token xxxxx
6.4.2 用名称注销

使用名称注销,同名则删除第一个

gitlab-runner unregister --name runner名称
6.4.3 注销所有runner

直接注销所有runner

gitlab-runner unregister --all-runners

7. 作业演示1

如何使用Runner来进行项目代码的打包等作业
首先需要有一个项目代码,然后在项目代码根目录需要有一个.gitlab-ci.yml文件用来定义CICD流程
主要是这个.gitlab-ci.yml文件
模拟:

流程如下
在gitlab上创建一个项目
在本地创建一个文件夹,并将gitlab上的项目克隆或者建立连接
然后在本地项目文件夹中创建两个文件index.html和.gitlab-ci.yml
然后推送代码到gitlab

7.1 Gitlab创建项目并拉取到本地

参考:Gitlab的使用

7.2 项目文件

在项目中创建文件index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Gitlab Runner CICD Test</title>
</head>
<body>
<h1>This is a test for Gitlab Runner CICD test and only html for this project</h1>
</body>
</html>

7.3 流程定义文件

在项目根目录中创建.gitlab-ci.yml

build-job:
  stage: build
  script:
    - echo "Hello, $GITLAB_USER_LOGIN!"

test-job1:
  stage: test
  script:
    - echo "This job tests something"

test-job2:
  stage: test
  script:
    - echo "This job tests something, but takes more time than test-job1."
    - echo "After the echo commands complete, it runs the sleep command for 20 seconds"
    - echo "which simulates a test that runs 20 seconds longer than test-job1"
    - sleep 20

deploy-prod:
  stage: deploy
  script:
    - echo "This job deploys something from the $CI_COMMIT_BRANCH branch."

build阶段启动一个作业,输出一段文本,test阶段并行启动两个作业,分别输出一段文本,deploy阶段启动一个作业,输出一段文本,三个阶段模拟构建、测试、部署流程

7.4 将代码推送到Gitlab

将项目推送到gitlab后,后续任意提交内容都可触发流水线执行,当然也可以手动执行,项目中的CICD,选择运行流水线即可执行

8. 作业演示2

同样的,在项目的根目录中创建一个.gitlab-ci.yml文件并填充内容

stages:
  - maven
  - build
  - deploy
  
maven_job:
  stage: maven
  tags:
    - default
  only:
    - master
  script:
    - echo "This is the first maven job"
    
build_job:
  stage: build
  tags:
    - default
  only:
    - master
  script:
    -  echo "This is the first build job"

deploy_job:
  stage: deploy
  tags:
    - default
  only:
    - master
  script:
    - echo "This is the first deploy job"

https://blog.csdn.net/zyy247796143/article/details/123842374
https://zhuanlan.zhihu.com/p/630393918
https://blog.csdn.net/qq_37084490/article/details/126478452
https://www.jianshu.com/p/0ca2174e34ad


感谢阅读,祝君暴富!

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

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

相关文章

vue3项目中用codemirror实现格式化java代码及不太成熟的历程

本期只介绍创作的曲折历程&#xff0c;并不能解决实际问题&#xff0c;现有插件不支持&#xff0c;总结在了最后 一、案例效果 vue3项目使用preitter 搭配prettier-plugin-java 实现codemirror 格式化 java 二、步骤 1. 安装prettier和prettier-plugin-java&#xff0c;可以…

如何快速解决局域网IP冲突问题?连接IP地址冲突如何用代理IP搞定?

随着互联网的普及&#xff0c;局域网已经成为了许多家庭和企业中不可或缺的一部分。然而&#xff0c;局域网中的IP地址冲突问题却时常困扰着用户。一旦出现IP地址冲突&#xff0c;网络连接就会变得不稳定&#xff0c;甚至无法正常上网。那么&#xff0c;如何快速解决局域网IP冲…

2024 高级前端面试题之 HTML 「精选篇」

该内容主要整理关于 HTML 的相关面试题&#xff0c;其他内容面试题请移步至 「最新最全的前端面试题集锦」 查看。 HTML模块精选篇 1. 如何理解HTML语义化2. H5的新特性有哪些3. 说一下 HTML5 Drag API4. iframe有那些缺点5. 如何实现浏览器内多个标签页之间的通信6. 简述一下s…

嵌入式培训机构四个月实训课程笔记(完整版)-Linux ARM平台编程第二天-ARM汇编(物联技术666)

链接&#xff1a;https://pan.baidu.com/s/1bG0tuVaACATvjLwD05j1FQ?pwd1688 提取码&#xff1a;1688 上午&#xff1a;ARM编程模型 下午&#xff1a;常用ARM指令 教学内容&#xff1a; 1、ARM数据类型 字节&#xff08;Byte&#xff09;&#xff1a;在ARM体系结构及常见的…

掌握大语言模型技术: 推理优化

掌握大语言模型技术_推理优化 堆叠 Transformer 层来创建大型模型可以带来更好的准确性、少样本学习能力&#xff0c;甚至在各种语言任务上具有接近人类的涌现能力。 这些基础模型的训练成本很高&#xff0c;并且在推理过程中可能会占用大量内存和计算资源&#xff08;经常性成…

数据结构(队列)

一.什么是队列 1.队列定义 队列是一种特殊的线性表&#xff0c;特殊之处在于他只允许在表的前端(front)进行删除操作&#xff0c;而在表的后端(rear)进行插入操作。和栈一样&#xff0c;队列也是一种操作受限制的线性表。进行插入操作的一端称为队尾&#xff0c;进行删除操作的…

微服务理解篇

一 :架构演变 1 单体架构: 简单理解为一个服务涵盖所有需求功能2 垂直架构: 按照业务功能将单体架构拆分成小模块服务, 如:订单系统,用户系统,商品系统 ##缺点 引入分布式事务,分布式锁等,优点:模块解耦## 垂直拆分:根据业务层级拆分,比如商城的订单系统,用户系统,商品系统…

搭建属于自己本地的网站

1.关闭selinux 1.1 为什么关闭&#xff1f; 如果selinux不关闭的话&#xff0c;修改ssh端口等策略会不生效&#xff0c; 比如向将ssh端口修改为22011&#xff0c;修改后重启sshd服务&#xff0c;端口未修改&#xff0c;此时需要执行setendforce 0 命令&#xff0c;然后再次重…

leetcode hot100组合

在本题中&#xff0c;是要求返回[1,n]这个数组的长度为k的组合。涉及到排列、组合、棋盘、分割等问题的时候&#xff0c;要考虑利用回溯来进行解决。 回溯和递归类似&#xff0c;也分为三步进行分析 确定递归函数的返回值和参数&#xff1a;一般来说返回值都是void&#xff0c…

【前端web入门第一天】02 HTML图片标签 超链接标签

文章目录: 1.HTML图片标签 1.1 图像标签-基本使用1.2 图像标签-属性1.3 路径 1.3.1 相对路径 1.3.2 绝对路径 2.超链接标签 3.音频标签 4.视频标签 1.HTML图片标签 1.1 图像标签-基本使用 作用:在网页中插入图片。 <img src"图片的URL">src用于指定图像…

【2024】新建mysql数据库,如何选择字符集和排序规则

如何使用 Navicat 新建 MySQL 数据库&#xff0c;并选择字符集与排序规则 如何使用 Navicat 新建 MySQL 数据库并选择字符集与排序规则1. 开始之前2. 新建数据库步骤 1: 打开 Navicat步骤 2: 创建新数据库步骤 3: 填写数据库名称 常见的字符集和排序规则及其选择场景1. 字符集&…

使用__missing__方法实现映射表多格式主键

背景介绍 在python中&#xff0c;我们经常使用字典类型实现映射表的功能&#xff0c;通过字典的主键遍历获取对应的值&#xff0c;从而实现从一个值映射到另一个值的功能 但是这种映射是十分硬性的&#xff0c;例如&#xff0c;假如我的映射表为{‘1’&#xff1a;one&#x…

串口控制器

1. 串口通信 1.1 什么是串口 是一种通信方式&#xff08;通信协议&#xff09; 主要通过串行方式完成设备间的数据通信 通信领域中使用最频繁&#xff0c;实现方式最简单的一种通信方式 串口: 全双工串行异步通信协议 串口3线: RX 接收 TX 发送 GND 共地信号 参考地 …

纳斯达克VS路透社MIFI大屏直投-大舍传媒

纳斯达克VS路透社MIFI大屏直投-大舍传媒 引言 在数字时代的今天&#xff0c;大屏投放成为一种广泛应用的营销手段和传媒方式。纳斯达克大屏和路透社MIFI大屏作为两个重要的投放平台&#xff0c;为企业和机构提供了广告和宣传的机会。 纳斯达克大屏的魅力 纳斯达克大屏位于纽…

Web网页生成桌面应用

前言&#xff1a;网页生成桌面指的是将一个网页保存为桌面应用程序的形式&#xff0c;使得用户可以在桌面上直接打开该网页&#xff0c;而不必通过浏览器打开。这种桌面应用程序一般具有独立的窗口、菜单、工具栏等界面元素&#xff0c;能够提供更加方便快捷的使用体验。 实现…

基于Java的学生宿舍门禁信息管理系统的设计与实现(源码+lw+部署文档+讲解等

目录 前言 详细视频演示 具体实现截图 技术栈 后端框架SpringBoot 前端框架Vue 持久层框架MyBaitsPlus 系统测试 系统测试目的 系统功能测试 系统测试结论 代码参考 数据库代码参考 源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、…

(2024,MLLM,扩散,中文数据集扩散预训练,多模态提示引导微调)UNIMO-G:通过多模态条件扩散进行统一图像生成

UNIMO-G: Unified Image Generation through Multimodal Conditional Diffusion 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 1. 摘要 2. 方法 3. 结果 1. 摘要 现有的文本到图像…

AIGC:让生成式AI成为自己的外脑(文末送书)

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;数据结构、网络奇遇记 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. 什么是AIGC?二. AIGC如何运作&#xff1f;2.1 步骤一&#xff1a;收集数据2.…

算法基础之线段树

文章目录 线段树 线段树 线段树的原理十分简单&#xff0c;但是在代码上会相对复杂一点 他也是用来维护一个序列&#xff0c;是一个完全二叉树的形状 对于每一个节点是一个结构体 struct Node {int L,R; int sum; // 以和为例 };假设序列为1到7&#xff0c;那么根节点存的…

5G安卓手机定制_基于天玑900的安卓主板方案

5G安卓手机方案是一款采用联发科MT6877(天玑900)平台的高性能、可运行安卓操作系统的5G智能模块。该手机采用台积电6纳米低功耗工艺&#xff0c;主频高达2.4GHz&#xff0c;内存支持LPDDR5&#xff0c;并支持5G Sub-6GHz全频段和5G双载波聚合技术等多种制式。同时&#xff0c;该…