插件发布自动反馈
引言
新的Gradle插件在被批准发布到插件门户之前,需要经过人工检查。现在,大部分检查已完全自动化,以减少插件作者的等待时间并降低人为错误的风险。这篇博文描述了影响社区插件作者的新自动化,并解释了它对生态系统安全的重要性。
插件发布安全性 #
Gradle的首要任务之一是降低供应链攻击的风险。这种阴险的攻击可能具有非常大的规模和影响。例如,一个恶意社区插件可能会感染大量使用Gradle构建的软件系统。您可以在以下博文中阅读更多关于此类攻击及其示例。
在过去的一年里,我们Gradle一直在逐步加大努力,以减轻与供应链攻击相关的风险。在插件门户的背景下,我们的主要目标是:
- 更严格地执行插件域所有权
- 防止插件代码依赖项遮蔽构建的其他“真实”依赖项
当一个新插件发布到Gradle插件门户时,它会经历一个人工审查过程。这通常只针对初始版本进行。一位Gradle工程师会检查元数据并决定是将其发布到门户,还是要求对其进行更改。
为了让您更好地了解工程师正在进行哪些健全性检查,以下是一些示例:
- 插件是否发布到具有误导性的GAV(组、构件、版本)坐标?
- 发布用户是否属于拥有该插件的组织?
- 插件是否有清晰有用的描述?
- 插件是否有正确的标签?
- 文档链接是否有效且可访问?
尽管这种方法一直运作良好,但它不必要地增加了向插件作者提供反馈所需的时间,无论是解决他们可能遇到的问题,还是将他们的插件发布到门户。人工方面也意味着仍然可能出现人为错误。
全面自动化 #
我们已决定将大部分审批检查自动化,作为插件发布过程的一部分。如果任何检查失败,发布现在将失败,并且审批过程甚至不会开始。这可以为插件作者提供即时反馈,如果存在任何明显问题,而不是像当前那样需要花费时间等待人工审查(和拒绝)。
大多数检查都在服务器端运行,因此可以验证的条件集非常广泛。服务器端检查的效果之一是,无论作者使用哪个版本的插件发布插件,都会执行这些检查。
我们理解,出版物因自动检查而被拒绝可能会在最初引起一些沮丧,但我们想强调的是,接受插件的标准保持不变。现在自动拒绝的任何插件,在之前的人工审批过程中无论如何都会被拒绝,只是延迟时间更长。通过提供即时反馈,插件作者可以在代码仍然记忆犹新时修复插件审批问题,而不是以后再处理。
此外,检查过程会尝试提供关于它发现的所有问题的全面信息,而不仅仅是它遇到的第一个问题,因此重试次数应该最少。
我们还在插件发布文档中添加了故障排除指南,以帮助解决最常见的问题。
例外情况 #
虽然自动化程度很高,但并非所有插件审批检查都适合以这种方式进行。有些事情总是需要人工判断。我们希望,尽管这些更改不能消除人工审批过程的必要性,但它们应该大大增加可以无需进一步更改即可批准的插件数量。这应该有助于插件作者更快地成功发布。
还需要注意的一点是,大多数自动化检查仍然只对插件的初始版本运行,因此发布插件更新应该像现在一样简单。