Salesforce DevOps 的挑战与解决方案:如何优化开发流程

120 阅读6分钟

引言

在企业业务不断增长的过程中,部署 Salesforce 变更变得越来越复杂。DevOps 实践可以帮助我们自动化并提高软件构建和运行的效率。然而,在实施过程中,我们不可避免地会遇到一些挑战。本篇文章将详细介绍这些挑战,并提供相应的解决方案,帮助我们在 Salesforce 开发中实现高效协作和持续交付。


1. 什么是 DevOps?

DevOps 是一种结合了技术实践和精益管理原则的方法论,旨在通过自动化和标准化来提升软件开发和运维的效率。它将 Continuous Delivery(持续交付)的技术实践与精益产品开发的业务实践相结合,以实现更快、更可靠的软件交付。

2. Salesforce DevOps 面临的挑战

2.1 缺乏对整个过程的清晰理解

在跨团队开发时,缺乏对整个变更过程的清晰理解是一个常见问题。例如:

image.png

  • 变更应该从哪里开始实施?  应该直接在生产环境中实施变更吗?
  • 需要部署到哪个环境?  是 UAT Env还是Integration Env?
  • 谁来批准这些变更?

这些问题如果没有明确的答案,会导致发布周期混乱。因此,建立一个结构化的流程至关重要。

2.2 Change Set限制

Change Set在 Salesforce 中用于管理元数据(Metadata)变更,但它们存在一些局限性:

  • 无法按名称或类型搜索组件:开发者必须手动浏览页面来查找所需的元数据项。
  • 无法过滤已添加的组件:一旦添加组件,就无法在选择列表中进行过滤。
  • 某些组件无法使用Change Set部署:只能在受控环境中进行手动更改。如Web to Lead, Territory Assignment Rules, Quote Template。
  • 无法实现持续交付:不能自动化地、频繁地将代码或元数据变更部署到不同的环境(如测试、预生产、生产环境),从而达到随时可以安全发布新版本的状态。
2.3 困难的环境同步

在部署到更高环境后,团队经常面临sandbox同步的问题。例如,如果公司在hotfix sandbox中进行fix并推送fix到生产环境。较低环境元数据会出现与生产环境不一致的情况。这可能导致代码在较低环境往更高环境部署出现错误并导致管道运行失败。

为了确保生产和开发sandbox同步,很多时候我们会从production来刷新现有的开发sandbox。但是也会造成一些不便。

1. Metadata Loss(元数据丢失) 当你执行沙盒刷新操作时,生产环境中的最新元数据会被复制到沙盒环境中,这将覆盖沙盒中之前存在的任何未保存或未提交的更改。这意味着如果你在沙盒中进行了一些开发工作但还没有将其推送到生产环境,这些工作将会丢失。

2. Monthly Sandbox Refresh(每月沙盒刷新) 全功能沙盒(Full Sandboxes)有严格的刷新频率限制,即每月只能刷新一次。这意味着如果在两次刷新之间生产环境发生了变化(例如,通过热修复环境进行的紧急修复),这些变化不会自动同步到沙盒中。开发者需要等待下一次计划的刷新或者手动将这些变化应用到沙盒中,这可能会导致开发和测试工作的延迟。

3. Scrambled Emails(混淆的电子邮件)

为了防止沙盒环境中的操作意外地向生产用户发送邮件,Salesforce会在沙盒刷新时对用户的电子邮件地址进行修改。这种修改通常涉及添加一些随机字符或前缀/后缀。由于电子邮件地址被修改,用户在刷新后首次尝试登录沙盒时会遇到问题,因为他们需要通过验证新的电子邮件地址来重新获得访问权限。

4. Data Loss(数据丢失)

大多数类型的沙盒(如开发沙盒、组沙盒等)在刷新时不会保留其数据。只有全功能沙盒和部分复制沙盒在刷新时会保留部分或全部数据。对于其他类型的沙盒,刷新操作会导致所有数据被清除,这意味着开发者需要在每次刷新后重新创建测试数据,这不仅耗时而且容易出错。

2.4 缺乏历史追踪

当多个开发者在同一环境中工作并对相同组件进行更改时,会面临比较棘手的问题。由于Change Set的限制,你无法看到谁做了什么更改,也没有工具可以提示你的更改是否会被覆盖。

2.5 团队协作困难

image.png Salesforce 没有提供任何控制或管理工具来确保你部署的是正确的版本。随着团队的成长,引入变更的同时保持协作变得更具挑战性。同步环境、跟踪历史记录以及逐行合并更改的能力不足,减少了团队合作的可能性。

2.6 对变更的质量检查有限

Apex 测试是 Salesforce 内置的唯一功能,可以确保自定义代码的质量。虽然 Apex 测试可以识别特定错误,但它们不能在问题发生前识别代码低效和不良习惯。为了保持代码质量,公司需要进一步努力定义和实施代码审查过程。

2.7 缺乏监控和合规性

image.png 作为管理员,你需要快速准确地迁移数据,如从 CPO 等复杂应用迁移到 Salesforce。如果你使用 Data Loader,可能会遇到创建多个 CSV 文件和执行 Excel Vlookup 操作的繁琐任务。此外,还需要开发资源来编写脚本和解决可能出现的任何错误。

2.8 难以识别和消除瓶颈

未解决的瓶颈会对 DevOps 流程的性能产生重大影响。很难确定为什么工作项会花费时间等待,或者知晓哪些工作项被回退到之前的阶段是因为质量问题。


结论

面对 Salesforce DevOps 的挑战,我们需要采取一系列措施来优化开发流程。建立清晰的变更管理流程、克服Change Set限制、保持环境同步、增强历史追踪能力、促进团队协作、加强变更质量检查、实施有效监控和合规性策略,以及及时识别和消除瓶颈,都是实现高效开发的关键步骤。