CI/CD | 深入研究Jenkins后,我挖掘出了找到了摆脱低效率低下的方法

news2024/12/25 14:10:55

在这里插入图片描述

在本系列的第一篇文章中,您已经了解了一些关于如何管理Jenkins的内容,主要是为无序的人带来秩序。在这篇文章中,我将更深入地探讨我效率低下的问题,提出我们工作流中一些安全性、治理和合规性的挑战。这不仅仅是你在网站上或展览横幅上看到的DevOps流行语——它们是保持软件交付速度的关键。我发现,如果我们的安全协议没有一致的治理或合规性,自动化就会变得不那么…自动化。

以下是我发现不受管理的Jenkins的另外两个缺点,一起来看看,说不定和你发现的一样。

问题3:缺乏一致性

在我之前的文章中,提到过一个主题:分散控制和缺乏可见性会产生混乱。有太多的人操控太多的变量,这就很难让每个人、每件事处于同一个起跑线。这带来了巨大的障碍。

**缺乏治理会阻碍最佳实践。**当随便什么人都可以启动、配置或修改服务器时,您实际上是没有治理能力的,并且几乎没有机会去持续地实施最佳实践(例如定期安全扫描、禁止不安全插件等)。

**插件划分了服务器、工作流程和团队。**如果没有插件管理,您的团队可能会在服务器中放入任何数量(和质量)的插件。这将给团队间带来相当大的兼容性和互操作性问题,他们将不可避免地使用有冲突的插件,并按照不同的时间表来更新和共享插件。

**缺乏一致性会导致更多的Bug。**流水线的一致性是避免错误的关键。由于不同配置的控制器、不同的插件集、灵活变化的工作流程以及基本上互不关联的团队,不受管理的Jenkins会增加您的工程师寻找Bug的时间。

**备份可能是零零散散的。**备份数据并验证这些备份的完整性都需要有组织、有纪律。如果缺少有意义的治理,您的备份策略可能会有漏洞,然后面临丢失数据的风险。

问题4:缺乏安全

网络安全是一项永无止境的挑战。云计算和业务转型带来了具有高度流动性(并不断扩大)的攻击范围,快速的创新步伐要求企业时刻保持警惕来击退潜在的攻击者。那么,这是如何对于已经陷入我所提到的困境的企业造成更大的影响的?

**没有授予任何人执行安全策略的权利。**如果没有集中的权力或可靠的治理,您将很难让团队遵守安全最佳实践(甚至遵循基本政策)。这将会给您的流水线带来有风险的插件、有风险的代码和有风险的做法。

**您的安全强度只达到了您最不安全的插件的水平。**随着插件在控制器中数量激增,这些插件中的任何安全漏洞都会成为您的负担。插件开发者是否修补了这些漏洞,以及你的团队是否为了更好地利用安全补丁而可靠地更新他们的插件,这些都是安全方面的通用常识。

**漏洞修复可能会很慢,甚至根本不存在。**由于厨房里有太多厨师,而且普遍缺乏可见性和协调,因此对发现的任何安全威胁进行修复将非常麻烦。

安全性混乱且薄弱,导致合规也变得困难。合规性就是要证明您是受控的,拥有可靠的保护措施,并且可以满足安全标准。由于上面列出的所有原因,如果想靠不受托管的Jenkins实现这一点,很难。

迈入标准化、自动化和优化的大门!

如果您阅读了第一篇文章,就已经知道是CloudBees CI帮助我控制不受管理的Jenkins实例的混乱局面,但现在,是我认真对待提高全面效率的时候了。这意味着一致性和自动化。以下是我确定对我和我的团队有帮助的项目:

快速上手

  • 所有开发团队一开始就有一个值得信赖、经过验证且受到支持的Jenkins版本,和以及一套经过稳定性和安全性测试的精选插件。对我来说,支持是最重要的一点。在我有问题时,总有人在我身边帮助解决——无论问题多么简单;
  • 使用自定义CasC捆绑包来配置可重复组件,使团队能够从从单一来源管理的预配置和测试环境开始。

流水线模板目录,用于在整个运营过程中执行一致性和稳定性

  • 你拥有一个基于最佳实践的流水线集合,让团队永远不必从头开始,并且对模板的更改会从一个点推送到所有团队的流水线中;
  • 每次运行job时都会获取最新的模板代码,因此job始终反映的是最新的标准。可以有选择性的把开发人员限制在特定的模板之中,来实现治理目标;
  • 想要避免从头开始治理开发人员,可以通过修改现有模板来适应新议程;
  • 自定义标记文件让您能够基于软件配置管理(SCM)标识符的基础上,即时选择构建模板。

