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

Jenkins的介绍与相关配置

Jenkins的介绍与配置

一.CI/CD介绍

1.CI/CD概念

①CI

中文意思是持续集成 (Continuous Integration, CI) 是一种软件开发流程,核心思想是在代码库中的每个提交都通过自动化的构建和测试流程进行验证。这种方法可以帮助团队更加频繁地交付软件,并尽早发现和修复潜在的问题,从而提高软件质量和开发效率。

②CD

持续交付(Continuous Delivery,简称CD)是一种软件开发和交付的方法论,旨在通过自动化流程,实现软件的频繁交付和部署。CD的目标是使软件交付过程更加高效、可预测和可靠。

在传统的软件开发模式中,软件交付通常是一个周期较长的过程,包括各种手动的测试和部署步骤。而CD则通过自动化来减少这些手动步骤,从而加快软件的交付速度,降低错误率,并提高整体的质量。

2.Gitlab内置持续集成

(1)持续集成CI

①CI基本原理

CI 的基本原理是将代码库中的每个变更都自动构建和测试,如果构建和测试成功,则可以将代码合并到主干分支上。这样可以确保代码库始终处于可编译、可测试和可部署的状态,避免因为代码冲突、依赖问题等导致的不稳定和错误。

②在 CI 流程中,通常需要进行以下几个步骤
  • 编写测试:开发人员首先需要编写单元测试、集成测试和端到端测试等各种类型的测试用例,用于验证代码的正确性和功能。
  • 自动构建:使用自动化构建工具,例如 Maven、Gradle 或者 npm 等,来生成可以运行的应用程序或者库。
  • 自动测试:使用自动化测试工具,例如 JUnit、TestNG 或者 Jest 等来执行各种测试用例。
  • 持续集成服务器:使用持续集成服务器,例如 Jenkins、Travis CI 或者 GitLab CI,通过 webhook 或者轮询的方式来监听代码库中的提交,并触发自动构建和测试流程。
  • 持续反馈:如果构建或测试失败,持续集成服务器将会发送通知或者邮件给相应的负责人,以便尽早发现和解决问题。

总:持续集成是一种关键的软件开发流程,它可以帮助团队更好地管理代码变更的质量和稳定性,提高软件质量和开发效率。

(2)持续交付(CD)

①持续交付(Continuous Delivery,简称CD)的基本原理包括以下几个方面
  • 自动化:实现自动化的构建、测试和部署流程,包括代码合并、构建、测试、打包和部署等环节,避免手动操作的出错和延误,并减少人为成本和人力资源的浪费。
  • 持续集成(Continuous Integration,简称CI):将开发人员提交的代码自动集成到共享代码仓库中,并通过自动化的构建和测试工具进行自动化构建和测试,确保新代码与已有代码的完整性和稳定性。
  • 可重复性:使用约定俗成的约束和标准化的工具链,确保系统可以反复地构建、测试和部署,保证软件的可重复性和一致性。
  • 零停机部署:CD的目标是实现零停机部署,即在不影响生产环境运行的情况下完成部署。为了实现这个目标,需要使用诸如灰度发布、蓝绿部署、滚动升级等技术和策略。
  • 实时监控与反馈:随着软件交付速度的提高,实时监控和反馈变得越来越重要。持续交付需要使用实时监控和反馈机制,对软件的运行状态进行检测和评估,并及时识别和修复潜在的问题。
  • 安全和合规性:持续交付需要确保软件的安全性和合规性。为此,需要使用各种安全和合规性测试工具和流程,确保软件能够满足相关的安全和合规性标准。
②在 CD 流程中,通常需要进行以下几个步骤
  • 代码提交:开发人员将代码提交到版本控制系统(如Git)中的共享代码仓库。这些提交包括新功能、bug修复或其他代码更改。
  • 自动化构建:一旦代码提交,自动化构建工具(如Jenkins、TeamCity等)会自动从代码仓库拉取最新代码,并进行构建。构建过程可能包括编译源代码、生成可执行文件、打包应用程序等。
  • 自动化测试:构建完成后,自动化测试工具会运行各种类型的测试,例如单元测试、集成测试、端到端测试等。这些测试可以验证代码的正确性、性能、安全性和兼容性。
  • 部署准备:一旦测试通过,系统可以进入部署准备阶段。这可能包括生成部署包、配置环境变量、准备数据库等。
  • 自动化部署:通过自动化部署工具(如Ansible、Chef、Kubernetes等),部署包会被自动部署到目标环境中。这可以是开发、测试或生产环境,具体取决于部署策略和需求。
  • 实时监测与反馈:部署完成后,系统会进入实时监测和反馈阶段。通过监测工具和日志记录,团队可以实时检查系统的运行状况,并及时处理问题。
  • 回滚与恢复:如果在部署后发现问题或性能下降,团队可以进行回滚操作,将系统恢复到之前的稳定版本。这可以通过备份、快速切换到先前版本或其他恢复策略来实现。
  • 迭代优化:持续交付是一个循环过程,每次迭代都可以收集反馈并进行优化。团队可以根据用户反馈、性能指标等信息来改进软件质量和功能。

