006.Gitlab CICD流水线触发
文章目录
- 触发方式介绍
- 触发方式类型
- 触发方式实践
- 分支名触发
- MR触发
- tag触发
- 手动人为触发
- 定时任务触发
- 指定文件变更触发
- 结合分支及文件变更触发
- 正则语法触发
触发方式介绍
触发方式类型
Gitlab CICD流水线的触发方式非常灵活,常见的有如下几类触发方式:
- 代码变更触发
- push 事件触发
- tag 推送触发
适用于常规开发流程(提交即构建)或版本发布(结合语义化版本标签)。
- 定时触发
- 流水线计划
适用于定期执行测试套件或夜间构建/备份任务。
- 手动触发
- 手动开始流水线
- 手动执行单个作业
适用于高风险操作(如生产发布)或需人工审核的流程,需要准确的单个手动执行。
- API触发
- Pipeline triggers触发
- CI_JOB_TOKEN触发
适用于外部系统集成(如JIRA事件触发)或多项目级联部署。
- 合并请求(MR)触发
- MR 创建/更新
- MR 目标分支规则
适用于代码审查自动化检查或预合并验证。
- 外部事件触发
- webhooks
- 外部仓库同步
适用于多平台代码同步或第三方服务集成(如Docker Hub)。
总结如下:
| 需求场景 | 推荐触发方式 | 优势 |
|---|---|---|
| 常规开发 | Push 事件 | 自动化程度高 |
| 生产发布 | 手动触发 + 保护分支 | 安全可控 |
| 多系统集成 | API + Webhooks | 跨平台兼容性好 |
| 定期维护任务 | 流水线计划 | 定时精准执行 |
| 代码审查 | MR 触发 | 关联变更集上下文 |
触发方式实践
分支名触发
指定分支名触法是最简单也是最常见的触发方式,通过指定分支名的方式触发主要是通过 only 和 except 关键字实现。
- only 所有分支
如下所示,在 only 关键字中指定 branches ,表示当前 job 会在所有分支执行。
[root@gitclient myapp]# git rm .gitlab-ci.yml[root@gitclient myapp]# vim .gitlab-ci.yml
stages:- compilecompile:stage: compileonly:- branchesscript:- echo "Do compile work"tags:- study-runner[root@gitclient myapp]# git add .gitlab-ci.yml
[root@gitclient myapp]# git commit -m "all branches"
[root@gitclient myapp]# git push origin main

- only 特定分支
如下所示,在 only 关键字中指定特定 branches ,表示当前 job 会在指定的分支执行。
[root@gitclient myapp]# git rm .gitlab-ci.yml[root@gitclient myapp]# vim .gitlab-ci.yml
stages:- compilecompile:stage: compileonly:- main- devscript:- echo "Do compile work for main and dev"tags:- study-runner[root@gitclient myapp]# git add .gitlab-ci.yml
[root@gitclient myapp]# git commit -m "main and dev branches"
[root@gitclient myapp]# git push origin main

- only 反向排除
如下所示, only 关键字和 except 配合使用,表示排除特定的 branches ,表示当前 job 会在所排除的分支之外所有分支执行。
[root@gitclient myapp]# git checkout test
[root@gitclient myapp]# git rm .gitlab-ci.yml[root@gitclient myapp]# vim .gitlab-ci.yml
stages:- compilecompile:stage: compileonly:- branchesexcept:- mainscript:- echo "Do compile work except main"tags:- study-runner[root@gitclient myapp]# git add .gitlab-ci.yml
[root@gitclient myapp]# git commit -m "except main branches"
[root@gitclient myapp]# git push origin test
由于排除main,因此需要在任何除main以外的分支执行。
- if条件触发
如下所示, rules 关键字表示判断预定义变量 CI_COMMIT_BRANCH 是否等于 dev ,等于则执行 job 。
[root@gitclient myapp]# git checkout dev
[root@gitclient myapp]# git rm .gitlab-ci.yml[root@gitclient myapp]# vim .gitlab-ci.yml
stages:- compilecompile:stage: compilerules:- if: $CI_COMMIT_BRANCH == "dev"script:- echo "Do compile work if CI_COMMIT_BRANCH = dev"tags:- study-runner[root@gitclient myapp]# git add .gitlab-ci.yml
[root@gitclient myapp]# git commit -m "Do compile work if CI_COMMIT_BRANCH = dev"
[root@gitclient myapp]# git push origin dev