自动备份和恢复

  • 消除备份策略中的人为错误。我们团队中有很多独立的思考者,这对于功能开发这很有利,但对于一致的环境设置却不是很友好。所以自动备份和恢复有助于为他们创造一个可以启动和使用的环境,而不是每次都从头开始创建。

跨团队协作

  • 使用一个强大的发布者/订阅者模型跨多个控制器管理事件,无论身处何处,团队都订阅流水线事件并对其采取行动;
  • 流水线同步工作,不同的团队能够使用同步的自动化执行跨流水线的协作;
  • 团队可以通过控制器分开工作,但他们仍然可以协同工作,实现流水线自动化;
  • 每个团队都应该能够安全地使用不同的插件和技术,而不会有影响其他团队的风险。

提升开发人员的工作效率

  • 直接在GitHub和Slack中接收细化的、可操作的构建数据。

轻松实现安全性和合规性

安全性和合规性对我们来说是一个巨大的挑战。毕竟,如果您不能完全控制开发环境,那么就很难实现这两个目标,但目前很少有开发人员能够做到。幸运的是,随着CloudBees的集中化和标准化,安全性和合规性变得相对来说更容易了。随着每个团队都使用安全的构建和批准的流水线配置,我的SDLC有了全面的护栏支持(guardrails supporting)。以下是一些使我的工作变得更轻松的项目:

集中管理的安全策略

  • 授权控制器仅运行经过测试、验证且安全的Jenkins版本。如果构建中出现问题,可以更轻松地全局复制、修复和更新该构建。
  • 从单一位置管理身份验证和授权功能: 在所有控制器上使用单点登录(SSO);
  • 使用基于角色的访问控制(RBAC)模型定义安全凭据,并在控制平面、文件夹或单个控制器级别对访问权限进行分组定义;
  • 使用文件夹层次结构实施对控制器、代理或项目的访问;
  • 将RBAC与文件夹限制相结合以提高安全性,并确定谁可以在文件夹层次结构中的每个位置创建、修改、删除和使用凭据。
  • 基于每个团队确定安全的范围。 使用模板化的工作流程,将安全性落实到您的流水线中。
  • 简化合规性
  • 只需使用CasC捆绑包和流水线模板即可构建合规性。
  • 将插件的风险降至最低
  • 限制团队只能使用一组精心挑选过的插件(CloudBees保障计划 - CAP),这些插件经过稳定性和安全性测试,并确认符合合规性目标。

随着您团队的扩大而扩展

大规模自动化是Jenkins的追求。不受管理的Jenkins在自动化方面可能表现出色,但在大规模管理部分则不然。这里指的不是管理一个团队,而是管理很多团队。我需要为团队提供成长的空间和所需的支持,并计划随着我们投资组合的扩大创建新的团队。首先,需要考虑的就是对着人员的扩大而扩展,因为如果没人使用它,那么这个软件被开发出来的目的是什么呢?需要有一个人来确保所有人拥有他们完成工作所需的一切事物。在上述对我有用的功能中,有一些对扩展也有所帮助。

  • 通过自动配置新团队/控制器、传播最佳实践(流水线模板、CasC等),以及为规模合适的基础设施管理资源,来实现大规模交付Jenkins
  • 团队能够自行快速启动新的控制器和工作区,同时确保SDLC保持一致、受管控、合规且安全。
  • 如果您使用的是Kubernetes,请在扩展时利用Kubernetes配置来优化基础架构资源。这样,控制器可以根据需要启动,然后在不使用时可以休眠。

企业级支持

最后,要真正让使用Jenkins企业做好准备,我们必须解决房间里的大象:Jenkins缺乏结构化的支持。社区援助是非常好的解决方案,但是当灾难发生时,您是没有时间在论坛上挖掘出解决方法的。您要将弹性融入您的计划,您需要坚如磐石的专业支持,这样您才可以专注于构建应用程序,而不用为修复让步。

让CloudBees团队的Jenkins专家为您提供指导。你不必再依赖Rick——你可爱的Jenkins专家,他收集了1980年代的限量版星球大战人物(我们有着同样的热情,Rick)。相反,您要依靠专家的帮助,让Rick在其他地方大展拳脚吧。

CloudBees CI建立在Jenkins之上,并添加了额外的功能来满足企业的需求。我们了解Jenkins,并且因为我们为开源项目贡献了大量代码,所以我们在解决问题方面具有独特的优势——如果出现问题。