(3)Gitlab内置的持续集成CI/CD流程

①Build:构建阶段,通过自动化构建工具将代码编译成可执行文件。

②Test:测试阶段,运行各种类型的自动化测试以验证代码质量。

③Review:检视阶段,通过人工审核和自动代码审查来检查代码变更是否符合标准。

④Staging:预发布阶段,在部署到生产环境之前,在生产相似的环境中部署和测试应用程序。

⑤Production:生产环境阶段,部署和运行在生产环境中运行应用程序。

在Gitlab CI/CD的每个阶段中,都可以设置自动化策略和规则来触发构建、测试和部署过程,并且可以灵活配置流水线来适应不同的开发和部署需求。

(4)Gitlab的CI/CD优势

(1)一体化平台:GitLab提供了一体化的开发平台,包括版本控制、问题追踪、代码审查和CI/CD等功能。这样可以方便团队在一个平台上管理和协作,减少了不同工具之间的集成和配置复杂性。

(2)简单易用:GitLab的CI/CD配置使用基于YAML的声明式语法,非常易于阅读和理解。通过简单的配置文件,可以定义构建、测试和部署流程,快速实现自动化。

(3)强大的持续集成能力:GitLab的CI/CD集成了强大的持续集成功能,可与各种构建工具(如Maven、Gradle、npm等)和测试框架(如JUnit、Selenium等)无缝集成。它支持并行构建、缓存依赖项、报告生成等功能,可以快速发现和解决代码问题。

(4)高度可定制:GitLab的CI/CD提供了丰富的可定制选项,可以根据团队的需求进行灵活配置。可以自定义构建阶段、测试策略、部署目标等,并根据需要添加自定义脚本或命令。

(5)容器技术支持:GitLab的CI/CD天然集成了容器技术,如Docker和Kubernetes,它们提供了更高效、可移植和可扩展的部署方式。可以使用预定义的Docker镜像或自定义的容器来执行构建、测试和部署任务。

(6)集成DevOps工作流:GitLab的CI/CD紧密集成了DevOps工作流。通过自动化构建、测试和部署,团队可以更好地实现快速交付、频繁部署和持续改进。这可以大大提高开发团队的效率和产品质量。

(7)自动化部署和环境管理:GitLab的CI/CD提供了易于配置和管理的自动化部署功能。可以定义不同的部署策略(如蓝绿部署、灰度发布等)并针对不同的环境(如开发、测试、生产等)进行部署。

总:GitLab的CI/CD提供了开箱即用的持续集成和持续交付解决方案,帮助团队更快捷、高效地构建、测试和部署软件。其简单易用、可定制性强、与DevOps工作流的紧密集成等特点,使得它成为许多开发团队首选的CI/CD工具。

3.CI/CD的主要特点

(1)支持各种语言和工具:Jenkins 可以集成多种编程语言和工具,包括 Java、Python、JavaScript 等,还可以与 Git、SVN 等常见代码管理工具一起使用。

(2)大量插件:Jenkins 具有丰富的插件生态系统,以支持各种用例和场景。可以从 Jenkins 插件中心轻松地安装和配置插件,以扩展 Jenkins 的功能。

(3)易于配置:Jenkins 非常灵活且易于配置。它可以通过 Web 界面或 Groovy 脚本进行配置,使得开发者能够轻松自定义和优化构建过程。

(4)支持分布式构建:Jenkins 可以将任务分配到多个节点上进行并行构建,提高构建效率。除此之外,还有一些辅助工具可帮助开发者优化构建过程,例如 Jenkins Pipeline 和 Jenkins Blue Ocean 等。

4.Gitlab的CI/CD组件

(1)Gitlab CI/CD

Gitlab CI/CD是Gitlab的一部分,Gitlab是一个web应用程序,是将状态存储在数据库中的API。
除Gitlab的所有功能外,还可以管理项目、构建并提供一个不错的用户界面。

(2)Gitbal Runner

Gitbal Runner是一个处理构建的应用程序。
它可以单独部署,并通过API 与 Gitlab CI/CD 一起使用。

(3).gitlab-ci.yml文件

为了运行测试,至少需要一个Gitlab实例和一个Gitlab Runner。

5.gitlab CI/CD工作原理

(1)把代码托管到git存储库中;

(2)在项目根创建ci文件 .gitlab-ci.yml,在文件中指定构建,测试和部署脚本;

(3)gitlab将检测到它并使用名为gitlab runner的工具运行脚本;

(4)脚本被分组为作业,它们共同组成了一个管道。

