当前位置: 首页 > news >正文

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

081

  • 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

082

  • 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

083

如下所示,切换到 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

084

  • 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

085

  • 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

086

  • 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

087

通常 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。

088

选择源分支和目标分支。

089

新建合并请求。

090

确认合并情况。

091

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

092

总结:实现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项目,标签 ——> 新建标签 。
    093

创建一个测试的 tag 。
094

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

手动人为触发

通常对于研发流水线,在一些特定或者非常重要环境,比如更新数据库、升级生产环境等,可能需要人工审核手动触发。

手动触发需要结合 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

提交后需要手动执行。
096

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

定时任务触发

对于一些周期性的操作,比如数据采集、数据分析等,可以设置定时任务执行。

  • 创建流水线
    有如下多种方式创建相同效果的流水,任选一种即可。
[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项目,构建 ——> 流水线计划 ——> 创建新的流水线计划 。

098

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

099

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

100

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

101

提示:对于 cron 可以直接通过在线工具进行生成所需计划任务: crontab表达生成器

等定义的时间到,流水作业会自动运行。

102

指定文件变更触发

可以配置通过 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

观察流水线执行情况。

103

结合分支及文件变更触发

当指定文件变更的同时还可以结合对应的分支,从而实现特定的分支下的某个文件变更来触发流水线。

  • 创建流水线
[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

观察流水线执行情况。
104

总结:对于目录中的文件是否发生变化从而触发流水线,对于一个项目存在多个微服务,且在同一个代码仓的时候能灵活满足场景的需求。

正则语法触发

可以通过预定义变量结合正则表达式来触发流水线,对于一些特定场景比较实用。

  • 创建流水线
    如下所示表示存在多个开发小组和前端小组分支,当 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 分支提交的,因此会自动触发流水线作业,观察流水线执行情况。
105

总结:对于目录中的文件是否发生变化从而触发流水线,对于一个项目存在多个微服务,且在同一个代码仓的时候能灵活满足场景的需求。

相关文章:

006.Gitlab CICD流水线触发

文章目录 触发方式介绍触发方式类型 触发方式实践分支名触发MR触发tag触发手动人为触发定时任务触发指定文件变更触发结合分支及文件变更触发正则语法触发 触发方式介绍 触发方式类型 Gitlab CICD流水线的触发方式非常灵活,常见的有如下几类触发方式: …...

服务器远程端口详解

服务器远程端口详解 一、服务器远程端口的概念与作用 1. 端口的基本定义 服务器远程端口是计算机网络中用于标识不同应用程序或服务的逻辑接口。通过TCP/IP协议栈的"Socket"机制,计算机可以通过软件方式与其他设备建立通信通道。每个端口对应一个16位无…...

如何在 Vue 3 中实现百度地图位置选择器组件

如何在 Vue 3 中实现百度地图位置选择器组件 前言 在开发前端应用时,地图选择器是一个非常常见的需求。尤其是在一些需要用户选择地址的场景,如电商平台、旅游网站、酒店预定等,百度地图组件能提供准确的地理位置服务。在本文中&#xff0c…...

es6学习02-let命令和const命令

一、let命令 1.let块级作用域: let关键字 VS var关键字 2.for循环计数器很适合let命令 var:整个for循环中一直都是同一个i在做1,最后输出的就是10; let:每循环一次都是多一个i的赋值,最后输出是可以调出…...

电路方案分析(二十)TPS63xxx系列DC/DC电源EMI PCB设计方案

tips:资料来自网络,仅供学习使用。[TOC](TPS63xxx系列DC/DC电源EMI PCB设计方案) 1.概述 通过TPS63xxx系列DC/DC电源模块来分析降低直流/直流降压/升压转换器辐射 EMI 的来源以及相关PCB设计。 下面都以最常用的TPS63070为例说明: 典型应用…...

DeepSeek大语言模型部署指南:从基础认知到本地实现

目录 一、DeepSeek简介:开源领域的新兴力量 1.1 公司背景与发展历程 1.2 核心产品DeepSeek-R1的技术特点 1.3 行业影响与伦理挑战 二、官方资源获取:全面掌握DeepSeek生态 2.1 官方网站与API服务 2.2 开源代码库资源 2.3 模型部署工具Ollama简介…...

09-设计模式 企业场景 面试题-mk

你之前项目中用过设计模式吗? 需求:设计一个咖啡店点餐系统。 设计一个咖啡类(Coffee),并定义其两个子类(美式咖啡【AmericanCoffee】和拿铁咖啡【LatteCoffee】);再设计一个咖啡店类(CoffeeStore),咖啡店具有点咖啡的功能。具体类图设计如下: 上面的对象都是ne…...

达梦数据库-学习-18-ODBC数据源配置(Linux)

一、环境信息 名称值CPU12th Gen Intel(R) Core(TM) i7-12700H操作系统CentOS Linux release 7.9.2009 (Core)内存4G逻辑核数2DM版本1 DM Database Server 64 V8 2 DB Version: 0x7000c 3 03134284194-20240703-234060-20108 4 Msg Versi…...

解决VS2022中scanf报错C4996

这个的原因是因为新版的VS认为scanf不安全,要去使用scanf_s,但在C语言中就需要scanf,所以我们只要以以下步骤解决就可以了。 只要加入宏定义即可 #define _CRT_SECURE_NO_WARNINGS 因为本人已经很少写小案例了,所以就用这个办法…...

Python(11)Python判断语句全面解析:从基础到高级模式匹配

目录 一、条件逻辑的工程价值1.1 真实项目中的逻辑判断1.2 判断语句类型矩阵 二、基础判断深度解析2.1 多条件联合判断2.2 类型安全判断 三、模式匹配进阶应用3.1 结构化数据匹配3.2 对象模式匹配 四、判断语句优化策略4.1 逻辑表达式优化4.2 性能对比测试 五、典型应用场景实战…...

Quartus II的IP核调用及仿真测试

目录 第一章 什么是IP核?第二章 什么是LPM?第一节 设置LPM_COUNTER模块参数第二节 仿真 第三章 什么是PLL?第一节 设置ALTPLL(嵌入式锁相环)模块参数第二节 仿真 第四章 什么是RAM?第一节 RAM_1PORT的调用第…...

如何修改服务器TTL值

Windows默认返回的TTL值为128,Linux为64,我们怎么修改这个值呢? 目录 一. Windows 二. Linux 临时更改 永久更改 一. Windows WinR输入regedit,打开注册表 路径:计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentContro…...

大模型LLM表格报表分析:markitdown文件转markdown,大模型markdown统计分析

整体流程:用markitdown工具文件转markdown,然后大模型markdown统计分析 markitdown https://github.com/microsoft/markitdown 在线体验:https://huggingface.co/spaces/AlirezaF138/Markitdown 安装: pip install markitdown…...

劫持SUID程序提权彻底理解Dirty_Pipe:从源码解析到内核调试

DirtyPipe(CVE-2022-0847)漏洞内核调试全流程指南 本文主要面向对内核漏洞挖掘与调试没有经验的初学者,结合 CVE-2022-0847——著名的 Dirty Pipe 漏洞,带你从零开始学习 Linux 内核调试、漏洞复现、原理分析与漏洞利用。该漏洞危害极大,并且概念简单明了,无需复杂前置知…...

React 组件样式

在这里插入图片描述 分为行内和css文件控制 行内 通过CSS中类名文件控制...

嵌入式人工智能应用-第三章 opencv操作3 图像平滑操作 下

5 高斯噪声(Gaussian Noise) 高斯噪声(Gaussian Noise)是一种符合正态(高斯)分布的随机噪声,广泛存在于传感器采集、信号传输等场景中。以下是关于高斯噪声的详细说明、添加方法及滤波方案。 …...

OSPF的接口网络类型【复习篇】

OSPF在不同网络环境下默认的不同工作方式 [a3]display ospf interface g 0/0/0 # 查看ospf接口的网络类型网络类型OSPF接口的网络类型(工作方式)计时器BMA(以太网)broadcast ,需要DR/BDR的选举hello:10s…...

maven编译jar踩坑[sqlite.db]

背景: 最近在项目中搞多数据源切换的job,在src/resource下有初始化的sqlite默认文件供后续拷贝使用,在测试阶段没有什么问题,但是一部署到服务器上运行就有问题。 报错现象: 找不到这个sqlite.db文件或者文件格式有问题&#x…...

【软考系统架构设计师】软件工程

1、 软件开发生命周期 软件定义时期:包括可行性研究和详细需求分析过程,任务是确定软件开发工程必须完成的总目标,具体分为问题定义、可行性研究、需求分析等 软件开发时期:软件的设计与实现,分为概要设计、详细设计、…...

蓝桥杯单片机刷题——ADC测量电位器的电压

设计要求 通过PCF8591的ADC通道测量电位器RB2的输出电压,并使用套件上提供的USB转串口功能,完成下列程序设计要求。 串口每次接收包含5个字符的字符串, 1)若接收的5个字符中有字符’a’或’A’,则数码管显示一位小数…...

零基础上手Python数据分析 (12):DataFrame 数据清洗与预处理 (下) - 类型转换、格式化、文本与日期处理

写在前面 上一篇博客,我们学习了如何使用 Pandas 处理数据分析中最常见的 “脏数据”:缺失值、重复值和异常值。 这为我们处理数据质量问题打下了坚实的基础。 然而,数据清洗的挑战远不止于此。 在实际数据中,我们还会经常遇到 数据类型不一致、数据格式不规范、文本数据混…...

免费下载 | 2025清华五道口:“十五五”金融规划研究白皮书

《2025清华五道口:“十五五”金融规划研究白皮书》的核心内容主要包括以下几个方面: 一、五年金融规划的重要功能与作用 凝聚共识:五年金融规划是国家金融发展的前瞻性谋划和战略性安排,通过广泛听取社会各界意见,凝…...

制造一只电子喵 (qwen2.5:0.5b 微调 LoRA 使用 llama-factory)

AI (神经网络模型) 可以认为是计算机的一种新的 “编程” 方式. 为了充分利用计算机, 只学习传统的编程 (编程语言/代码) 是不够的, 我们还要掌握 AI. 本文以 qwen2.5 和 llama-factory 举栗, 介绍语言模型 (LLM) 的微调 (LoRA SFT). 为了方便上手, 此处选择使用小模型 (qwen2…...

Java中parallelStream并行流使用指南

Java中parallelStream并行流使用指南 在 Java 中,parallelStream() 是 Java 8 引入的一个用于并行处理集合数据的工具,它基于 Fork/Join框架 实现,能够自动将任务拆分成子任务并利用多核处理器并行执行。以下是对 parallelStream的详细说明和…...

Python及C++中的列表

一、Python中的列表(List) Python的列表是动态数组,内置于语言中,功能强大且易用,非常适合算法竞赛。 1. 基本概念 定义:列表是一个有序、可变的序列,可以存储任意类型的元素(整数…...

mybatis plus 分页查询出来数据后对他二次 修改数据 封装返回

mybatis plus 分页查询出来数据后对他二次 修改数据 封装返回 /*** 搜索问卷** param keyword* param pageNo* param pageSize* return*/AutoLog(value "v_survey-搜索")ApiOperation(value"v_survey-搜索", notes"v_survey-搜索")GetMapping(v…...

海洋大地测量基准与水下导航系列之八我国海洋水下定位装备发展现状

中国国家综合PNT体系建设重点可概括为“51N”,“5”指5大基础设施,包括重点推进下一代北斗卫星导航系统、积极发展低轨导航增强系统、按需发展水下导航系统、大力发展惯性导航系统、积极探索脉冲星导航系统;“1”是实现1个融合发展&#xff0…...

基于单片机的电梯智能识别电动车阻车系统设计与实现

标题:基于单片机的电梯智能识别电动车阻车系统设计与实现 内容:1.摘要 随着电动车在日常生活中的普及,将电动车带入电梯带来的安全隐患日益凸显,如引发火灾等。本研究的目的是设计并实现一种基于单片机的电梯智能识别电动车阻车系统。方法上&#xff0c…...

什么是柜台债

柜台债(柜台债券业务)是指通过银行等金融机构的营业网点或电子渠道,为投资者提供债券买卖、托管、结算等服务的业务模式。它允许个人、企业及机构投资者直接参与银行间债券市场的交易,打破了以往仅限机构参与的壁垒。以下是综合多…...

.py文件和.ipynb文件的区别:完整教程

一、概述 Python开发者常用的两种文件格式.py和.ipynb各有特点,本教程将通过对比分析、代码示例和场景说明,帮助开发者全面理解二者的区别与联系。 二、核心区别对比 1. 文件格式本质 特性.ipynb文件.py文件文件类型JSON结构化文档纯文本文件存储内容…...

Python中NumPy的逻辑和比较

在数据科学和科学计算领域,NumPy是一个不可或缺的Python库。它提供了高效的多维数组对象以及丰富的数组操作函数,其中逻辑和比较操作是NumPy的核心功能之一。通过灵活运用这些操作,我们可以轻松实现数据筛选、条件判断和复杂的数据处理任务。…...

tt_Docker

快速上手 查看 Docker 服务运行状态;查看本地镜像;从 Docker Hub 拉取基础镜像, 我们此处选择 ubuntu:18.04 镜像;再次查看本地镜像;使用 ubuntu:18.04 镜像构建容器,并交互式运行容器;在容器内部执行 LS 命令;退出容器;查看本地容器实例;再次启动停止的…...

虚幻引擎5-Unreal Engine笔记之“将MyStudent变量设置为一个BP_Student的实例”这句话如何理解?

虚幻引擎5-Unreal Engine笔记之“将MyStudent变量设置为一个BP_Student的实例”这句话如何理解? code review! 文章目录 虚幻引擎5-Unreal Engine笔记之“将MyStudent变量设置为一个BP_Student的实例”这句话如何理解?理解这句话的关键点1.类&#xff08…...

compose map 源码解析

目录 TileCanvas ZoomPanRotateState ZoomPanRotate 布局,手势处理完了,就开始要计算tile了 MapState TileCanvasState telephoto的源码已经分析过了.它的封装好,扩展好,适用于各种view. 最近又看到一个用compose写的map,用不同的方式,有点意思.分析一下它的实现流程与原…...

IDEA202403 常用设置【持续更新】

文章目录 1、设置maven2、设置JDK3、菜单栏固定展示4、连接Gitee第一步、安装插件第二步、Gitee账号配置 IDEA 是程序员的编程利器,需要具备其的各种配置,提高工作效率。Java项目启动,两个关键设置:Maven 和 JDK设置。 1、设置mav…...

从零开始开发纯血鸿蒙应用之语音输入

从零开始开发纯血鸿蒙应用 〇、前言一、认识 speechRecognizer1、使用方式2、依赖权限3、结果回写 二、实现语音识别功能1、创建语音识别引擎2、设置事件监听3、启动识别4、写入音频数据5、操作控制 三、总结 〇、前言 除了从图片中识别文本外,语音输入也是一种现代…...

c++ STL常用工具的整理和思考

蓝桥杯后,我整理了这些常用的C STL工具 作为一个算法竞赛的中等生,以前总觉得STL“花里胡哨”,不如自己写数组和循环踏实。但这次蓝桥杯发现,合理用STL能省很多时间,甚至避免低级错误。下面是我总结的常用知识点和踩过…...

Go:复合数据结构

数组 定义:数组是固定长度、元素数据类型相同的序列 。元素通过索引访问,索引从 0 到数组长度减 1 。可用len函数获取元素个数 。 初始化:默认元素初始值为类型零值(数字为 0 ) 。可使用数组字面量初始化,…...

SQL 语句基础(增删改查)

文章目录 一、SQL 基础概念1. SQL 简介2. 数据库系统的层次结构 二、SQL 语句分类1. DDL(Data Definition Language 数据定义语言)1.1 CREATE1.1.1 创建数据库1.1.2 创建数据表1.1.3 创建用户 1.2 ALTER1.2.1 AlTER 添加字段名1.2.2 ALTER 修改字段名1.2…...

【蓝桥杯 CA 好串的数目】题解

题目链接 考虑令 p r e [ i ] pre[i] pre[i] 表示 [ p r e [ i ] , i ] [pre[i], i] [pre[i],i] 是连续非递减子串&#xff0c;这可以类似双指针 O ( n ) O(n) O(n) 预处理&#xff1a; std::vector<int> pre(n); for (int r 1, l 0; r < n; r) {if (s[r] ! s[…...

Oracle for Linux安装和配置(11)——Linux命令

11.1. Linux命令 Linux是目前比较常用和流行的操作系统,现在很多生产环境就会用到它。随着其功能、性能、稳定性和可靠性等方面的日渐增强和完善,加之其成本上的优势,其市场占有率逐日攀升,也得到越来越多广大用户的关注和青睐。但作为一种操作系统,其安装、配置、管理和…...

Linux基础7

一、逻辑卷管理 查看所有物理卷&#xff1a;pvs 查看当前系统卷组&#xff1a;vgs 查看所有逻辑卷&#xff1a;lvs 新创建系统卷组&#xff1a;vgcreate [参数] ​ [volume name] url/sdb[1-2] ​ eg&#xff1a;vgcreate vg_Test /dev/sdb{1,2} >…...

C#打开文件及目录脚本

如果每天开始工作前都要做一些准备工作&#xff0c;比如打开文件或文件夹&#xff0c;我们可以使用代码一键完成。 using System.Diagnostics; using System.IO;namespace OpenFile {internal class Program{static void Main(string[] args){Console.WriteLine("Hello, …...

Docker 镜像 的常用命令介绍

拉取镜像 $ docker pull imageName[:tag][:tag] tag 不写时&#xff0c;拉取的 是 latest 的镜像查看镜像 查看所有本地镜像 docker images or docker images -a查看完整的镜像的数字签名 docker images --digests查看完整的镜像ID docker images --no-trunc只查看所有的…...

Python数组学习之旅:数据结构的奇妙冒险

Python数组学习之旅:数据结构的奇妙冒险 第一天:初识数组的惊喜 阳光透过窗帘缝隙洒进李明的房间,照亮了他桌上摊开的笔记本和笔记本电脑。作为一名刚刚转行的金融分析师,李明已经坚持学习Python编程一个月了。他的眼睛因为昨晚熬夜编程而微微发红,但脸上却挂着期待的微…...

Vue 3 和 Vue 2 的区别及优点

Vue.js 是一个流行的 JavaScript 框架&#xff0c;广泛用于构建用户界面和单页应用。自 Vue 3 发布以来&#xff0c;很多开发者开始探索 Vue 3 相较于 Vue 2 的新特性和优势。Vue 3 引入了许多改进&#xff0c;优化了性能、增强了功能、提升了开发体验。本文将详细介绍 Vue 2 和…...

特殊定制版,太给力了!

今天给大家分享一款超棒的免费录屏软件&#xff0c;真的是录屏的好帮手&#xff01; 这款软件功能可以录制 MP4、AVI、WMV 格式的标清、高清、原画视频&#xff0c;满足你各种需求。 云豹录屏大师 多功能录屏神器 它的界面特别简洁&#xff0c;上手超快&#xff0c;用起来很顺…...

Vue事件修饰符课堂练习

Vue事件修饰符课堂练习 题目‌&#xff1a;基于 Vue 2.0&#xff0c;使用事件修饰符 .stop、.prevent、.capture、.self 和 .once&#xff0c;为按钮绑定 click 事件&#xff0c;并展示每个修饰符的作用。 要求‌&#xff1a; 创建一个 Vue 实例&#xff0c;并绑定到一个 HT…...

Y1——ST表

知识点 ST表 只能询问&#xff0c;不能修改 ST表的预处理&#xff1a; 使用了DP的思想&#xff0c;设a是要求区间最值的数列&#xff0c;f(i,j)表示从第i个数起连续2^j个数中的最大值 状态转移方程 f [ i , j ]max( f [ i , j-1 ], f [ i 2 ^ j-1,j - 1]) 建立ST表 vo…...

Python Cookbook-5.14 给字典类型增加排名功能

任务 你需要用字典存储一些键和“分数”的映射关系。你经常需要以自然顺序(即以分数的升序)访问键和分数值&#xff0c;并能够根据那个顺序检查一个键的排名。对这个问题&#xff0c;用dict 似乎不太合适。 解决方案 我们可以使用 dict 的子类&#xff0c;根据需要增加或者重…...