Chef infra 如何覆盖八达通部署';s超市厨师烹饪手册';s触手安装位置路径?

Chef infra 如何覆盖八达通部署';s超市厨师烹饪手册';s触手安装位置路径?,chef-infra,chef-recipe,cookbook,octopus-deploy,berkshelf,Chef Infra,Chef Recipe,Cookbook,Octopus Deploy,Berkshelf,我的当前设置: 我正在制作一本食谱,将章鱼触手安装到我公司的标准虚拟机上。我创建了一本新的本地食谱,名为“octopus-deploy-mk6”。“mk6”是我们公司的名称,我用这个配方来定义我公司特定的安装要求。我在超市社区食谱中添加了一个名为“octopus deploy”的Berkshelf依赖项。以下是“八达通部署”的链接: 我通过chef repo/metadata.rb文件中的Berkshelf Dependen语句将超市食谱包括在内: 我把它放在chef repo/cookbo

我的当前设置:

我正在制作一本食谱,将章鱼触手安装到我公司的标准虚拟机上。我创建了一本新的本地食谱,名为“octopus-deploy-mk6”。“mk6”是我们公司的名称,我用这个配方来定义我公司特定的安装要求。我在超市社区食谱中添加了一个名为“octopus deploy”的Berkshelf依赖项。以下是“八达通部署”的链接:

我通过chef repo/metadata.rb文件中的Berkshelf Dependen语句将超市食谱包括在内:

我把它放在chef repo/cookbooks/octopus-deploy-mk6/recipes/default.rb文件的菜谱中(注意,我发现示例中的校验和不需要):

当我执行“berks安装”、“berks更新”和“刀子烹饪书上传octopus-deploy-mk6”命令时,它很好地安装了octopus deploy触手。这个食谱实际上超出了我的预期。感谢布伦特·蒙塔古(如果你碰巧读到这篇文章的话)创作了这本食谱

请随时让我知道,如果我没有做这个设置正确,我是非常新的厨师

问题是:

我们安装Octopus Deploy Tentach的公司标准是将其安装在“C:\Program Files(x86)\Octopus\Tentach”中,超市食谱将其安装在“C:\Program Files\Octopus Deploy\Tentach”中。虽然我个人更喜欢超市菜谱选择的目录名,但公司标准是将其放入x86目录和Octopus子目录,我不能更改标准如何覆盖默认的触手安装位置?

解决这个问题的简单方法是使用“复制粘贴重用”,简单地将整个社区的食谱复制到我的octopus-deploy-mk6食谱中,只需更改下面提到的一个文件。然而,我宁愿不这样做,这样我就可以在将来对超市版本进行更新

以下是我到目前为止调试的内容:

我注意到超市社区食谱在octopus deploy/libraries/tentacle.rb文件中有以下代码:

在安装操作之前,我已尝试在chef repo/cookbooks/octopus-deploy-mk6/recipes/default.rb文件中设置:


    OctopusDeploy.Tentacle.tentacle_install_location = 'C:\Program Files (x86)\Octopus\Tentacle'
但这并不能解决问题。我还尝试向chef repo/cookbooks/octopus-deploy-mk6/attributes/default.rb文件添加一个属性,但没有成功。据我所知,这种属性文件方法只适用于覆盖其他cookbook设置的属性(而不是覆盖ruby方法/属性)

在此方面的任何帮助都将不胜感激。我是Chef的新手,在Stackoverflow或Google上找不到任何其他帖子来回答这个问题(我可能对Chef和Ruby来说太新了,不知道搜索的术语)。

所以简短的回答是:“你不能”


为了更详细地解释,我们必须看看helper方法是如何被使用的。您可以使用monkey patch覆盖该帮助程序,语法可能与您现有的不同,但无论如何都没有帮助,所以让我们继续。该方法在中似乎只使用了两次,两次都是为某些PowerShell代码片段设置
cwd
。该路径从未传递给安装程序,从我可以看出,它一定是实际创建目录的内容。安装本身可能会发生。要更改实际安装目标,您需要将其放入该资源中的MSI安装选项中。我不知道Octopus的具体部署,但我猜您可以查找所需的msiexec标志来实现这一点。不幸的是,由于这段代码是如何编写的,您必须翻开食谱才能对其进行修改。我建议使用资源属性,然后将其作为补丁提交回原始食谱。

谢谢coderanger。我会用叉子叉出食谱,然后提交一个请求。

    octopus_deploy_tentacle 'Tentacle' do
      action :install
      version '3.1.5'
    end

  module OctopusDeploy
  # A container to hold the tentacle values instead of attributes
  module Tentacle
  ...
    def tentacle_install_location
      'C:\Program Files\Octopus Deploy\Tentacle'
    end

    OctopusDeploy.Tentacle.tentacle_install_location = 'C:\Program Files (x86)\Octopus\Tentacle'