二.Jenkins介绍

1.Jenkins的概念

(1)Jenkins 是一个流行的自动化开源 CI/CD (Continuous Integration/Continuous Delivery) 工具,可帮助开发者实现自动化部署、构建和测试。

(2)在软件开发过程中,Jenkins 可以通过不断地集成和检查代码库来帮助团队快速构建和发布软件。Jenkins 会根据指定的时间间隔或触发器自动运行构建任务,然后将构建后的包部署到预设的环境中。与传统的手动构建和部署相比,Jenkins 可以减少错误、提高效率,并最大程度地减少让开发人员进行重复性、机械化的工作。

官网:https://www.jenkins.io/

2.Jenkins的作用

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具。

主要做的事有以下几个方面:

(1)从git中拉取代码,根据配置信息打包;、

(2)把打好的包传输到目标服务器,并可以执行一些shell脚本,使项目打包发布一键完成。

3. Jenkins的特征

(1)可扩展性:Jenkins 提供了大量的插件来扩展其功能,可以满足不同项目的需求,如构建、测试、部署等。

(2)自动化:Jenkins 可以自动执行各种任务,如代码编译、单元测试、代码分析、打包、部署等,提高开发效率。

(3)分布式构建:Jenkins 支持将构建任务分布到多个节点上进行并行处理,加快构建速度。

(4)触发器:Jenkins 可以通过时间触发、代码提交触发、远程触发等方式启动构建任务。

(5)构建历史和报告:Jenkins 提供了详细的构建历史记录和生成的报告,方便开发团队进行回溯和分析。

(6)可配置性:Jenkins 提供了灵活的配置选项,可以根据项目需求进行定制,如构建环境、参数设置等。

(7)可视化界面:Jenkins 提供了直观的用户界面,方便用户管理和监控构建任务。

(8)社区支持:Jenkins 拥有活跃的社区,提供了丰富的文档、插件和支持资源,便于用户学习和解决问题。

4.部署规划及Gitlab仓库安装

(1)安装规划及数据流向

服务器IP地址
Gitlab仓库服务器192.168.198.11
Jenkins服务器(JDK、Git、Maven)192.168.198.12
Tomcat测试服务器192.168.198.13

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

①开发人员每天进行代码提交,提交到Git仓库
②Jenkins作为持续集成工具,使用Git工具到Git仓库拉取代码到集成服务器,再配合JDK、Maven等软件完成代码编译,代码测试与审查,测试,打包等工作,在这个过程中每一步出错,都需要重新再执行一次整个流程。
③Jenkins把生成的jar或war包分发到测试服务器或者生产服务器,测试人员或用户就可以访问应用。

(2)Gitlab仓库概念

① Gitlab概念介绍

GitLab是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。

官网:https://about.gitlab.com/

②Gitlab与Github区别
  • 开源许可证:GitLab 是一个完全开源的项目,使用 MIT 许可证,而 GitHub 的核心功能是免费的,但其代码是私有的,不开源。
  • 主要用户群体:GitLab 更侧重于企业用户,提供了更强大的项目管理和团队协作功能,包括持续集成、持续交付、自动化测试等,而 GitHub 更适合开源项目和个人开发者。
  • 功能特性:GitLab 相对于 GitHub 具有更多的功能特性,如容器注册表、内置 CI/CD 管道、自动 DevOps 工具链等,这使得 GitLab 成为一个完整的 DevOps 平台,而 GitHub 更注重源代码托管和协作方面的功能。
  • 安全功能:GitLab 在安全方面有着显著的优势,提供了丰富的安全功能,如安全合规性扫描、容器扫描、漏洞管理等,而 GitHub 的安全功能相对较少。

总:如果需要托管私有项目并需要更多的功能特性和团队协作支持,可以选择 GitLab;如果是一个开源项目或个人开发者,需要简单易用、社区友好的平台,可以选择 GitHub。

(3)Gitlab仓库的安装(192.168.198.11)

①环境基础安装

#安装相关依赖
yum -y install policycoreutils openssh-server openssh-clients postfix
#启动ssh服务&设置为开机启动
systemctl enable sshd && systemctl start sshd
#设置postfix开机自启,并启动,postfix支持gitlab发信功能
systemctl enable postfix && systemctl start postfix
#开放ssh以及http服务,然后重新加载防火墙列表
firewall-cmd --add-service=ssh --permanent
firewall-cmd --add-service=http --permanent
firewall-cmd --reload
如果关闭防火墙就不需要做以上配置
关闭防火墙和增强机制
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
#使用命令行模式在线下载
cd /opt
wget --no-check-certificate https://mirrors.tuna.tsinghua.edu.cn/gitlabce/yum/el7/gitlab-ce-12.10.14-ce.0.el7.x86_64.rpm 
#在线下载下不下来可以在官网上先下载安装包再进行安装
下载地址:https://packages.gitlab.com/gitlab。本文下载的是社区版(CE) gitlab-ce-12.10.14-ce.0.el7.x86_64.rpm  下载完成后上传到服务器上进行备用。
#--no-check-certificate 不进行证书验证
rpm -ivh gitlab-ce-12.10.14-ce.0.el7.x86_64.rpm 

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