如下所示,切换到 test 分支,来执行判断诶 main 分支的任务,则不会执行任何动作。
[root@gitclient myapp]# git checkout test
[root@gitclient myapp]# git rm .gitlab-ci.yml[root@gitclient myapp]# vim .gitlab-ci.yml
stages:- compilecompile:stage: compilerules:- if: $CI_COMMIT_BRANCH == "main"script:- echo "Do compile work if CI_COMMIT_BRANCH = main"tags:- study-runner[root@gitclient myapp]# git add .gitlab-ci.yml
[root@gitclient myapp]# git commit -m "Do compile work if CI_COMMIT_BRANCH = main"
[root@gitclient myapp]# git push origin test
- 多if条件触发
如下所示, rules 关键字添加了多个条件,从上到下任何一个判断成功,则可以执行相应的 job 。
[root@gitclient myapp]# git checkout test
[root@gitclient myapp]# git rm .gitlab-ci.yml[root@gitclient myapp]# vim .gitlab-ci.yml
stages:- compilecompile:stage: compilerules:- if: $CI_COMMIT_BRANCH == "main"- if: $CI_COMMIT_BRANCH == "test"script:- echo "Do compile work main or test"tags:- study-runner[root@gitclient myapp]# git add .gitlab-ci.yml
[root@gitclient myapp]# git commit -m "Do compile work main or test"
[root@gitclient myapp]# git push origin test

- if排除特定分支
如下所示, if 关键字反选,表示排除特定的 branches ,表示当前 job 会在所排除的分支之外所有分支执行。
[root@gitclient myapp]# git checkout dev
[root@gitclient myapp]# git rm .gitlab-ci.yml[root@gitclient myapp]# vim .gitlab-ci.yml
stages:- compilecompile:stage: compilerules:- if: $CI_COMMIT_BRANCH != "main"script:- echo "Do compile work except main"tags:- study-runner[root@gitclient myapp]# git add .gitlab-ci.yml
[root@gitclient myapp]# git commit -m "Do compile work except main"
[root@gitclient myapp]# git push origin dev

- only 变量触发
如下所示, only 关键字也可以基于预定义变量 CI_COMMIT_BRANCH 是否等于 dev ,来执行有关 job 。
[root@gitclient myapp]# git checkout main
[root@gitclient myapp]# git rm .gitlab-ci.yml[root@gitclient myapp]# vim .gitlab-ci.yml
stages:- compilecompile:stage: compileonly:variables:- $CI_COMMIT_BRANCH == "main"script:- echo "Do compile work only main"tags:- study-runner[root@gitclient myapp]# git add .gitlab-ci.yml
[root@gitclient myapp]# git commit -m "Do compile work only main"
[root@gitclient myapp]# git push origin main

- only 变量排除触发
如下所示, only 关键字也可以基于预定义变量 CI_COMMIT_BRANCH 进行反向排除,来执行有关 job 。
[root@gitclient myapp]# git checkout dev
[root@gitclient myapp]# git rm .gitlab-ci.yml[root@gitclient myapp]# vim .gitlab-ci.yml
stages:- compilecompile:stage: compileonly:variables:- $CI_COMMIT_BRANCH != "main"script:- echo "Do compile work only main"tags:- study-runner[root@gitclient myapp]# git add .gitlab-ci.yml
[root@gitclient myapp]# git commit -m "Do compile work only except main"
[root@gitclient myapp]# git push origin dev

