我们有一个 Jenkins-Chef 设置,其中包含针对客户网站的 QA 构建项目。构建从 Bitbucket 获取代码,脚本将 Recipe 从 Chef 客户端上传到 Chef 服务器。
这些构建在很长一段时间内运行良好。两天前,自动和手动构建开始失败,并出现以下错误(取自 Jenkins 控制台输出):
Updated Environment qa
Uploading example-deployment [0.1.314]
ERROR: Request Entity Too Large
Response: JSON must be no more than 1000000 bytes.
据我了解,JSON 文件应该与开发人员在此网络服务器上使用的 NodeJS 相关。
我们检查了 Jenkins、Chef-Server 和 QA 服务器的所有配置文件。我们找不到更改导致此错误的 1MB 限制的方法。
我们尝试更改 client_max_body_size,但没有成功。 我们检查了 JSON 文件大小,没有一个达到此限制。 知道我们可以在哪里找到解决方案吗?这个限制可以改变吗?我们可以做些什么(基础设施方面)还是应该从开发人员方面解决这个问题?
最佳答案
所以首先,1M值或多或少是硬编码的, Chef 服务器并不打算存储大对象。
在上传 Recipe 之前,会创建一个包含其信息的 json 文件,因为该文件将存储在数据库中并建立索引,因此它的大小不应超过太大,以避免出现性能问题。
这个想法是仅将绝对必要的内容上传到 Chef 服务器,剥离 CVS 目录、任何 IDE 构建/项目文件等。
实现这一目标的最佳解决方案是使用 chefignore file 。它必须在 cookbook_path 下创建。
此内容是上传 Recipe 时要忽略的通配符匹配,因此示例可能是:
*/.svn/* # To strip subversion directories
*/.git/* # To strip git directories
*~ # to ignore vim backup files
关于node.js - JSON 不得超过 1000000 字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32500515/