widows下载安装包:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.10.14-ce.0.el7.x86_64.rpm 
②修改gitlab配置
vim /etc/gitlab/gitlab.rb
external_url 'http://xxxxxxx' #29行,ip地址:端口;外部访问的地址
unicorn['worker_processes'] = 2 #798行,取消注释,设置gitlab占用内存大小
nginx['listen_port'] = 82 #1197默认注释。修改为82端口

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

#保存退出,重新加载配置
gitlab-ctl reconfigure #重新加载配置

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

gitlab-ctl restart #重启服务
#开机自启
systemctl enable gitlab-runsvdir.service

在这里插入图片描述

③访问登录

浏览器用IP 直接访问 IP:http://192.168.198.11:88
修改管理员密码后,即可登录

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

④Gitlab用户管理
  • 创建用户组

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

组权限的等级分类:

Private 私有的,只有你自己或者组内的成员能访问

Internal 所有登录的用户

Public 公开的,所有人都可以访问

  • 创建项目

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

⑤代码上传
git config --global user.name "root"            #全局声明
git clone http://192.168.198.11:88/root/web-test.git            #将项目克隆到服务器
输入密码:000000,此密码是登录Gitlab设置的密码
cd web-test            #切换目录并上传到此目录下
ls
git add .              #将代码上传到工作区
git commit -m "Initial commit"            #提交代码申明
git push -u origin master                 #将代码推送到Gitlab

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

⑥用户创建

在这里插入图片描述

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
在这里插入图片描述

⑦添加用户到组

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
在这里插入图片描述

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Gitlab用户在组里面有5种不同权限:

Guest:可以创建issue、发表评论,不能读写版本库
Reporter:可以克隆代码,不能提交,QA、PM可以赋予这个权限
Developer:可以克隆代码、开发、提交、push,普通开发可以赋予这个权限
Maintainer:可以创建项目、添加tag、保护分支、添加项目成员、编辑项目,核心开发可以赋予这个权限
Owner:可以设置项目访问权限·Visibility Level、删除项目、迁移项目、管理组成员,开发组组长可以赋予这个权限

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

⑧使用新用户登录

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
在这里插入图片描述

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
登出后登录root用户

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

5.Jenkins服务部署(192.168.198.12)

(1)Jenkins安装

#关闭防火墙和安全机制
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0

官网:https://www.jenkins.io/
新版的Jenkins需要安装jdk11的JAVA环境,所以要配置JDK
下载完之后拖到opt目录下

下载jdk网站:https://www.oracle.com/africa/java/technologies/javase/jdk11-archive-downloads.html

下载jenkins安装包:https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/

cd /opt/
ls

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

#安装JDK11
rpm -ivh jdk-11.0.15.1_linux-x64_bin.rpm
#安装Jenkins
rpm -ivh jenkins-2.361.3-1.1.noarch.rpm
#查看jdk
java -version

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(2)修改Jenkins配置文件

vim /etc/sysconfig/jenkinsJENKINS_PORT="8080"   #58行修改默认端口,根据所需修改
systemctl start jenkins.service

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(3)浏览器访问

http://192.168.198.12:8080

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

cat /var/lib/jenkins/secrets/initialAdminPassword

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
在这里插入图片描述

(4)创建管理员

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(5)Jenkins添加汉化插件

Jenkins->Manage Jenkins->Manage Plugins,点击Available,搜索Chinese、Locale插件

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在Manage Jenkins–>Configure System中设置

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

解决插件安装完,中文简体部分不翻译在Locale中,将语言设置为en_US,重启,再设置为zh_CN;注:zh_TW为中文繁体

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(6)用户权限管理

①安装插件

Role-based Authorization Strategy:主要用于用户权限管理

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

②全局安全配置

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

③管理、分配角色

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

全局角色:管理员等高级用户可以创建基于全局的角色
项目角色︰针对菜个或者某些项目的角色
节点角色︰节点相关的权限

④ 添加角色
我们添加以下三个角色:
TEST: 该角色为全局角色。这个角色需要绑定Dverall下面的Read权限,是为了给所有用户绑定最基本的jenkins访问权限。
注意:如果不给后续用户绑定这个角色,会报错误:用户名is missing the Overall/Read permission
test1:该角色为项目角色。使用正则表达式绑定zjf.*,意思是只能操作zjf开头的项目。
test2:该角色也为项目角色。绑定whd.*,意思是只能操作whd开头的项目。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

