DevSecOps 是一种强大的软件开发方法,可以加快交付速度并提高效率。
在 2024 年伦敦 QCon 的演讲中,我探讨了团队在他们的 DevSecOps 流程中是如何面对不同程度的低效率,从而阻碍了进步和创新。
我强调了一些常见的问题,比如调试时间过长、工作流程效率低下等,同时还展示了人工智能(AI)是如何成为简化这些流程并提高效率的强大工具的。
云原生——DevSecOps
让我们来探索 DevSecOps 及其与云原生的联系。在我们开启 DevSecOps 之旅时,请先考虑你当前所处的阶段。你是处于部署、自动化测试、利用临时环境阶段,还是要从头开始?
在整个讨论过程中,我鼓励大家找出自己当前所面临的最低效的任务。是问题创建、编码、测试、安全扫描、部署、故障排除、根本原因分析还是其他什么?
想象一下人工智能在提高效率方面的潜力。然而,认识到工作流程多样性的重要性是至关重要的。稍后我们将会探讨具体的示例。
为人工智能建立护栏至关重要。确保数据安全,防止环境泄漏。此外,衡量人工智能的影响也至关重要。不要仅仅是因为别人实施了人工智能我们也要实施。构建一个令人信服的案例并展示其价值。我们也将深入探讨这一方面。
开发工作流程中的 AI
在快节奏的软件开发世界中,简化工作流程对于提高效率并取得成功至关重要。2024 年,70% 的受访者表示,他们组织中的开发人员需要一个多月的时间才能融入团队并提高生产力,而 2023 年这一比例为 66%(数据来源:GitLab 2024 年全球 DevSecOps 调查)。人工智能已准备好重组我们的工作方式。通过在我们的工作流程中使用人工智能,我们可以获得很多好处,包括提高效率、减少花在重复任务上的时间、增强对代码的理解、增加协作和知识共享,简化新员工入职培训过程。
在软件开发方面,人工智能提供了许多可能性来增强每个阶段的工作流程——从将团队划分为开发、运维和安全等专业角色,到促进规划、管理、编码、测试、文档和审查等典型步骤。
人工智能驱动的代码建议和生成功能可以自动执行自动完成、识别缺失的依赖项等任务,从而提高了编码效率。此外,人工智能还可以提供代码解释、总结算法、提出性能改进建议,并将长代码重构为面向对象的模式或其他不同的语言。
人工智能的影响不仅限于开发,还延伸到了运维领域。通过分析较短的描述,人工智能可以生成全面的问题描述,从而节省了宝贵的时间和资源。它还可以总结冗长的讨论和问题描述,使团队成员更容易了解情况并参与其中。
现实世界中的 AI 应用实例
Anthropic Claude Workbench 是一个功能强大的工具,可用于开发和运行在底层大语言模型(LLM)上的 AI 提示查询。例如,一个简单的提示可以生成启动 Golang 项目的全面指导,包括 CLI 命令、GitLab 的 CI/CD 配置,甚至 OpenTelemetry 仪表盘。这消除了筛选无数标签和资源的需要,节省了时间并提高了效率,特别是对于新团队成员来说。
此外,人工智能可以帮助制定详细的问题描述,将一个简短的想法转化为一个全面的提案。在提供的示例中,该工具探索了是使用 SDK 还是使用适当的自动检测来检测源代码。这是启动讨论并探索不同解决方案的好方法。
此外,人工智能在总结冗长的讨论和计划方面也具有重要价值,可以快速理解复杂的问题。通过将内容粘贴到 Anthropic Claude 3 Workbench 中,它可以有效地压缩信息,从而实现更快的决策和更有针对性的方法。
另一方面,人工智能通过总结冗长的问题描述、在 Go 中生成 Kubernetes 的可观测性 CLI、将 Go 代码重构为 Rust 以及为合并请求推荐审查者来展示它的多功能性。
AI 驱动的运维:事件响应、可观测性和成本优化
将重点从开发转移到运维,让我们探讨人工智能是如何彻底改变根本原因分析、可观测性、错误跟踪、性能和成本优化的。一个常见的痛点是 CI/CD 管道停滞不前,就像修改后的 XKCD 303 漫画中描绘的一样。
无需手动筛选作业日志,人工智能即可对作业日志进行分析,并提供可操作的见解,甚至提出修复建议。通过改进提示并与人工智能进行对话,开发人员可以快速诊断并解决问题,甚至获得优化建议。
安全性是至关重要的,因此在分析之前必须过滤掉密码和凭据等敏感数据。一个精心设计的提示可以指示人工智能以任何软件工程师都能理解的方式解释根本原因,从而加速故障排除。这种方法可以显著提高开发人员的效率。
对于云原生部署,Kubernetes 的故障可能会是一场噩梦。然而,像 CNCF 沙箱项目 k8sgpt 这样的工具利用 LLM 来分析部署,并从 SRE 或效率的角度提供建议。它适用于各种 LLM,甚至可以在 MacBook 上与 Ollama 一起本地运行。
可观测性是运维的另一个关键方面,人工智能可以简化日志分析。在故障发生期间,人工智能可以总结大量的日志数据,更快地查明根本原因,从而帮助快速解决问题。Honeycomb 将人工智能集成到它们的产品中,即体现了这种方法,为复杂的可观测性任务提供了查询助手和其他人工智能驱动的功能。
最后,可持续性监测正在获得越来越多的关注,Kepler 等工具使用 eBPF 和机器学习来预测 Kubernetes 环境中的能耗。这使组织能够优化成本并获得可持续性,从而减少碳足迹。
这些示例展示了人工智能如何改变运维,提高效率,并推动各个领域的创新。
安全工作流程中的 AI
将我们的重点转移到安全工作流程上,人工智能可以成为理解并减轻漏洞、增强安全扫描并解决供应链问题的强大盟友。67% 的开发人员表示,他们所开发的代码中有四分之一或更多来自于开源库,但目前只有 21% 的组织使用了软件物料清单(SBOM)来记录构成其软件组件的成分(来源:GitLab 2024 年全球 DevSecOps 报告)。
回顾过去的某次安全事件,其中开源工具中的 CVE 导致了意想不到的后果,很明显,更深入地了解漏洞及其长期修复至关重要。
人工智能可以通过用简单的术语解释漏洞,澄清诸如格式字符串漏洞、命令注入、定时攻击和缓冲区溢出等概念来提供帮助。通过了解恶意攻击者如何利用漏洞,开发人员可以在不引入回归或损害代码质量的情况下实施有效的修复。
使用诸如“以软件安全工程师的身份解释此漏洞”之类的提示,人工智能可以分析代码片段,提供潜在的漏洞示例,并提出可靠的修复建议。此外,人工智能甚至可以生成带有拟议代码更改的合并请求或拉取请求,从而自动执行修复过程,并能确保安全扫描和 CI/CD 管道的验证修复。
这种简化的方法不仅节省了时间,还降低了人为错误的风险,使漏洞管理更加有效且高效。
人工智能护栏——隐私、数据安全、性能、验证
将我们的注意力转移到人工智能护栏上,解决隐私、数据安全、性能以及人工智能在我们工作流程中的整体适用性至关重要。首先,必须仔细检查数据使用情况。由于潜在的泄漏,我们的数据(包括源代码)不应用于训练 AI 模型。专有数据不应发送给外部提供商进行分析,特别是在银行或政府机构等受监管的环境中。
此外,如果人工智能的功能使用了聊天历史记录,那么数据保留政策和删除实践应该是透明的。必须就数据使用和隐私发表公开声明,并向你的 DevOps 或 AI 提供商询问他们的政策,这一点至关重要。
安全性是另一个至关重要的问题。应控制对人工智能功能和模型的访问,并建立治理机制来定义谁可以使用它们。此外,应实施保障措施,防止敏感内容被发送到提示中。
验证提示响应对于避免被利用至关重要。明确的指导方针和对团队成员要求对于确保负责任且合乎伦理道德地使用人工智能工具是必要的。
透明度是关键。应随时提供有关人工智能使用、开发和更新的文档。此外,制定解决人工智能故障或模型更新的计划对于保持生产力也至关重要。像 GitLab 这样的人工智能透明度中心可以提供有价值的见解和信息。
无论我们使用的是 SaaS API、自管理的 API 还是本地的 LLM,性能监控都是至关重要的。OpenLLMetry 和 LangSmith 等可观测性工具可以帮助我们跟踪人工智能在工作流程中的行为和性能。
最后,由于可能产生幻觉,大模型(LLM)的验证至关重要。测试框架和评估指标对于确保人工智能生成的响应的质量和可靠性至关重要。
By diligently addressing these considerations, you can harness the power of AI while minimizing risks and ensuring responsible and effective integration into your workflows.
通过努力解决这些问题,我们可以利用人工智能的力量,同时最大限度地降低风险,并确保将负责任且有效的人工智能整合到我们的工作流程中。
AI 的影响
从护栏过渡到影响,衡量人工智能对开发工作流程的影响提出了一个新的挑战。超越传统的开发人员生产力指标并探索其替代方法是至关重要的。
可以考虑将 DORA 指标与团队反馈及满意度调查结合起来。此外,需要监控代码质量、测试覆盖率和 CI/CD 管道失败的频率。检查发布时间是减少了还是保持一致。
无论是通过像 Grafana 这样的工具还是其他平台,构建全面的仪表板来跟踪这些指标都是至关重要的。通过分析这些见解,我们可以更深入地了解人工智能是如何影响我们的工作流的,并确定需要改进的领域。虽然通往精确测量的道路仍在持续探索中,但对我们方法的不断探索和完善将使我们更全面地了解人工智能对生产力和整体发展成果的影响。
AI 的采用
虽然将人工智能集成到工作流程中是很有前景的,但重要的是要考虑安全、隐私和数据使用的防护措施,同时还要验证人工智能的影响。有一些先进的技术,如检索增强生成(Retrieval Augmented Generation,RAG),可以增强人工智能的能力。
RAG 通过整合文档或知识库等外部信息源,解决了在旧数据上训练的 LLM 的局限性。通过将这些资源加载到向量存储中并将其与 LLM 集成,用户可以访问最新的特定信息,甚至可以访问当前的 Rust 开发或伦敦天气等主题的信息。
RAG 有实际的应用,例如为 Discord 或 Slack 等平台创建的知识库聊天机器人。即使是像 GitLab 手册这样的复杂文档也可以有效地加载和查询。
有了像 LangChain 这样的工具和像 Ollama 这样的本地 LLM 提供商,我们可以构建自己的 RAG 驱动的解决方案。这使我们能够在不依赖外部 SaaS 提供商的情况下利用专有的数据,从而确保了数据安全和隐私。
AI/LLM 代理
另一个值得关注的领域是 AI/LLM 代理,它们正在迅速发展的。它们可以动态收集数据来回答复杂的问题,从而提高准确性和效率。虽然该技术仍在开发阶段,但它对 DevSecOps 具有巨大的潜力。
此外,考虑针对特定用例的自定义提示和模型。经过内部数据训练的本地 LLM 提供了安全和隐私方面的优势。在定制领域,探索代理调优是替代全面重新训练的一种经济有效的方案。这些先进的技术可以进一步优化我们的 DevSecOps 工作流程。
结论
总之,为了确保高效地实施 DevSecOps,有几个关键的考虑因素。首先,从工作流的角度来看,重复性任务、低测试覆盖率和缺陷可以通过利用代码建议、生成测试和使用聊天提示来解决。其次,在安全领域,解决延迟发布的安全回归问题需要漏洞解释、解决方案和团队知识建设。
最后,从运维的角度来看,在失败的部署上花费了过多时间的开发人员可以从根本原因分析和 k8sgpt 等工具中受益。通过解决这些问题,组织可以增强其 DevSecOps 实践,并简化其软件开发和交付流程。
你可以在点击此处访问公开的演讲幻灯片,此外,它还提供其他的网址和参考资料。
作者介绍
Michael Friedrich 是 GitLab 的开发人员倡导者,专注于通过 AI 提高 DevSecOps 效率。他对学习计算机工作原理的渴望使他从硬件 / 软件系统工程到 DNS,从开源监控开发到编写 Git/GitLab 培训再到 DevOps 工作流。Michael 喜欢教导每个人,并定期在行业活动和聚会上发表演讲。他喜欢迎接意想不到的挑战,并创建了最佳实践教程和实时编程课程。当他不周游世界或远程工作时,他喜欢搭建乐高模型,并热衷于探索嵌入式硬件。
原文链接:
https://www.infoq.com/articles/efficient-devsecops-workflows/
评论