Berkshelf unable to resolve cookbook version from Git tag
我使用 Berkshelf 管理我的 Chef 食谱,并在持续集成管道中处理上传部分。
遵循互联网上的一些最佳实践,我使用
为了在元数据中获取我的食谱的当前版本,我在
中使用了以下帮助程序
1 2 3 4 5 6 7 8 9 10 11 12 | require 'thor-scmversion' def current_version version = IO.read(File.join(File.dirname(__FILE__), 'VERSION')) rescue nil version ||= ThorSCMVersion.versioner.from_path rescue nil version ||= '0.1.0' version end # ... version current_version # ... |
我的问题出现了,如果我想用
安装说明书依赖项
假设我有一个食谱
中使用以下行
1 | cookbook 'app_apache', git: '...', branch: '1.0.1' |
原因是当 Berkshelf 尝试解决依赖关系时,
鉴于以下约束:
-
我希望我的 CI 服务器(而不是其他人)来管理我的食谱版本
-
我无法将我的食谱上传到公共超市,我也不想自己设置一本
我可以想出以下解决方案:
-
我将
VERSION 文件保存在 git 存储库中 - 问题:我需要让我的 CI 服务器推送到容易出错的存储库中 -
我在 CI 服务器上创建了一个
metadata.json 并将其推送到我的存储库中 - 问题:再次 - 容易出错 -
无论我是否"需要"它,我都会将每本食谱(每次提交)的每个版本上传到 Chef 服务器 - 问题:Chef 服务器可能会被食谱淹没,或者我必须远离"基于主干的"" 开发和使用功能分支,我必须再次处理食谱的上传顺序。
是否有任何推荐的工作流程来处理这个问题?什么是管理说明书版本和依赖项的"Berkshelf 方式"。
任何帮助将不胜感激 - 非常感谢!
您将需要某种"已发布"食谱的工件存储库,其中已经包含了元数据。这通常是一个 Chef Server 组织,它只用于保存食谱,然后是一个指向该位置的 berks-api 服务。不过,这仍然会让您无法使用预发布版本。
就我个人而言,我只是手动整理我的