点击下面的保存,应用

⑤创建用户

路径:系统管理–>管理用户–>新建用户
新建两个用户008与088

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
在这里插入图片描述

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

⑥给创建的用户分配权限

系统管理–>Manage and Assign Roles–>Assign Rples

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
在这里插入图片描述

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这里插入图片描述

在这里插入图片描述

点击下面的保存,应用

⑦项目创建

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
在这里插入图片描述
在这里插入图片描述

⑧切换用户访问

点击右上角的注销——登录到008用户上

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(7)Jenkins凭证管理

凭据可以用来存储需要密文保护的数据库密码、Gitlab密码信息、Docker私有仓库密码等,以便Jenkins可以和这些第三方的应用进行交互。

①安装Credentials Binding插件

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

安装完插件后在系统管理,多了两个功能菜单

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

系统管理–> Credentials

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
点击创建

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Username with password:用户名和密码 比如使用Gitlab拉取代码
SSH Username with private key:使用SSH用户和密钥 SSH免密登录
Secret file:需要保密的文本文件,使用时Jenkins会将文件复制到一个临时目录中,再将文件路径设置到
一个变量中,等构建结束后,所复制的Secret file就会被删除。
Secret text:需要偃存的一个加密的文本串,如钉钉机器人或Github的api token
Certificate:通过上传证书文件的方式
常用的凭证类型有: Username with password(用户密码)和SSH Username with private key (SSH密
钥)
接下来以使用Git工具到Gitlab拉取项目源码为例,演示Jenkins的如何管理Gitlab的凭证。

②安装Git插件和Git工具

为了让Jenkins支持从Gitlab拉取源码,需要安装Git插件以及在CentOs7上安装Git工具Git插件安装

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

安装Git工具

#安装git工具
yum install -y git 
#查看git版本
git --version 

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

③配置Gitlab凭证

SSH免密登录

路径:系统管理-->Manage Credentials
#在Gitlab服务器上,使用root用户生成钥匙对
ssh-keygen
#/root/.ssh/目录保存公钥和使用

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

ls /root/.ssh/id_rsa:私钥文件
id_rsa.pub:公钥文件
把生成的公钥放在Gitlab中,使用root用户登录Gitlab

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

在这里插入图片描述

#查看服务器上的公钥内容,复制粘贴到gitlab网页上
cat /root/.ssh/id_rsa.pub 

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

#将私钥内容复制到Jenkins
cat /root/.ssh/id_rsa

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

打开gitlab,选择仓库,复制仓库ssh克隆地址

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

测试,选择red的任务,选择立即构建进行拉取gitlab代码

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
在这里插入图片描述

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(8)Maven部署:Maven编译和打包项目

在Jenkins集成服务器上,我们需要安装Maven来编译和打包项目。
Maven官网:https://maven.apache.org/download.cgi

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

①上传软件包(Jenkins服务器上,本文是192.168.198.12)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

②安装Maven
#解压安装包
tar -xf apache-maven-3.9.5-bin.tar.gz 
#移动文件到系统本地
mv apache-maven-3.9.5 /usr/local/maven
#查看jdk版本
java -version

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

#配置相关环境变量,G到最后一行,o输入
vim/etc/profileexport JAVA_HOME=/usr/java/jdk-11.0.15.1
export MAVEN_HOME=/usr/local/maven
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

#刷新配置
source /etc/profile
#查看Maven版本
mvn -v 

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

拓展:如何卸载当前jdk版本安装需要的jdk

#卸载当前

sudo rpm -e jdk-11-2000:11.0.20-9.x86_64

#安装

sudo rpm -ivh jdk-11.0.15.1_linux-x64_bin.rpm

示例:

在这里插入图片描述

③Jenkins配置Maven

打开全局工具设置

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

新增jdk

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

添加maven

新增maven——添加名称——取消掉自动安装然后添加环境变量里设置的路径

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

点击应用——保存

打开系统设置——全局属性中添加键值对

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
在这里插入图片描述

④修改Maven的settings.xml文件
#创建本地仓库目录
mkdir /opt/repo 
vim /usr/local/maven/conf/settings.xml

在这里插入图片描述

保存退出

6.Tomcat服务部署(192.168.198.13)

(1)配置JDK

①上传文件
#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
#上传安装包
apache-tomcat-8.5.16.tar.gz
jdk-8u371-linux-x64.rpm

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

②安装jdk并配置jdk环境变量
#解压,安装JDK
rpm -ivh jdk-8u371-linux-x64.rpm
#解压
tar zxvf apache-tomcat-8.5.16.tar.gz

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

#新建文件
vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/jdk1.8.0_371-amd64
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH
#刷新变量
source /etc/profile.d/java.sh

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

③在服务台Jenkins上测试
mvn help:system
#出现以下现象,则说明mvn配置正确

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(2)安装Tomcat