此外,CloudBees会主动解决Jenkins构建中的漏洞,确保它们在安装前就被搞定,而且我们还创建了Jenkins健康顾问。健康顾问在整个Jenkins环境中提供运行状况监控,在问题(安全漏洞、性能瓶颈、插件缺陷等)影响用户之前发送通知。健康顾问适用于所有Jenkins用户,而不仅仅是CloudBees CI用户,所以如果有专门支持Jenkins的精英团队,您也可以使用它。

在下一篇文章中,我将解决可怕的基础设施问题。基础设施就像地基,您房子下面的地下室。我既想知道什么时候有问题,又不想知道——因为解决这些问题需要做很多工作。我就是这样的人,在我们团队一瘸一拐的前进时,我否认自己有基础设施问题。就有点像我知道天花板上有一只蜘蛛…但也许如果我忽视它,它就能自行消失。但事实上是没有这种运气的——那些小生物会再次在某个地方出现。

作者:萨曼莎·弗罗斯特(Samantha Frost),CloudBees公司产品营销经理。

文章来源:https://www.cloudbees.com/blog/managed-jenkins-consistency-isnt-boring

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/374593.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从此不怕被盗号:教你如何用 Python 制作一个密码生成器

原由: 定期更换密码是一种非常重要的安全措施,这种做法可以有效地保护你的账户和个人信息不受黑客和网络攻击者的侵害。 密码泄露是一个非常普遍的问题,许多人的账户和密码经常会被泄露出来,导致个人信息被盗用、金融损失、恶意…

hive建分区表,分桶表,内部表,外部表

hive建分区表,分桶表,内部表,外部表 一、概念介绍 Hive是基于Hadoop的一个工具,用来帮助不熟悉 MapReduce的人使用SQL对存储在Hadoop中的大规模数据进行数据提取、转化、加载。Hive数据仓库工具能将结构化的数据文件映射为一张数…

Redis 如何实现库存扣减操作和防止被超卖

在日常开发中有很多地方都有类似扣减库存的操作,比如电商系统中的商品库存,抽奖系统中的奖品库存等。其基本的流程如下:1 解决方案使用mysql数据库,使用一个字段来存储库存,每次扣减库存去更新这个字段。还是使用数据库&#xff0…

自动视觉锁螺丝机及其控制系统

1.全自动智能锁螺丝机的意义电子消耗品、家用电器、汽车零件、音箱、安防、玩具、LED 等制造业的生产过程中,产品组装是一个非常重要的步骤,而螺丝锁付是组装过程的核心工艺之一。当下国内智能手机、智能汽车、智能家电等产品更新换代快,产品…

深入理解C#的协变和逆变及其限制原因

阅读本文需要的一些前置知识: C#基本语法、C#的泛型使用、C#的运行过程 由于协变和逆变存在一些细节,在阅读时请注意“接口”和“类型”的差异,此外,文中有可能在不同的语境中将“结构体”和“值类型”混用,但表达的同…

JavaEE简单实例——MyBatis一对多关联映射的嵌套结果集查询

简单介绍: 在之前的章节,我们简单介绍了MyBatis中的一对一的关联查询,使用了嵌套查询和嵌套结果集两种方式进行讲解,但是在实际的使用中,我们常用的是嵌套结果集的查询方式,所以在一对多的查询中&#xff…

无线耳机哪个品牌音质好?2023无线蓝牙耳机音质排行

现今,外出佩戴蓝牙耳机的人越来越多,各大品牌厂商对于蓝牙耳机各种性能的设计也愈发用心。那么,无线耳机哪个品牌音质好?下面,我来给大家推荐几款音质好的无线蓝牙耳机,可以当个参考。 一、南卡小音舱蓝牙…

【人工智能】科大讯飞API接口调用(第一集)

前言 这学期有一门人工智能教育课程,恰巧又有这么一个实践,要求进行人工智能接口调用 于是首选了科大讯飞,下面是详细过程记录 科大讯飞接口调用 以下是流程以及实现细节描述 调用流程 第一步 来到科大讯飞开放平台 http://www.xfyun.…

四、阻塞队列

文章目录基础概念生产者消费者概念JUC阻塞队列的存取方法ArrayBlockingQueueArrayBlockingQueue的基本使用生产者方法实现原理ArrayBlockingQueue的常见属性add方法实现offer方法实现offer(time,unit)方法put方法消费者方法实现原理remove方法poll方法poll(time,unit)方法take方…

wpf -绑定