通常 only 和 except 更清晰明了,对于复杂的判断场景可使用 if 进行定义。
MR触发
通过 MergeRequest 触发流水想的 job 的事件是 merge_request 。
- only+refs方式
可以通过 only 关键字,即 only.refs 指定 merge_request 实现。
[root@gitclient myapp]# git checkout main
[root@gitclient myapp]# git rm .gitlab-ci.yml[root@gitclient myapp]# vim .gitlab-ci.yml
stages:- compilecompile:stage: compileonly:refs:- merge_requestsscript:- echo "Do compile work for main use merge_requests"tags:- study-runner[root@gitclient myapp]# git add .gitlab-ci.yml
[root@gitclient myapp]# git commit -m "Do compile work for main use merge_requests"
[root@gitclient myapp]# git push origin main
在使用 only 和 except 关键字的时候,也可以省略 refs 字段,即如上等效于如下:
stages:- compilecompile:stage: compileonly:- merge_requestsscript:- echo "Do compile merge_requests for main not use refs "tags:- study-runner
- only+预变量方式
可以通过 only 关键字,结合预变量指定 merge_request 实现。
stages:- compilecompile:stage: compileonly:variables:- $CI_PIPELINE_SOURCE == "merge_requests_event"script:- echo "Do compile merge_requests for main use only var"tags:- study-runner
- rules方式
可以通过 rules 关键字,结合预变量,指定 merge_request 实现。
stages:- compilecompile:stage: compilerules:- if: $CI_PIPELINE_SOURCE == "merge_requests_event"script:- echo "Do compile merge_requests for main use rules"tags:- study-runner
修改任何基于 main 所创建的分支里的任意文件,如 test 里的 README.md ,用于后续合入测试。
[root@gitclient myapp]# git checkout test
Switched to branch 'test'
[root@gitclient myapp]# vi README.md
# myapp## Test
Test my first mr file#……[root@gitclient myapp]# git add .
[root@gitclient myapp]# git commit -m "modity file to mr"
[root@gitclient myapp]# git push origin test
进入 myapp 项目,代码 ——> 合并请求,创建新的合并请求,将已经修改过的 test 支线合入 main。

选择源分支和目标分支。

新建合并请求。

确认合并情况。

当前流水线是判断有合入请求的时候,就执行相应的 job ,因此在 test 如何 main后,会执行作业。

总结:实现MR的触发方式多种,对于简单场景,建议使用 only 方式,需要和其他条件结合使用的复杂场景,可使用 rules 方式。
tag触发
通常对于研发流水线而言,当一个里程碑或者周期性完成的时候,会通过 tag 的方式对代码做备份快照。
打了 tag 后,期望可以触发流水线。
- 创建流水线
可以通过 only 关键字,指定特定的 tag ,如下所示:
[root@gitclient myapp]# git checkout main[root@gitclient myapp]# git rm .gitlab-ci.yml
[root@gitclient myapp]# vim .gitlab-ci.yml
stages:- compilecompile:stage: compileonly:- tagsscript:- echo "Do compile work use only tags"- echo "Test tags"tags:- study-runner[root@gitclient myapp]# git add .gitlab-ci.yml
[root@gitclient myapp]# git commit -m "Do compile work use only tags"[root@gitclient myapp]# git push origin main
- 测试打tag
图形界面进行myapp项目,标签 ——> 新建标签 。

创建一个测试的 tag 。

然后观察流水线是否自动触发。

手动人为触发
通常对于研发流水线,在一些特定或者非常重要环境,比如更新数据库、升级生产环境等,可能需要人工审核手动触发。
手动触发需要结合 when 关键字,设置为 manual 来实现。
手动触发通常需要和其他触发条件配合使用。
- 创建流水线
如下所示,通过 only 关键字控制当前 job 在 main 分支和打 tag 的时候触发,同时又通过 when 关键字指定 manual 设置为手动触发。
此时 job 的执行方式是首先需要满足 only 设置的触发条件,即只有在 main 分支或者打 tag 的时候,流水线才会出现在 gitlab 界面上,然后设置为手动单击触发。
[root@gitclient myapp]# git rm .gitlab-ci.yml
[root@gitclient myapp]# vim .gitlab-ci.yml
stages:- compilecompile:stage: compilewhen: manualonly:- main- tagsscript:- echo "Do compile work use only tags"- echo "Test tags"- echo "Test manual"tags:- study-runner[root@gitclient myapp]# git add .gitlab-ci.yml
[root@gitclient myapp]# git commit -m "Do compile work test tag & manual"[root@gitclient myapp]# git push origin main
提交后需要手动执行。

手动执行后观察执行结果。