#移动解压包到指定目录
mv apache-tomcat-8.5.16 /usr/local/tomcat
#创建用户,便于管理服务
useradd -M -s /sbin/nologin tomcat
chown -R tomcat:tomcat /usr/local/tomcat
#添加启动脚本:
cd /usr/local/tomcat/
vim /etc/init.d/tomcat#!/bin/bash
#chkconfig: 35 80 25
#description:Tomcat Service Control Script
start="/usr/local/tomcat/bin/startup.sh"
stop="/usr/local/tomcat/bin/shutdown.sh"
case "$1" in
start)
$start
;;
stop)
$stop
;;
restart)
$0 stop
$0 start
;;
*)
echo "$0 {start|stop|restart}"
esac
#设置:
#添加执行权限
chmod +x /etc/init.d/tomcat 
#添加到系统服务
chkconfig --add tomcat
systemctl start tomcat
#查看服务是否启动
lsof -i:8080 

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(3)设置终端访问

#添加tomcat用户密码用于终端登录
vim /usr/local/tomcat/conf/tomcat-users.xml
<tomcat-users>
<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-status"/>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<user username="tomcat" password="123456" roles="tomcat,manager-script,manager-gui,admin-gui,admin-script"/>
</tomcat-users>

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

#开启终端访问,修改以下配置,默认不许允许远程访问,现在需要注释掉
vim /usr/local/tomcat/webapps/manager/META-INF/context.xml

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

#重启服务
systemctl start tomcat
systemctl status tomcat.service

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(4)网页登录

http://192.168.198.13:8080/

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

点击输入用户和密码

本文是用户名:tomcat

密码:123456

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

7.Jenkins–Pipeline流水线项目构建

(1)Pipeline介绍

①Pipeline概念

Jenkins Pipeline 是一种强大的工具,可以以可维护和可复用的方式定义和执行持续交付或持续集成流水线。Pipeline 是基于代码的方式来描述整个持续交付过程,它将整个软件交付流程划分为多个阶段和步骤,并提供了强大的编排和控制能力。

②Pipeline好处
  • 可追踪性和可视化:Pipeline 提供了可视化的工具来追踪和监控整个交付过程,可以清晰地了解每个阶段和步骤的执行情况。
  • 可重复性和可预测性:Pipeline 使用了基于代码的方法来定义持续交付过程,使得整个流程具有可重复性,并能够提前预测和处理问题。
  • 可扩展性和可定制性:Pipeline 可以通过编写自定义的脚本来满足特定的需求,并且可以扩展为支持多个环境和平台。
  • 可管理性和可维护性:Pipeline 的代码可以版本控制,便于管理和维护,同时也促进了团队协作和代码审查。
③如何创建Jenkins-Pipeline

Jenkinsfile 基于代码方式:

  • 在项目的源代码库中创建一个名为 Jenkinsfile 的文件,它将包含 Pipeline 的定义和配置。
  • 通过 Jenkins Web UI 中的 “Pipeline from SCM” 配置选项,将 Jenkins 连接到源代码库,并指定 Jenkinsfile 的位置。
  • 在 Jenkins 的项目页面上,选择该 Pipeline 的源代码库和分支,并触发构建。

声明式 Pipeline:

  • 在 Jenkins Web UI 中的项目配置页中,选择 “Pipeline” 选项。
  • 在 Pipeline 配置页面上,使用声明式 Pipeline 的语法来定义 Pipeline 的阶段和步骤。
  • 根据需要,配置触发器、构建代理等选项。
  • 保存配置并触发构建。

脚本式 Pipeline:

  • 在 Jenkins Web UI 中的项目配置页中,选择 “Pipeline” 选项。
  • 在 Pipeline 配置页面上,选择 “Pipeline script” 选项。
  • 在 Pipeline 脚本编辑器中,使用 Groovy 语言编写 Pipeline 的逻辑。
  • 根据需要,添加阶段、步骤和控制结构。
  • 保存配置并触发构建。

Pipeline 脚本是由 Groovy 语言实现的,但是我们没必要单独去学习 Groovy
Pipeline 支持两种语法:Declarative(声明式)和 Scripted Pipeline(脚本式)语法
Pipeline 也有两种创建方法:可以直接在 Jenkins 的 Web UI 界面中输入脚本;也可以通过创建一个 Jenkinsfile 脚本文件放入项源码库中(一般我们都推荐在 Jenkins 中直接从源代码控制(SCM)中直接载入 Jenkinsfile Pipeline 这种方法)

安装完成创建流水线项目,相关操作等请参考其他

以通过编写自定义的脚本来满足特定的需求,并且可以扩展为支持多个环境和平台。

  • 可管理性和可维护性:Pipeline 的代码可以版本控制,便于管理和维护,同时也促进了团队协作和代码审查。