事件双向驱动滑块变化&#xff0c;将值赋给文本控件与控件之间双向绑定{Binding ElementNameslider, PathValue}ElementName: 绑定哪个控件呢&#xff1f; 指绑定的x:Name这个控件Path &#xff1a; 绑定哪个属性呢&#xff1f;Value<StackPanel><Slider x:Name"…

Python每日一练(20230227)

目录 1. 路径交叉 ★★★ 2. 缺失的第一个正数 ★★★ 3. 寻找两个正序数组的中位数 ★★★ 附录 散列表 基本概念 常用方法 1. 路径交叉 给你一个整数数组 distance 。 从 X-Y 平面上的点 (0,0) 开始&#xff0c;先向北移动 distance[0] 米&#xff0c;然后向西移…

ChatGPT提高你日常工作的五个特点,以及如何使用它来提高代码质量

ChatGPT已经完全改变了代码开发模式。然而&#xff0c;大多数软件开发者和数据专家们仍然不使用ChatGPT来完善——并简化他们的工作。 这就是我们在这里列出提升日常工作效率和质量的5个不同的特点的原因。 让我们一起来看看在日常工作中如何使用他们。 警告&#xff1a;不要…

第十一届“泰迪杯”数据挖掘挑战赛赛前指导安排

第十一届“泰迪杯”挑战赛报名一周了&#xff0c;许多的参赛队伍及带队老师都在咨询我们赛前指导安排及内容&#xff0c;今年的赛前指导安排还是分为了赛前指导录播课程及赛前指导直播两个模块。小编这就为大家介绍一下吧。 赛前指导 赛前指导录播课程 2月25日9:00-4月14日 …

vue中的百度地图的搜索定位功能

效果图 申请百度地图AK 前往 百度地图开放平台控制台 &#xff0c;登录百度账号&#xff0c;创建应用即得。 封装loadBMap.js文件 /*** 动态加载百度地图api函数* param {String} ak 百度地图AK&#xff0c;必传*/ export default function loadBMap(ak) {return new Promise…

C语言|文件读写,代码运行后留下“记忆”

前言对于一个代码&#xff0c;运行时可能需要保留产生的结果&#xff0c;例如计算值&#xff0c;筛选值&#xff0c;记录点或者小游戏的得分&#xff0c;而正常情况下我们要保存一个数据&#xff0c;想到的肯定是打开我们的文本软件&#xff0c;手撸文字&#xff0c;今天这篇文…

Flutter 数据传递

在应用开发过程中数据传递&#xff0c;flutter提供 InheritedWidget 以及多种 provider, 各有差异从从使用习惯上面 这边主要介绍以下两种&#xff1a; InheritedWidgetprovider &#xff08;ChangeNotifier&#xff09;InheritedWidget&#xff1a; 提供一种 从上而下 的数据…

线上研讨会报名 | Perforce、中手游、星思半导体专家邀您一起畅聊如何通过数字资产管理与版本控制赋能大规模研发

全球领先的数字资产管理与DevSecOps工具厂商Perforce联合中国授权合作伙伴龙智举办的Perforce on Tour网络研讨会将于2月28日下午2:00举行。 本次研讨会以“赋能‘大’研发&#xff0c;助力‘快’交付”为主题&#xff0c;龙智董事长何明、Perforce高级顾问Robert Cowham&…

SpringMVC的基础知识以及如何使用各注解

1.SpringMVC的概述 学习SpringMVC我们先来回顾下现在web程序是如何做的&#xff0c;咱们现在web程序大都基于三层架构来实现。 三层架构 浏览器发送一个请求给后端服务器&#xff0c;后端服务器现在是使用Servlet来接收请求和数据 如果所有的处理都交给Servlet来处理的话&am…

SpringBoot (一) 项目构建、配置读取、静态资源定义

哈喽&#xff0c;大家好&#xff0c;我是有勇气的牛排&#xff08;全网同名&#xff09;&#x1f42e; 有问题的小伙伴欢迎在文末评论&#xff0c;点赞、收藏是对我最大的支持&#xff01;&#xff01;&#xff01;。 前言 SpringBoot是基于Spring开发的开源项目&#xff0c…

Apache 深入优化

Apache 深入优化 &#x1f3c6;荣誉认证&#xff1a;51CTO博客专家博主、TOP红人、明日之星&#xff1b;阿里云开发者社区专家博主、技术博主、星级博主。 &#x1f4bb;微信公众号&#xff1a;微笑的段嘉许 &#x1f4cc;本文由微笑的段嘉许原创&#xff01; &#x1f389;欢迎…