定时任务触发
对于一些周期性的操作,比如数据采集、数据分析等,可以设置定时任务执行。
- 创建流水线
有如下多种方式创建相同效果的流水,任选一种即可。
[root@gitclient myapp]# git rm .gitlab-ci.yml
[root@gitclient myapp]# vim .gitlab-ci.yml
stages:- compilecompile:stage: compilewhen: manualonly:- schedulesscript:- echo "Do compile work use only schedules"tags:- study-runner
如上流水线采用 only ,only 中可以省略 refs ,因此如上流水线等价于如下:
stages:- compilecompile:stage: compilewhen: manualonly:refs:- schedulesscript:- echo "Do compile work use only schedules refs"tags:- study-runner
也可以使用如下 rules 实现:
stages:- compilecompile:stage: compilewhen: manualrules:refs:- if: $CI_PIPELIN_SOURCE == "schedules"script:- echo "Do compile work use rules schedules"tags:- study-runner
同样 only 也可以使用变量实现:
stages:- compilecompile:stage: compilewhen: manualonly:variables:- $CI_PIPELIN_SOURCE == "schedules"script:- echo "Do compile work use only var schedules"tags:- study-runner
- 提交流水线
[root@gitclient myapp]# git add .gitlab-ci.yml
[root@gitclient myapp]# git commit -m "Do compile use only schedules"
[root@gitclient myapp]# git push origin main
如上提交流水线后,由于是基于 only schedules 才会触发流水线作业,因此可在 gitlab webui 创建一个 schedules (流水线计划),用来观察流水线是否自动触发。
- 创建schedules
图形界面进行myapp项目,构建 ——> 流水线计划 ——> 创建新的流水线计划 。

该流水线计划是采用 cron 语法,即等价于 Linux 中的定时语法。

创建完即可在流水线计划中查看到已创建的记录。

可以查看下一次运行的具体时间,确认是否符合预期。

提示:对于 cron 可以直接通过在线工具进行生成所需计划任务: crontab表达生成器
等定义的时间到,流水作业会自动运行。

指定文件变更触发
可以配置通过 changes 关键字,实现检测指定文件是否变更而触发流水线。
主要适应的场景如下:某个代码仓库中,有前端项目目录,也有后端项目目录,当后端项目目录中的代码发生了安恒,只需要将后端应用对应的流水线触发即可,前端项目的流水线不需要执行,反之亦然。
- 创建流水线
如下所示,编译前后端的 Job 拆分为独立的两个,分别进行检测。
如果 Web 目录下的文件发生了变化,则编译前端项目;
如果 back 目录下的文件发生了变化,则编译后端项目。
[root@gitclient myapp]# git rm .gitlab-ci.yml[root@gitclient myapp]# vim .gitlab-ci.yml
stages:- compilecompile_back:stage: compileonly:changes:- back/**/*script:- echo "Do compile back work"tags:- study-runnercompile_web:stage: compileonly:changes:- web/**/*script:- echo "Do compile web work"tags:- study-runner
- 提交流水线
[root@gitclient myapp]# mkdir web back
[root@gitclient myapp]# git add .gitlab-ci.yml
[root@gitclient myapp]# git commit -m "Do compile test changes"
[root@gitclient myapp]# git push origin main
如上提交流水线后,由于是基于 only changes 才会触发流水线作业,因此当对应目录里文件发生改变的时候会自动触发对应的流水线。
- 模拟文件改变
测试文件改变后的流水线执行情况。
[root@gitclient myapp]# echo 'Test changes web file' > web/test.txt
[root@gitclient myapp]# git add .
[root@gitclient myapp]# git commit -m "Do compile web changes"[root@gitclient myapp]# git push origin main
观察流水线执行情况。

结合分支及文件变更触发
当指定文件变更的同时还可以结合对应的分支,从而实现特定的分支下的某个文件变更来触发流水线。
- 创建流水线
[root@gitclient myapp]# git checkout dev
[root@gitclient myapp]# git rm .gitlab-ci.yml[root@gitclient myapp]# vim .gitlab-ci.yml
stages:- compilecompile_back:stage: compileonly:refs:- main- devchanges:- back/**/*script:- echo "Do compile main or dev back work"tags:- study-runnercompile_web:stage: compileonly:refs:- main- devchanges:- web/**/*script:- echo "Do compile main or dev web work"tags:- study-runner
如上流水线也可以使用 rules 关键字实现,如上流水线等价于:
stages:- compilecompile_back:stage: compilerules:- if: $CI_COMMIT_BRANCH == "main" || $CI_COMMIT_BRANCH == "dev"changes:- back/**/*script:- echo "Do compile main or dev back work use rules"tags:- study-runnercompile_web:stage: compilerules:- if: $CI_COMMIT_BRANCH == "main" || $CI_COMMIT_BRANCH == "dev"changes:- web/**/*script:- echo "Do compile main or dev web work use rules"tags:- study-runner
- 提交流水线
[root@gitclient myapp]# git add .gitlab-ci.yml
[root@gitclient myapp]# git commit -m "Do compile test changes for main or dev"
[root@gitclient myapp]# git push origin dev
如上提交流水线后,由于是基于 only changes 才会触发流水线作业,因此当对应分支的目录里的文件发生改变的时候会自动触发对应的流水线。
- 模拟文件改变
测试文件改变后的流水线执行情况。
[root@gitclient myapp]# mkdir web back
[root@gitclient myapp]# echo 'Test changes back file' > web/test.txt
[root@gitclient myapp]# git add .
[root@gitclient myapp]# git commit -m "Do compile back changes"[root@gitclient myapp]# git push origin dev
观察流水线执行情况。