③如何创建Jenkins-Pipeline

Jenkinsfile 基于代码方式:

  • 在项目的源代码库中创建一个名为 Jenkinsfile 的文件,它将包含 Pipeline 的定义和配置。
  • 通过 Jenkins Web UI 中的 “Pipeline from SCM” 配置选项,将 Jenkins 连接到源代码库,并指定 Jenkinsfile 的位置。
  • 在 Jenkins 的项目页面上,选择该 Pipeline 的源代码库和分支,并触发构建。

声明式 Pipeline:

  • 在 Jenkins Web UI 中的项目配置页中,选择 “Pipeline” 选项。
  • 在 Pipeline 配置页面上,使用声明式 Pipeline 的语法来定义 Pipeline 的阶段和步骤。
  • 根据需要,配置触发器、构建代理等选项。
  • 保存配置并触发构建。

脚本式 Pipeline:

  • 在 Jenkins Web UI 中的项目配置页中,选择 “Pipeline” 选项。
  • 在 Pipeline 配置页面上,选择 “Pipeline script” 选项。
  • 在 Pipeline 脚本编辑器中,使用 Groovy 语言编写 Pipeline 的逻辑。
  • 根据需要,添加阶段、步骤和控制结构。
  • 保存配置并触发构建。

Pipeline 脚本是由 Groovy 语言实现的,但是我们没必要单独去学习 Groovy
Pipeline 支持两种语法:Declarative(声明式)和 Scripted Pipeline(脚本式)语法
Pipeline 也有两种创建方法:可以直接在 Jenkins 的 Web UI 界面中输入脚本;也可以通过创建一个 Jenkinsfile 脚本文件放入项源码库中(一般我们都推荐在 Jenkins 中直接从源代码控制(SCM)中直接载入 Jenkinsfile Pipeline 这种方法)

安装完成创建流水线项目,相关操作等请参考其他

相关文章:

Jenkins的介绍与相关配置

Jenkins的介绍与配置 一.CI/CD介绍 &#xff11;.CI/CD概念 ①CI 中文意思是持续集成 (Continuous Integration, CI) 是一种软件开发流程&#xff0c;核心思想是在代码库中的每个提交都通过自动化的构建和测试流程进行验证。这种方法可以帮助团队更加频繁地交付软件&#x…...

开源网安受邀参加网络空间安全合作与发展论坛,为软件开发安全建设献计献策

​11月10日&#xff0c;在广西南宁举办的“2023网络空间安全合作与发展论坛”圆满结束。论坛在中国兵工学会的指导下&#xff0c;以“凝聚网络空间安全学术智慧&#xff0c;赋能数字经济时代四链融合”为主题&#xff0c;邀请了多位专家及企业代表共探讨网络安全发展与数字经济…...

arcgis提取栅格有效边界

方法一&#xff1a;【3D Analyst工具】-【转换】-【由栅格转出】-【栅格范围】 打开一幅栅格数据&#xff0c;利用【栅格范围】工具提取其有效边界&#xff08;不包含NoData值&#xff09;&#xff1a; 方法二&#xff1a;先利用【栅格计算器】将有效值赋值为1&#xff0c;得到…...

后端接口性能优化分析-问题发现问题定义

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码&#x1f525;如果感觉博主的文章还不错的话&#xff0c;请&#x1f44d;三连支持&…...

中国首个通过ASIL D认证的IP发布,国产芯片供应商的机会来了

来自智能汽车的“芯”安全需求正在快速爆发。 一方面&#xff0c;随着智能汽车ADAS的快速迭代与逐渐普及化&#xff0c;以及越来越多元化智能座舱功能的快速上车&#xff0c;由此带来的车辆信息安全场景也在与日俱增&#xff0c;例如云端链接、设备身份认证、自动驾驶安全保障…...

[单片机课程设计报告汇总] 单片机设计报告常用硬件元器件描述

[单片机课程设计必看] 单片机设计报告常用描述 硬件设计 AT89C51最小系统 AT89C51是美国ATMEL公司生产的低电压&#xff0c;高性能CMOS16位单片机&#xff0c;片内含4k bytes的可反复擦写的只读程序存储器和128 bytes的随机存取数据存储器&#xff0c;期间采用ATMEL公司的高…...

Docker学习——⑧

文章目录 1、什么是 Docker Compose(容器编排)2、为什么要 Docker Compose&#xff1f;3、Docker Compose 的安装4、Docker Compose 的功能和使用场景5、Docker Compose 文件&#xff08;docker-compose.yml&#xff09;5.1 文件语法版本5.2 文件基本结构及常见指令 6、Docker …...

力扣刷题第二十一天--栈与队列

前言 周末玩了两天&#xff0c;s赛看的难受。。。还是和生活对线吧 内容 一、用栈实现队列 232.用栈实现队列 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff1a; 实现 MyQueue 类&#…...

