软件开发人员和运维人员更好的沟通合作/CD
发表时间:2023-11-22 11:02:28
文章来源:炫佑科技
浏览次数:192
菏泽炫佑科技
软件开发人员和运维人员更好的沟通合作/CD
这个词来自 and 的组合。 字面意思就是让软件开发人员和运维人员更好地沟通和协作,通过自动化流程让软件开发、测试、发布更快。
强调通过一系列手段实现快速稳定的工作流程,使每一个想法(例如新的软件功能、功能增强请求或错误修复)都能在从开发到生产环境部署的整个过程中得以实现。 持续为用户带来价值。 这种方法要求开发和运营团队密切沟通、高效协作并互相体谅。 它可以加快想法从构思到部署的整个过程。 核心是保证日常运维任务的自动化以及应用整个生命周期环境的标准化。
团队经常使用微服务架构来构建软件并通过 API 将这些服务相互连接。 通过构建更小的功能单元,开发团队可以加快交付速度。 因此,您必须关注如何管理这些服务和API,并制定敏捷集成等策略,使它们能够协同工作。
另外,不得不说CI、CD()、持续集成和持续部署管道(CI/CD)是落实开发和运营的重要成果。 CI/CD 可帮助您频繁地向客户交付应用程序,并以*少的人工干预验证软件质量。
具体来说,CI/CD 在整个应用程序生命周期(从集成和测试阶段到交付和部署)引入了持续自动化和持续监控,使您能够快速识别并纠正问题和缺陷。 这些相关工作通常统称为“CI/CD 管道”,并由开发和运营团队以敏捷的方式协作支持。
2.开源实用工具
2.1. 版本控制和协作开发工具
(1)版本控制系统Git
Git 是一个开源的分布式版本控制系统,用于有效、快速地处理从小项目到超大型项目的版本管理。
(2) 代码托管平台
它是一个使用 Ruby on Rails 开发的开源应用程序,用于实现自托管的 Git 项目存储库,可以通过 Web 界面访问公共或私有项目。
(3) 代码审查工具
它是一款使用 Web 界面的免费开源代码审查软件。 使用网络浏览器,同一团队的软件程序员可以审查彼此修改的程序代码,并决定是否提交、返回或继续修改。 它使用 Git 作为底层版本控制系统。
(4)版本控制系统
它是一个轻量级的分布式版本控制系统,用语言实现,易学易用,可扩展性强。
(5)版本控制系统
与RCS和CVS相比,它是一种使用分支管理系统的版本控制系统。 它的设计目标是取代CVS。
(6)版本控制系统
它是一个分布式版本控制系统,在GPL许可下发布,可用于GNU/Linux、UNIX和Mac OS系统。
2.2. 自动化构建和测试工具
(7)蚂蚁
Ant是一个链接并自动化软件编译、测试、部署等步骤的工具。 它主要用于Java环境下的软件开发。
(8)马夫
除了程序构建功能之外,Maven 还提供了 Ant 所缺乏的高级项目管理工具。 由于Maven默认的构建规则具有较高的复用性,简单的项目往往只需两三行Maven构建脚本就可以构建完成,而使用Ant则需要十几行。
(9) 集成测试工具
(10)单元测试框架
(11) QUnit 是领先的单元测试框架。
(12)功能和性能测试工具完全用Java实现。
(13)
它是一个构建系统,可以用来编写构建脚本,并支持依赖管理和多项目,类似于Maven。
(14)
它是一个轻量级的PHP测试框架。
2.3.、持续集成和交付
(15) 可扩展的持续集成引擎
它是一个开源项目,提供了易于使用的持续集成系统,将开发人员从复杂的集成中解放出来,专注于更重要的业务逻辑实现。 作为持续集成工具,功能包括:持续的软件版本发布/测试项目以及监控外部调用执行的工作。 同时可以实现集成中的监控错误,提供详细的日志文件和提醒功能,还可以用图表直观地展示项目建设的趋势和稳定性。
您可以构建一个自动化的持续集成环境,并使用它来“自动化”应用程序的编译、打包、分发和部署。 它兼容ant、maven等多种第三方构建工具,并且可以与svn、git无缝集成,还支持与.net等知名源代码托管网站直接集成。
功能:
定期拉取代码并编译静态代码分析。 定期打包发布beta版本。 自定义操作,例如运行单元测试和其他错误提醒。
持续集成的分类:
持续集成:是指程序员在代码开发项目中可以频繁地将代码部署到主干上,并进行自动化测试。 持续交互:是指基于持续集成,将代码部署到线上测试环境进行持续部署:是指基于持续交互,自动部署待部署的代码,包括持续交互和持续部署
持续集成的好处:
抽象出编译、发布等重复操作,减少重复流程。 尽早发现各种冲突和错误,降低风险。 随时随地生成可部署的软件。
官方网站:; 文件:
中文网站:
k8s官方插件:
官方镜像网站:
1> 产品架构及原理
如上图中的git,功能类似,而且是开源的。 它主要用于构建私有git。 它还提供了非常强大的Web GUI,使开发人员交换源代码非常方便。 系统的工作流程大致分为以下几个步骤:
1.开发者将新版本推送到git()。
2.然后触发节点执行构建。 (通过网络挂钩或计划检测)
3. 该节点将构建任务分配给多个已注册从节点之一。 这个从节点按照预设的脚本进行构建,比如编译、测试、生成测试报告等,这些原本需要手动完成的任务都可以委托给你。
4.我们在构建的时候需要进行编译自动化软件开发,这里使用了分布式编译器来加速编译。
工作准则:
首先将源代码复制到本地计算机,然后根据设置的脚本进行构建。 整个系统的关键是构建脚本,它用于告诉集成中需要执行的任务。 当代码提交到git时,通过配置,将git代码提交到服务器并发布到指定文件夹。 有一个触发器配置。 每次提交新代码时,git上的代码都会自动上传到服务器并自动更新和发布。
持续集成的分类:
持续集成:是指程序员在代码开发项目中可以频繁的部署代码到主干并进行自动化测试。
持续交互:指基于持续集成将代码部署到线上测试环境
持续部署:指在持续交互的基础上自动部署待部署的代码,包括持续交互和持续部署
分布式节点搭建:
通过将构建过程分散到slave从节点上,减轻了节点的压力,并且可以同时构建多个slave,实现负载均衡。 而且随着现在容器的普及,我们可以将节点和从节点(也称为代理节点)部署在容器中或者基于容器,可以实现动态资源分配等。其中节点主要用来处理定时构建job,将构建分发到从节点实际执行,监控从节点的状态(必要时使它们上线或下线),记录并发布构建产品; 代理节点主要用于处理作业的编译、发布等任务,代理节点可分为静态节点和动态节点; 静态节点是固定的vm虚拟机或容器。 构建任务时,动态节点会自动创建代理节点。 与代理通信的常用方式有两种:ssh 和 JNLP。 与 ssh 不同,JNLP 主动连接到从站。 JNLP使用从机主动连接。
上图中,k8s中的部署,Slave以Pod的形式运行在集群的Node上。 它在其中一个节点上运行并将其配置数据存储在其中一个节点上。 Slave运行在每个节点上,并且并不总是运行。 它将根据需要动态创建并自动删除。 该方法的工作流程大致如下:
当收到 Build 请求时,Pod 中运行的 Slave 会根据配置的 Label 动态创建并注册。 运行Job后,Slave将被注销,Pod将被自动删除并恢复到原始状态。
经常使用++的持续集成解决方案。 一般工作流程是:
手动/自动构建 -> 调度 K8S API -> 动态生成 Slave Pod -> Slave Pod 拉取 Git 代码/编译/打包镜像 -> 推送到镜像仓库 -> Slave 工作完成,Pod 自动销毁 -> 部署测试或生产平台。 (全自动,无需人工干预)
微服务部署及监控运维架构图:
+动态节点自动化部署:
+maven自动部署项目到k8s:
持续集成:
2> 部署参考:
(16)
它是一个用于在多台机器上并行执行相同命令的工具。 它用于安装整批机器。
(17)
它是系统自动化编译/测试周期*需要的软件,用于验证代码更改。
(18)
它是一个开源的Java(JVM)深度管理集成平台。 通过一致的 UI 和 UX,可以从中心位置轻松实现自动化、配置和管理。 还提供少量非功能性需求,如配置管理、服务发现故障转移、集中监控、自动化等。
(19)
(20)CI
CI是一个基于云的持续集成项目,可以支持大多数主流语言,如:C、PHP、Ruby等。
(21) 是*新的 CI 服务器之一,基于 Web 界面易于配置。
(22)自动构建工具。 通过网络界面可以轻松地持续构建系统。
(23)
它是一个持续构建程序(项目持续集成)的框架,包括电子邮件通知插件、Ant和各种CVS工具。 它还提供Web界面,可以随时查看当前编译状态和历史状态。
(24)是一个用Ruby开发的持续集成服务器。
(25)阿甘
Gump 是一个集成工具。 它采用软件编写,全面支持Ant、Maven等软件构建工具。
(26)去
Go 是一种编译型并发编程语言,具有垃圾收集功能。
2.4. 部署工具 2.4.1 容器平台
(27)
它是一个开源的应用程序容器引擎,允许开发人员将他们的应用程序和依赖包打包到一个可移植的容器中,然后将其发布到任何流行的Linux机器上,这些机器也可以虚拟化。
(28)
(也称为rkt)是推出的容器引擎,与rkt类似,帮助开发人员将应用程序和依赖包打包到可移植的容器中,简化环境设置等部署任务。
(29)(LXC)
LXD是基于LXC技术的重构,容器天然支持非特权和分布式。 LXD 与 PAAS 的不同之处在于它是 IAAS。 LXC项目由Linux内核补丁和少量工具组成。 这些工具使用补丁添加的新内核功能来提供一组简化的容器维护工具。
2.4.2 配置管理
(30)厨师
Chef是一个系统集成框架,为整个架构提供配置管理能力。 它也是一个自动化配置管理工具,用于定义和管理基础设施的状态。 它使用Ruby语言编写配置代码,并提供丰富的资源和模板来管理系统配置。
(31)
它是一个模型驱动的自动化工具,用于配置和管理基础设施。 它使用自定义的声明性语言来描述系统配置,并提供丰富的资源类型和模块来管理各种操作系统和应用程序。
(32)
(配置引擎)是一个 UNIX 管理工具,其目的是自动执行简单的管理任务,并使困难的任务变得更容易。 它适合管理各种环境,从一台主机到数万台主机的集群。
(33)重击
bash 是大多数 Linux 系统和 Mac OS 的默认 shell,此外,它还被 DJGPP 项目移植到 MS-DOS。
(34)
重命名以为每台使用的计算机提供一个子网。 也就是说集群中的每台主机都有自己完整的子网。 例如,计算机 A 和 B 可以具有 10.0.1.0/24 和 10.0.2.0/24 子网。
(35)
批量管理是通过环境的ps脚本实现的。 很多产品都开放ps脚本接口;
(36)
它是一个用Java编写的开源工具,可帮助客户自动化数据中心或云环境中的各种操作和流程。 通过命令行或Web界面,客户可以操作任意数量的服务器,大大降低了服务器自动化的门槛。
(37)
它是一个事件驱动的自动化工具,用于配置管理、远程执行和监控。 它使用YAML或语法来描述系统配置,并提供强大的远程执行和事件驱动功能。 可以看作是func的增强版+弱化版。 因为是基于编写的,所以非常好用,可以基于EPEL快速部署。 作为一款开源工具,Salt 可以轻松管理数千台服务器,从而轻松管理您的基础设施。
(38)
它是一种用于发布、管理和编排计算机系统的自动化运维工具。 它是一个模型驱动的配置管理器,支持多节点发布和远程任务执行。 默认情况下,远程连接使用SSH。 无需在被管节点上安装额外的软件,并且可以使用多种编程语言进行扩展。 它是一个功能强大的自动化工具,可用于配置管理、应用程序部署、编排和远程执行任务。 可以使用简单的 YAML 语法和 SSH 协议来管理和配置许多远程主机。
它基于开发,集成了众多运维工具(、、chef、func、)的优点,实现批量系统配置、批量程序部署、批量运行命令等功能。 它基于模块工作,不具备批量部署的能力。 真正具有批量部署的是运行模块,它只是提供了一个框架。 主要包括:
(1)连接插件:负责与被监控端进行通信;
(2)主机:指定操作的主机是配置文件中定义的用于监控的主机;
(3)各类模块、核心模块、模块、自定义模块;
(4)使用插件完成记录日志邮件等功能;
(5)、:当脚本执行多个任务时,如果不需要,可以允许节点同时运行多个任务。
如上图所示,由5部分组成:
Ansible:核心
Modules:包括 Ansible 自带的核心模块及自定义模块
Plugins:完成模块功能的补充,包括连接插件、邮件插件等
Playbooks:剧本,定义 Ansible 多任务配置文件,由Ansible自动执行
Inventory:定义 Ansible 管理主机的清单
任务执行流程:
%e8%87%aa%e5%8a%a8%e5%8c%96%e8%bf%90%e7%bb%b4//
2.4.3 微服务平台
(39)
它是红帽为开源开发者推出的平台即服务(PaaS)。 通过为开发人员提供更多语言、框架和云选择,开发人员可以构建、测试、运行和管理他们的应用程序。 Red Hat 4 是一个受支持的企业级平台。
(40)云
Cloud是2011年4月12日推出的业界首个开源PaaS云平台,支持多种框架、语言、运行环境、云平台和应用服务,使开发者能够秒级启动应用程序。 部署和扩展,无需担心任何基础设施问题。
(41)
它是一个来自云平台的开源容器集群管理系统。 基于构建容器的调度/容器编排服务。 系统可以自动选择容器集群中的容器进行使用。 它的核心概念是Pod。 可用于自动化容器化应用程序的部署、扩展和管理。 它提供强大的容器编排、服务发现和自动伸缩功能,使应用程序部署和管理更简单、更可靠。
(42)
Mesos是一个集群管理器,提供跨分布式应用程序或框架的高效资源隔离和共享,并且可以运行MPI、Spark。
2.4.4 服务自动化激活
(43)
,您可以使用跨平台规范语言集中管理系统的每个重要方面,管理通常聚集在不同文件中的所有单独元素,例如客户端、cron 作业和主机以及明显离散的元素,例如打包、服务和文件。
(44)剃须刀
(45) 蜂群
Swarm是分布式应用程序的本地集群,它根据提供的功能优化主机资源利用率和容错服务。 具体来说,Swarm允许客户创建可运行的主机资源池,然后运行资源池中的容器。 Swarm 管理工作负载并维护集群状态。
(46)
是一个基于 Ruby 的工具,用于创建和部署虚拟化开发环境。 它使用开源虚拟化系统,并使用Chef创建自动化虚拟环境。
(47)
(48) 热
2.5. 辅助维护 2.5.1 日志记录与管理
(49)
它是一个传输、解析、管理和搜索应用程序日志和事件的平台。 您可以使用它来统一收集和管理应用日志,并提供Web界面进行查询和统计。
(50)
它是一个()进程,用于收集系统性能并提供各种存储方法来存储不同的值。 例如RRD文件的形式。
(51)
它是一个简单的网络守护进程,基于 Node.js 平台,通过 UDP 或 TCP 监听各种统计信息,包括计数器和计时器,并将聚合信息发送到后台服务等。
2.6。 监控、警报和分析
(52)
它是一个监控系统,监控系统运行状态和网络信息。 它可以监控指定的本地或远程主机和服务,并提供异常通知功能等。
(53)
它是集群、网格等高性能计算系统下的跨平台可扩展、分布式监控系统。 它基于分层设计,使用多种技术(例如XML数据表示、可移植数据传输)来进行数据存储和可视化。
(54) 森苏
Sensu 是一个开源监控框架。 主要特点:高度可组合; 提供监控代理、事件解析器和文档 API; 专为云设计; Sensu的现代架构允许监控大规模动态基础设施,能够通过复杂的公共网络监控数千个全球设备、分布式机器和服务; 热情的社区。
(55)
它是一个基于WEB界面的企业级开源处理解决方案,提供分布式系统监控和网络监控功能。
(56)
该项目由 、?cker 等人发起,他们都是现有项目社区委员会的成员,他们承诺新的开源项目将完全兼容之前的应用和扩展功能。
(57)
它是一个用于收集实时网站信息并进行统计的开源项目。 可用于收集各种网站服务运行状态信息。 该服务平均每分钟执行 4,800 次升级操作。
(58)
是为 和 提供的用于日志分析的 Web 界面。 它可用于执行高效搜索、可视化、日志分析等各种操作。
(59)
3、补充
(60):
它是一个设备和产品的分布式指挥平台。 它为第三方提供信息收集或设备和产品操纵的命令通道。 命令由用户脚本实现:shell、ruby 等。 作为一款开源产品运维管理系统软件开发人员和运维人员更好的沟通合作/CD,已被国内多家企业投入使用。 是一个产品管理平台,实现对任何产品的管理、监控和自定义发布、回滚,并向第三方提供产品运行状态和事件通知的实时数据。 是集设备管理、产品管理、服务上线、服务器运营于一体的运维管理系统。 系统分为-/-Web两部分。
,: 面向配置
:面向交互,可与等集成。
与 Mesos 的关系:
Mesos:资源管理和调度平台。
:分布式任务与指挥平台、服务管理平台、资源与服务调度均由第三方实现。
(61)
自动化运维工具,Linux服务器批量管理,服务器自动监控,自动部署,软件,管理,命令批量执行,文件传输,全自动化流程。 定时任务功能、权限审计、权限控制、操作记录。
炫佑科技专注互联网开发小程序开发-app开发-软件开发-网站制作等