总结:对于目录中的文件是否发生变化从而触发流水线,对于一个项目存在多个微服务,且在同一个代码仓的时候能灵活满足场景的需求。
正则语法触发
可以通过预定义变量结合正则表达式来触发流水线,对于一些特定场景比较实用。
- 创建流水线
如下所示表示存在多个开发小组和前端小组分支,当 commit 的请求来自任何 dev 开发小组,则执行对应的流水线。
正则表达式
[root@gitclient myapp]# git checkout -b firstdev
[root@gitclient myapp]# git checkout -b secdev[root@gitclient myapp]# git rm .gitlab-ci.yml[root@gitclient myapp]# vim .gitlab-ci.yml
stages:- compilecompile_back:stage: compileonly:variables:- $CI_COMMIT_BRANCH =~ /.*dev$/script:- echo "Do compile work use var regular"tags:- study-runner
如上流水线也可以使用 rules 关键字实现,如上流水线等价于:
stages:- compilecompile_back:stage: compilerules:- if: $CI_COMMIT_BRANCH =~ /.*dev$/script:- echo "Do compile work use rules regular"tags:- study-runner
- 提交流水线
[root@gitclient myapp]# git add .gitlab-ci.yml
[root@gitclient myapp]# git commit -m "Do compile work use var regular"
[root@gitclient myapp]# git push origin secdev
如上提交流水线后,由于是基于 secdev 分支提交的,因此会自动触发流水线作业,观察流水线执行情况。