Python基础-解释器安装

一、下载 网址Welcome to Python.orgPython更新到13了&#xff0c;我们安装上一个12版本。 这里我保存到网盘里了&#xff0c;不想从官网下的&#xff0c;可以直接从网盘里下载。 链接&#xff1a;百度网盘 请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间…...

MySQL(14):视图

数据库对象 对象描述表(TABLE)表是存储数据的逻辑单元&#xff0c;以行和列的形式存在&#xff0c;列就是字段&#xff0c;行就是记录数据字典就是系统表&#xff0c;存放数据库相关信息的表。系统表的数据通常由数据库系统维护&#xff0c;程序员通常不应该修改&#xff0c;只…...

Blazor 附件上传和下载功能

效果图 page "/uploadFile" inject Microsoft.AspNetCore.Hosting.IWebHostEnvironment WebHostEnvironment inject ToastService ToastService inject DownloadService DownloadService<h3>UploadFile</h3><Button OnClick"ButtonClick" C…...

Git 安装配置

目录 Linux 平台上安装 Debian/Ubuntu Centos/RedHat 源码安装 Windows 平台上安装 Mac 平台上安装 Git 配置 用户信息 文本编辑器 差异分析工具 查看配置信息 在使用Git前我们需要先安装 Git。Git 目前支持 Linux/Unix、Solaris、Mac和 Windows 平台上运行。 Git …...

Center Smoothing Certified Robustness for Networks with Structured Outputs

文章目录 Center Smoothing: Certified Robustness for Networks with Structured OutputsSummaryResearch ObjectiveProblem StatementMethodsEvaluationConclusionNotesGaussian Smoothing常用希腊字母霍夫丁不等式&#xff08;Hoeffdings inequality&#xff09;1.简述2.霍夫…...

C#几种截取字符串的方法

在C#编程中&#xff0c;经常需要对字符串进行截取操作&#xff0c;即从一个长字符串中获取所需的部分信息。本文将介绍几种常用的C#字符串截取方法&#xff0c;并提供相应的示例代码。 目录 1. 使用Substring方法2. 使用Split方法3. 使用Substring和IndexOf方法4. 使用Regex类…...

【PG】PostgreSQL高可用方案repmgr部署(非常详细)

目录 简介 1 概述 1.1 术语 1.2 组件 1.2.1 repmgr 1.2.2 repmgrd 1.3 Repmgr用户与元数据 2 安装部署 2.0 部署环境 2.1 安装要求 2.1.1 操作系统 2.1.2 PostgreSQL 版本 2.1.3 操作系统用户 2.1.4 安装位置 2.1.5 版本要求 2.2 安装 2.2.1 软件包安装 2.2…...

Linux Makefile配置问题

编写一个简单的工程文件&#xff0c;制作Makefile需要包含lpthread&#xff0c;当Makefile写为如下配置时 #CROSSCOMPILE : arm-linux- CROSSCOMPILE :CFLAGS : -Wall -O2 -c CFLAGS -I$(PWD)LDFLAGS : -lpthread LDFLAGS -lm -ldlCC : $(CROSSCOMPILE)gcc #LD :…...

k8s篇之underlay网络和overlay区别

k8s中underlay网络和overlay区别 一、网络 1 Overlay网络&#xff1a; Overlay叫叠加网络也叫覆盖网络&#xff0c;指的是在物理网络的基础之上迭代实现新的虚拟网络&#xff0c;即可使网络中的容器可以互相通信。 优点是对物理网络的兼容性比较好&#xff0c;可以实现pod的…...

掉瓶子小游戏

欢迎来到程序小院 掉瓶子 玩法&#xff1a;旋转的瓶子&#xff0c;根据瓶子方向&#xff0c;点击鼠标左键瓶子掉落&#xff0c;从桌面中间掉下即得1分&#xff0c;卡在桌边瓶子碎了游戏结束&#xff0c;快去掉瓶子吧^^。开始游戏https://www.ormcc.com/play/gameStart/203 htm…...

Elasticsearch7 入门 进阶

1、全文检索 1.1、数据分类 按数据分类的话&#xff0c;主要可以分为以下三类&#xff1a; 结构化数据&#xff1a;固定格式、有限长度&#xff0c;比如mysql存的数据非结构化数据&#xff1a;不定长、无固定格式&#xff0c;比如邮件、Word文档、日志等半结构化数据&#xf…...

你是怎么封装微信小程序的数据请求的?

当封装微信小程序的数据请求时&#xff0c;可以采用一种模块化的方法&#xff0c;将请求逻辑与界面逻辑分离&#xff0c;以提高代码的可维护性和可扩展性。以下是一个基于前言、高质量代码、理解、优缺点和结尾的范例&#xff1a; 前言 在微信小程序中&#xff0c;数据请求是…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...