从零开始的云计算生活——第五十七天,蓄势待发,DevOps模块

目录

一.故事背景

[二. DevOps概念](#二. DevOps概念)

基本概念

开发流程

[三. 为什么会出现DevOps?](#三. 为什么会出现DevOps?)

[四. DevOps的优势](#四. DevOps的优势)

[五. DevOps生命周期](#五. DevOps生命周期)

[六. DevOps三大原则](#六. DevOps三大原则)

[七. 快速实现DevOps](#七. 快速实现DevOps)

[八. Jenkins简介](#八. Jenkins简介)

持续集成

持续集成的效益

持续集成的作用

持续集成的特点

持续交付

持续部署

[九. Maven 介绍](#九. Maven 介绍)

[十. 部署jenkins](#十. 部署jenkins)

导入安装源

安装jenkins(open欧拉版本下载java17)

登录jenkins

导入登录密码

创建管理员用户

配置实例

开始使用

重新登录jenkins

十一.总结


一.故事背景

在结束了k8s模块之后,接下来介绍DevOps模块和Jenkins的部署

二. DevOps概念

基本概念

在如今互联网的格局下,抢占市场变得尤为重要,因此敏捷开发 越来越被大家所推崇。于是,慢慢的有了DevOps这个概念,含义就是开发-运维一体化,能够理顺开发和运维之间相互配合关系的任何事物。

DevOps是一组过程、部署及开发系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

可以看到上图是一个无穷大的一个符号,Dev对应开发,Ops对应运维。

DevOps的方式可以让公司能够更快地应对更新和市场发展变化,开发可以快速交付,部署也更加稳定。

核心就在于简化Dev和Ops团队之间的流程,使整体软件开发过程更快速。

开发流程

整体的软件开发流程包括:

  1. PLAN:开发团队根据客户的目标制定开发计划

  2. CODE:根据PLAN开始编码过程,需要将不同版本的代码存储在一个库中。

  3. BUILD:编码完成后,需要将代码构建并且运行。

  4. TEST:成功构建项目后,需要测试代码是否存在BUG或错误。

  5. DEPLOY:代码经过手动测试和自动化测试后,认定代码已经准备好部署并且交给运维团队。

  6. OPERATE:运维团队将代码部署到生产环境中。

  7. MONITOR:项目部署上线后,需要持续的监控产品。

  8. INTEGRATE:然后将监控阶段收到的反馈发送回PLAN阶段,整体反复的流程就是DevOps的核心,即持续集成、持续部署

总的来说就是:

  1. Code阶段(编码):Git+GitLab

  2. Build阶段(构建):Maven或Gradle

  3. Operate(运行):Docker

  4. Integrate(集成):Jenkins

    • CI/CD(持续集成):操作Jenkins,编写对应脚本文件

    • Code review(代码质量检测):Jenkins集成Sonar Qube

    • 自定义镜像:Harbor

    • Jenkins流水线操作

    • WebHook:通知操作,如:钉钉机器人通知

  5. K8S编排:更加方便我们管理容器

三. 为什么会出现DevOps?

  1. 容器化技术的发展,微服务架构的发展,直接促进了DevOps的迅速发展

  2. 敏态需求的增加,即探索性工作的增加软件开发从传统的瀑布流方式到敏捷开发,再到现在对敏捷开发提出了更高的要求,近些年创新型的应用不断涌现,在这些应用的研发过程中多采用小步快跑、快速试错的方式,这些探索性工作要求运维能够具备一天发布多次的能力,需要企业完成由稳态到敏态的转变。

  3. 软件开发活动在企业经营活动中占比的不断增加业务发展对软件的依赖由轻度依赖、中度依赖发展到目前的重度依赖。

  4. 企业存在对消除浪费的需求

    • 软件开发活动在企业中的位置越来越重要,而像企业经营活动一样,软件开发活动中也存在着许多的浪费,企业管理上必然存在着 「识别并消除浪费」 的需求。

    • 软件开发中的浪费包括不必要和必要的浪费,不必要的浪费有:无人使用的功能、软件bug、等待测试、等待审批等;必要的浪费包括:工作项移交、测试、项目管理等。

四. DevOps的优势

  1. DevOps 的主要优势在于,自动化流程可以比人员更快,更可靠地执行重复操作。对于组织而言,让开发人员或其他人员整天构建和部署代码既不可行,也无济于事。使这些重复性任务自动化可以使开发人员腾出精力去做自己最擅长的工作 ~ 修改代码。

  2. 这样做是允许在几分钟之内构建和部署代码,这仅受组织选择管理其DevOps管道的方式的限制。这意味着从开发功能或错误修正到向最终用户提供更好的体验之间的时间可以大大缩短,从而使用户更加满意。

  3. 它还创建了更好的反馈循环。新功能越早交付给用户,组织就越早可以收集反馈和指标并深入了解用户对其产品的喜好。这使组织保持敏捷并为创新提供了更好的环境。

五. DevOps生命周期

DevOps生命周期主要包括产品(策划、研发、运营、推出)、项目(立项、执行、完工),而敏捷、持续集成、持续部署、持续交付都是 DevOps 的一个局部的阶段。

DevOps 在支持全生命周期的过程,要以产品的视角来看待,真正进行交付的时候,也要以产品为维度进行组织的设立。

DevOps 的核心是一组工具和实践,可帮助组织更可靠,更快地构建,测试和部署软件。DevOps 使组织能够比具有传统开发和发布周期的组织更快地发展和交付其产品,从而可以提供竞争优势。与其每天两周或更长时间发布一次版本,不如每天向用户交付新功能,并且可以在数小时内部署错误修正,所有这些都遵循相同的可重复自动化流程。

六. DevOps三大原则

1、流动原则

  • 加速从开发、运维到交付给客户的流程;

  • 坚持少做,产品开始开发时采用 MVP 原则,产品迭代时要适时做减法;

  • 持续分解问题,大的变更或需求拆解为一系列小的变更,快速解决;

  • 工作可视化,采用 Sprint 看板将工作可视化;

  • 控制任务数量,减少前置时间,降低测试人员的等待时间;

  • 减少交接次数,减少不必要的沟通和等待;

  • 持续识别和改善约束点,提高搭建环境、需求文档、QA、开发、运维的生产力;

  • 消除价值流中的困境和浪费;

2、反馈原则

  • 建设安全可靠的工作体系;

  • 在复杂系统中安全地工作;

  • 及时发现问题;

  • 在源头保障质量;

  • 为内部客户优化工作;

3、持续学习与实验原则

  • 采用科学的工作方式,将对组织的改进和创新作为工作的一部分。

  • 建立学习型组织和安全文化;

  • 将日常工作的改进制度化;

  • 把局部发现转化为全局优化;

  • 在日常工作中注入弹性模式;

  • 领导层强化学习文化;

七. 快速实现DevOps

  • 开发人员完成了为其小部件的新功能编写代码。他们将代码提交到功能分支,该功能分支在其开发计算机上启动了一些轻量级测试,检查是否存在任何代码样式问题,同时还扫描具有新公开的安全漏洞的软件包。开发人员提交拉取请求以将其代码合并到代码存储库中,该代码存储库向团队聊天发送通知。

  • 团队中的另一位开发人员检查了代码更改,在发现代码中没有问题之后,批准了请求请求。该代码会自动合并到开发分支中,从而开始构建过程。构建服务器将克隆 developer分支,安装所有软件包依赖项并构建窗口小部件。生成服务器会运行单元测试和集成测试,以确保新功能不会在小部件的其他部分引起任何退步。

  • 每个测试都通过了,构建成功。根据代码库中定义的最佳实践配置,将在云中自动配置一个新容器,并部署小部件。

  • 此时,组织有两个选择。他们可以选择将更新后的窗口小部件自动发布到生产环境中,并使所有用户或选择接收最新功能的部分用户可以使用该功能。自动部署到生产中称为连续部署(CD)。

  • 或者,组织可以选择仅将功能发布到用户验收测试(UAT)环境中,然后根据预定义的时间表手动批准将发布发布到生产中。在管道中添加手动审批流程通常称为"持续交付"(CD的另一种形式)。

  • 无论是否涉及手动步骤,一旦将小部件成功部署到生产中,都将执行附加的自动化测试。其他工具收集有关性能和用户行为的指标,这些指标将提供给IT运营和开发团队,以提供实时反馈,突出显示潜在的错误并帮助塑造新功能。

  • 对于基本的 DevOps 管道,这是一个相当典型的过程,但具体细节取决于组织。

  • 一些组织倾向于在生产环境中快速部署,将新功能隐藏在功能标记后面,以允许向用户群分阶段发布。其他人则更喜欢使用更传统的开发,测试和生产环境结构,在此结构中,功能被批量部署并在部署到生产之前通过多个手动门缓慢发布。

  • DevOps 可以根据组织或项目的特定需求进行定制。

  • 该过程趋于发展,添加其他测试以生成更安全的应用程序,或找到优化管道以加快构建速度并减少人工干预的方法。

八. Jenkins简介

Jenkins是一个用Java编写的开源的持续集成工具。在与Oracle发生争执后,项目从Hudson项目独立。官方网站:Jenkins

Jenkins提供了软件开发的持续集成服务。它运行在Servlet容器中(Tomcat)。它支持软件配置管理(SCM)工具(包括AccuRev SCM、CVS、Subversion、Git、Perforce、Clearcase和RTC),可以执行基于Apache Ant和Apache Maven的项目,以及任意的Shell脚本和Windows批处理命令。Jenkins的主要开发者是川口耕介。Jenkins是在MIT许可证下发布的自由软件。

Jenkins 能实时监控持续集成过程中所存在的问题,提供详细的日志文件和提醒功能, 还能用图表的形式,形象地展示项目构建的趋势和稳定性。

Jenkins 包含以下几个特点:

  • 易安装:仅仅一个 jenkins.war,从官网下载该文件后,直接运行,无需额外的安装,更无需安装数据库;

  • 易配置:提供友好的 GUI 配置界面;

  • 变更支持:Jenkins 能从代码仓库(SVN /Git)中获取并产生代码更新列表,并输出到编译输出信息中;

  • 支持永久链接:用户是通过 Web 来访问 Jenkins 的,而这些 Web 页面的链接地址都是永久链接地址,可以在各种文档中直接使用该链接;

  • 集成 E-Mail/RSS/IM:当完成一次集成时,可通过这些工具实时收取集成结果(构建一次集成需要花费一定时间,有了这个功能,就可以在等待结果过程中,干别的事情);

  • JUnit/TestNG 测试报告:也就是用以图表等形式提供详细的测试报表功能;

  • 支持分布式构建:Jenkins 可以把集成构建等工作分发到多台计算机中完成;

  • 文件指纹信息:Jenkins 会保存构建集成所产生的 jars 文件、集成构建使用了哪个版;

  • 支持第三方插件:Jenkins 支持第三方插件,这使得 Jenkins 功能变得越来越强大。

持续集成

持续集成(英语:Continuous integration,缩写为 CI),一种软件工程流程,将所有工程师对于软件的工作复本,每天集成数次到共用主线(mainline)上。

这个名称最早由葛来迪·布区(Grady Booch)在他的布区方法中提出,但是他并没有提到要每天集成数次。之后成为极限编程(extreme programming,缩写为XP)的一部分。在测试驱动开发(TDD)的作法中,通常还会搭配自动单元测试。

持续集成的提出,主要是为了解决软件进行系统集成时面临的各项问题,极限编程称这些问题为集成地狱(integration hell)。

持续集成主要是强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。简单来讲就是:频繁地(一天多次)将代码集成到主干。

持续集成的效益

  • 及早发现集成错误且由于修订的内容较小所以易于追踪,这可以节省项目的时间与成本。

  • 避免发布日期的前一分钟发生混乱,当每个人都会尝试为他们所造成的那一点点不兼容的版本做检查。

  • 当单元测试失败或发生错误,若开发人员需要在不除错的情况下还原代码库到一个没有问题的状态,只需要放弃一小部分的更改 (因为集成的次数频繁)。

  • 让 "最新" 的程序可保持可用的状态供测试、展示或发布用。

  • 频繁的提交代码会促使开发人员创建模块化,低复杂性的代码。

  • 防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。

持续集成的作用

  • 保证团队开发人员提交代码的质量,减轻了软件发布时的压力;

  • 持续集成中的任何一个环节都是自动完成的,无需太多的人工干预,有利于减少重复过程以节省时间、费用和工作量。

持续集成的特点

  • 是一个自动化的、周期性的集成测试过程,从检出代码、编译构建、运行测试、结果记录、测试统计等都是自动完成的,无需人工干预;

  • 需要有专门的集成服务器来执行集成构建;

  • 需要有代码托管工具支持;

持续交付

持续交付(英语:Continuous delivery,缩写为 CD),是一种软件工程手法,让软件产品的产出过程在一个短周期内完成,以保证软件可以稳定、持续的保持在随时可以释出的状况。

它的目标在于让软件的建置、测试与释出变得更快以及更频繁。这种方式可以减少软件开发的成本与时间,减少风险。

持续交付是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」(production-like environments)中。比如,我们完成单元测试后,可以把代码部署到连接数据库的 Staging 环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境中。

持续部署

持续部署(英语:Continuous Deployment,缩写为 CD),是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。

有时候,持续部署也与持续交付混淆。持续部署意味着所有的变更都会被自动部署到生产环境中。持续交付意味着所有的变更都可以被部署到生产环境中,但是出于业务考虑,可以选择不部署。如果要实施持续部署,必须先实施持续交付。

持续部署即在持续交付的基础上,把部署到生产环境的过程自动化。

关键字: CI/CD 持续集成/持续交付/持续部署

九. Maven 介绍

Maven 项目对象模型(POM)是可以通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。

由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司项目采用 Maven 的比例在持续增长。

Maven 这个单词来自于意第绪语(犹太语),意为知识的积累,最初在 Jakata Turbine 项目中用来简化构建过程。当时有一些项目(有各自 Ant build 文件),仅有细微的差别,而 JAR 文件都由 CVS 来维护。于是希望有一种标准化的方式构建项目,一个清晰的方式定义项目的组成,一个容易的方式发布项目的信息,以及一种简单的方式在多个项目中共享 JARs。

十. 部署jenkins

导入安装源

wget -O /etc/yum.repos.d/jenkins.repo --no-check-certificate https://pkg.jenkins.io/redhat-stable/jenkins.repo

rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key

安装jenkins(open欧拉版本下载java17)

yum install fontconfig java-17-openjdk -y

yum install jenkins -y

登录jenkins

启动jenkins

登录地址192.168.71.131:8080

导入登录密码

cat /var/lib/jenkins/secrets/initialAdminPassword

等待片刻

刚开始选择推荐即可

等待安装

创建管理员用户

配置实例

直接保存

开始使用

重新登录jenkins

十一.总结

本文介绍了DevOps的核心概念和发展背景。随着敏捷开发需求增加,DevOps应运而生,通过开发运维一体化提升软件交付效率。文章详细阐述了DevOps生命周期、三大原则(流动、反馈、持续学习)、优势(自动化流程、快速反馈)以及典型开发流程(Plan-Code-Build-Test-Deploy-Operate-Monitor-Integrate)。重点讲解了持续集成/持续交付/持续部署(CI/CD)概念,并介绍了Jenkins这一关键工具的功能特点。最后提供了Jenkins的安装部署指南。DevOps通过优化协作流程和自动化工具链,显著提升了软件开发交付效率和质量。

相关推荐
听说唐僧不吃肉1 天前
DevOps篇之通过GitLab CI 流水线实现k8s集群中helm应用发布
k8s·devops
fyihdg1 天前
aws上创建jenkins
云计算·aws
TG_yilongcloud1 天前
亚马逊云代理商:如何选择适合的AWS EC2实例类型?
服务器·云计算·aws·实例类型
Akamai中国1 天前
应用平台更新:可定制目录、基于Git的密钥管理与K8s项目自动化管理
人工智能·云计算·云服务·云存储
重启的码农1 天前
云游戏技术之高速截屏和GPU硬编码 (1) 捕获-预处理-编码流水线
c++·云计算·音视频开发
重启的码农1 天前
云游戏技术之高速截屏和GPU硬编码 (2) 应用程序主控
c++·云计算·音视频开发
极小狐1 天前
GitLab 18.3 正式发布,更新多项 DevOps、CI/CD 功能【二】
ci/cd·gitlab·devsecops·devops·极狐gitlab
七牛云行业应用1 天前
私有化存储架构演进:从传统NAS到一体化数据平台
大数据·人工智能·架构·云计算·七牛云存储
我要学习别拦我~1 天前
统计学的“尝汤原理”:用生活案例彻底理解中心极限定理
经验分享·生活