总结:对于目录中的文件是否发生变化从而触发流水线,对于一个项目存在多个微服务,且在同一个代码仓的时候能灵活满足场景的需求。
相关文章:
006.Gitlab CICD流水线触发
文章目录 触发方式介绍触发方式类型 触发方式实践分支名触发MR触发tag触发手动人为触发定时任务触发指定文件变更触发结合分支及文件变更触发正则语法触发 触发方式介绍 触发方式类型 Gitlab CICD流水线的触发方式非常灵活,常见的有如下几类触发方式: …...
512天,倔强生长:一位技术创作者的独白
亲爱的读者与同行者: 我是倔强的石头_,今天是我在CSDN成为创作者的第512天。当系统提示我写下这篇纪念日文章时,我恍惚间想起了2023年11月19日的那个夜晚——指尖敲下《开端——》的标题,忐忑又坚定地按下了“发布”键。那时的我…...
【目标检测】【YOLO综述】YOLOv1到YOLOv10:最快速、最精准的实时目标检测系统
YOLOv1 to YOLOv10: The fastest and most accurate real-time object detection systems YOLOv1到YOLOv10:最快速、最精准的实时目标检测系统 论文链接 0.论文摘要 摘要——本文是对YOLO系列系统的全面综述。与以往文献调查不同,本综述文…...
青少年编程与数学 02-016 Python数据结构与算法 16课题、贪心算法
青少年编程与数学 02-016 Python数据结构与算法 16课题、贪心算法 一、贪心算法的基本概念定义组成部分 二、贪心算法的工作原理三、贪心算法的优点四、贪心算法的缺点五、贪心算法的应用实例(一)找零问题(二)活动安排问题&#x…...
日常学习开发记录-slider组件
日常学习开发记录-slider组件 从零开始实现一个优雅的Slider滑块组件前言一、基础实现1. 组件结构设计2. 基础样式实现3. 基础交互实现 二、功能增强1. 添加拖动功能2. 支持范围选择3. 添加垂直模式 三、高级特性1. 键盘操作支持2. 禁用状态 五、使用示例六、总结 从零开始实现…...
Windows 系统如何使用Redis 服务
前言 在学习过程中,我们长期接触到的是Mysql 关系型数据库,也是够我们平时练习项目用的,但是后面肯定会有大型数据的访问就要借助新的新的工具。 一、什么是Redis Redis(Remote Dictionary Server)是一个基于内存的 键…...
【unity游戏开发入门到精通——UGUI】CanvasScaler画布缩放器组件
注意:考虑到UGUI的内容比较多,我将UGUI的内容分开,并全部整合放在【unity游戏开发——UGUI】专栏里,感兴趣的小伙伴可以前往逐一查看学习。 文章目录 一、CanvasScaler画布缩放器组件是什么二、CanvasScaler的三种适配模式1、Cons…...
Hugging Face 模型:AI 模型的“拥抱”与开源革命!!!
🌐 Hugging Face 模型:AI 模型的“拥抱”与开源革命 用表情符号、图表和代码,探索开源模型生态的底层逻辑与应用场景! 🌟 名字由来:为什么叫 Hugging Face? “Hugging”:象征 开放…...
关于 人工智能(AI)发展简史 的详细梳理,按时间阶段划分,涵盖关键里程碑、技术突破、重要人物及挑战
以下是关于 人工智能(AI)发展简史 的详细梳理,按时间阶段划分,涵盖关键里程碑、技术突破、重要人物及挑战: 字数:约2500字 逻辑结构:时间线清晰,分阶段描述技术突破、关键事件与挑战…...
微服务即时通信系统---(四)框架学习
目录 ElasticSearch 介绍 安装 安装kibana ES客户端安装 头文件包含和编译时链接库 ES核心概念 索引(Index) 类型(Type) 字段(Field) 映射(mapping) 文档(document) ES对比MySQL Kibana访问ES测试 创建索引库 新增数据 查看并搜索数据 删除索引 ES…...
Android查看依赖树的方法,简单有效
一、使用命令打印 在工具栏“Terminal”中输入以下命令,即可打印依赖树信息 gradlew xxxx:dependencies (“xxxx”为module名称)二、工具栏双击打印 右侧“Gradle”工具栏打开按下图顺序依次查找到“dependencies”,双击后依赖树就会在控制台中打印出…...
自动化测试工具playwright中文文档-------14.Chrome 插件
介绍 注意 插件仅在以持久化上下文启动的 Chrome/Chromium 浏览器中工作。请谨慎使用自定义浏览器参数,因为其中一些可能会破坏 Playwright 的功能。 以下是获取位于 ./my-extension 的 Manifest v2 插件背景页面句柄的代码示例。 from playwright.sync_api imp…...
GitHub配置密钥
1.生成SSH密钥 1)检查 SSH 密钥是否存在 首先,确认是否已经在本地系统中生成了 SSH 密钥对。可以通过以下命令检查: ls -al ~/.ssh 在命令输出中,应该能看到类似 id_rsa 和 id_rsa.pub 这样一对文件。如果这些文件不存在&#…...
【2-10】E1与T1
前言 之前我们简单介绍了人类从电话线思维到如今的数据报分组交换思维过渡时期的各种技术产物,今天我们重点介绍 E1/T1技术。 文章目录 前言1. 产生背景2. T13. E14. SONET4.1 OC-14.2 OC-3 及其它 5. SDH5.1. STM-1 6. SONET VS SDH后记修改记录 1. 产生背景 E1/…...
【设计模式】适配器模式:让不兼容的接口和谐共处
引言 在软件开发中,我们经常会遇到这样的情况:两个已经存在的接口无法直接协同工作,但我们又希望它们能够无缝对接。这时,适配器模式就派上用场了。适配器模式(Adapter Pattern)是一种结构型设计模式&…...
Servlet、HTTP与Spring Boot Web全面解析与整合指南
目录 第一部分:HTTP协议与Servlet基础 1. HTTP协议核心知识 2. Servlet核心机制 第二部分:Spring Boot Web深度整合 1. Spring Boot Web架构 2. 创建Spring Boot Web应用 3. 控制器开发实践 4. 请求与响应处理 第三部分:高级特性与最…...
PTA:古风排版
中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。 输入格式: 输入在第一行给出一个正整数N(<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串&a…...
Android LiveData学习总结(源码级理解)
LiveData 工作原理 数据持有与观察者管理:LiveData 内部维护着一个数据对象和一个观察者列表。当调用 observe 方法注册观察者时,会将 LifecycleOwner 和 Observer 包装成 LifecycleBoundObserver 对象并添加到观察者列表中。生命周期感知:L…...
Pandas进行数据预处理(标准化数据)③
数据标准化处理代码解析 数据标准化处理代码解析课前预习1. 离差标准化(Min - Max Scaling)结果2. 标准差标准化(Standard Scaling)结果3. 小数定标标准化(Decimal Scaling)结果 代码整体概述代码详细解析1…...
vue里provide作用:将一组全局方法注入到 Vue 应用的所有子组件中
在 Vue.js 中, provide(mainFunc, {...}) 是依赖注入(Dependency Injection)的提供者(provider)部分,它的作用是: 功能说明 : 将一组全局方法注入到 Vue 应用的所有子组件中子组件可以通过 inject 接收这些方法 import { provi…...
基于uniapp 实现画板签字
直接上效果图 代码 <template><view class"container"><!-- 签名画布 --><view class"canvas-container"><canvas canvas-id"signCanvas" class"sign-canvas"touchstart"handleTouchStart"touc…...
JDBC 初认识、速了解
目录 一. JDBC的简介 1. 数据的持久化 2. 什么是JDBC 二. JDBC中常用的类和接口 1. Driver 接口 2. DriverManager 类 3. Connection 接口 4. Statement 接口 5. PreparedStatement接口 6. ResultSet 接口 三. 总结 前言 从现在开始就来讲解JDBC的相关知识了 本文的…...
(2025亲测可用)Chatbox多端一键配置Claude/GPT/DeepSeek-网页端配置
1. 资源准备 API Key:此项配置填写在一步API官网创建API令牌,一键直达API令牌创建页面创建API令牌步骤请参考API Key的获取和使用API Host:此项配置填写https://yibuapi.com/v1查看支持的模型请参考这篇教程模型在线查询 2. ChatBox网页版配…...
4.vtk光照vtkLight
文章目录 VTK中的光照1. vtkLight 的两种类型:位置光照和方向光照2. vtkLight 的常用方法3. 方法命名风格4. vtkProp 的可见性与 vtkLight 的开关 示例 VTK中的光照 vtkLight: 用于定义一个或多个光源。每个光源可以有其颜色、位置、焦点等属性。 vtkActor: 每个vtk…...
【速写】formatting_func与target_modules的细节(peft)
文章目录 SFTTrainer的构造参数版本差异怎么写formatting_func?关于lora_config中的target_modules能否在target_modules中指定特定某个模块? 以下面的示例pipeline为案: # -*- coding: utf8 -*- # author: caoyang # email: caoyangstu.sufe.edu.cnfr…...
YOLOv2学习笔记
YOLOv2 背景 YOLOv2是YOLO的第二个版本,其目标是显著提高准确性,同时使其更快 相关改进: 添加了BN层——Batch Norm采用更高分辨率的网络进行分类主干网络的训练 Hi-res classifier去除了全连接层,采用卷积层进行模型的输出&a…...
第十五届蓝桥杯----数字串个数\Python
目录 问题: 思想: 代码: 问题: Q:小蓝想要构造出一个长度为 10000 的数字字符串,有以下要求: 1) 小蓝不喜欢数字 0 ,所以数字字符串中不可以出现 0 ; 2) 小蓝喜欢数字 3 和 7 ,所以数字字符串中必须…...
【YOLOv8改进 - 卷积Conv】PConv(Pinwheel-shaped Conv): 风车状卷积用于红外小目标检测, 复现!
YOLOv8目标检测创新改进与实战案例专栏 专栏目录: YOLOv8有效改进系列及项目实战目录 包含卷积,主干 注意力,检测头等创新机制 以及 各种目标检测分割项目实战案例 专栏链接: YOLOv8基础解析+创新改进+实战案例 文章目录 YOLOv8目标检测创新改进与实战案例专栏介绍摘要文章链…...
LeetCode:链表
160. 相交链表 /*** 单链表的定义* Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) {* val x;* next null;* }* }*/ public class Solution {public ListNode getIntersectionN…...
Dockerfile项目实战-单阶段构建Vue2项目
单阶段构建镜像-Vue2项目 1 项目层级目录 以下是项目的基本目录结构: 2 Node版本 博主的Windows电脑安装了v14.18.3的node.js版本,所以直接使用本机电脑生成项目,然后拷到了 Centos 7 里面 # 查看本机node版本 node -v3 创建Vue2项目 …...
