0

我们真正想要的是部署 LWRP 能够将分支指定到 GIT。理想情况下,这是从环境属性中提取的。

我们这样称呼它:

my_deploy 'install my-client-portal' do
       repo 'https://hqdevgit01.my.lan/sites/my-client-portal.git'
       destination '/var/sites/my-client-portal'
 action :installNodeFromGit
        branch node[:my_deploy][:branch_name]
end

上面的分支不起作用..

LWRP 资源

actions :installNodeFromGit

default_action :installNodeFromGit if defined?(default_action)

attribute :repo, :kind_of => String, :required => true
attribute :destination, :kind_of => String, :required => true
attribute :branch, :kind_of => String, :required => false, :default => 'master'

LWRP 供应商

use_inline_resources

action :installNodeFromGit do

    converge_by("Installing.") do
      resp = install
      @new_resource.updated_by_last_action(resp)  
    end

end

def load_current_resource

  @current_resource = Chef::Resource::MyDeploy.new(@new_resource.name)
  @current_resource.repo(@new_resource.repo)
  @current_resource.destination(@new_resource.destination)
  @current_resource.branch(@new_resource.branch)

end

def install
    ENV['GIT_SSL_NO_VERIFY']="true"

    directory new_resource.destination do
        owner 'root'
        group 'root'
        mode '0755'
         action :create
       recursive true
    end

    git new_resource.destination do
         repository new_resource.repo
         action :sync
         revision new_resource.branch
    end

    if new_resource.destination
       path = new_resource.destination
      cmd  = "npm install"
   execute "npm install at #{path}" do
              cwd path
                  command cmd
         end
    end
end
4

1 回答 1

0

这里的问题是您正在使用 LWRP(您必须已经在您的 Chef 环境中可用),然后希望将其作为一个或多个其他 GIT 分支(可能未在 Chef 环境中加载)运行。

如果您正确设置分支,则可以将每个分支包含为不同的说明书(有关指定分支的详细信息,请参阅 Berkshelf 或 Librarian 的文档。)例如,您可能有这样的 berkshelf 行:

cookbook "mycookbook", git: "https://github.com/my_git/mycookbook.git", branch: "master"
cookbook "mycookbook_branch1", git: "https://github.com/my_git/mycookbook.git", branch: "branch1"
# etc

我认为分支食谱必须在内部具有这些唯一名称(例如“mycookbook_branch1”)。这很混乱,但是如果您在 Chef 环境中使每个分支都可以访问,那么您可能有机会选择所需的(分支)资源。

显然我不知道细节,但从表面上看,在主分支中创建每个可能的资源(具有不同的名称)并在你的配方中选择正确的资源似乎更简单。 如果这变得真的不干,你总是可以提取一个模块,等等。

于 2015-08-28T19:09:24.323 回答