我们真正想要的是部署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
答案 0 :(得分: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环境中使每个分支都可访问,那么你可能有一个争取选择所需(分支)资源的机会。
显然我不知道细节,但从表面上看,在主分支中创建每个可能的资源(具有不同的名称)并在食谱中选择正确的资源似乎更简单。 如果真的变得非干,你可以随时提取模块等。