Как получить папку из git, используя рецепт шеф-повара

Я пытаюсь настроить непрерывную интеграцию с Git, Chef на aws-opworks.

Чтобы проверить определенную папку в git, скажите от node до "node_path". Я могу использовать тег destination: для каталога назначения, но я не могу найти, как указать исходный каталог в git.

node_path = "/my/home/MyPrj/node"
git node_path do
    repository "https://something.com/MyCo/MyPrj.git"
    reference "prod"
    action :sync
    destination : node_path
end

Здесь папка назначения node является символической ссылкой. Я могу git проверить папку, идентифицировать измененные фрагменты кода, а затем скопировать новые файлы. Но я хочу, чтобы это делал action :sync автоматически - как это сделать?

Ссылки, которые я использовал:


person user 923227    schedule 01.06.2016    source источник
comment
Вы говорите, что хотите проверить каталог, отличный от корня проекта? Можете ли вы показать нам, как бы вы сделали это с самим git, не нарушая каталог .git?   -  person Martin    schedule 02.06.2016
comment
Я посмотрел здесь на переполнение стека и сделал это. [Возможно, ссылка была] (stackoverflow.com/questions/10124223/)   -  person user 923227    schedule 02.06.2016
comment
Ресурс Chef git этого не сделает. (Он даже не поддерживает выборку, не говоря уже о проверке подкаталога.) Вам нужно будет выполнить эти команды git, используя ресурс execute или bash_block.   -  person Karen B    schedule 02.06.2016
comment
Я получаю синтаксическую ошибку в месте назначения: node_path. Я думаю, что это ожидает строку, а не переменную. Кто-нибудь может помочь?   -  person shikha singh    schedule 10.12.2019


Ответы (2)


Вы должны использовать ресурс git и ресурс link:

git '/srv/MyPrj' do
  repository 'https://something.com/MyCo/MyPrj.git'
  branch 'prod'
end

link '/my/home/MyPrj/node' do
  to '/srv/MyPrj/node'
end
person coderanger    schedule 01.06.2016
comment
Это должно сработать! Но что происходит с установками npm в каталоге node — будут ли они удалены? - person user 923227; 02.06.2016
comment
Конвергенция завершится ошибкой, если /my/home/MyPrj/node уже существует, точно так же, как ln -s потерпит неудачу. - person coderanger; 02.06.2016

Если вы пытаетесь развернуть код из git, вам следует посмотреть ресурс развертывания, его синтаксис вот так:

deploy 'private_repo' do
  repo '[email protected]:acctname/private-repo.git'
  user 'ubuntu'
  deploy_to '/tmp/private_code'
end

Вот как я использую его для развертывания кода из моего репозитория.

include_recipe 'deploy'
application = search(:aws_opsworks_app).first
deploy = node[:deploy][application['shortname']]
directory deploy[:deploy_to] do
  group deploy[:group]
  owner deploy[:user]
  mode "0775"
  action :create
  recursive true
end
prepare_git_checkouts(
  user: deploy[:user],
  group: deploy[:group],
  home: deploy[:home],
  ssh_key: "#{application['app_source']['ssh_key']}"
)
ruby_block "change HOME to #{deploy[:home]} for source checkout" do
  block do
    ENV['HOME'] = deploy[:home]
  end
end
deploy application['shortname'] do
  before_migrate do
    link_tempfiles_to_current_release
    # Do NPM Install here.
  end
  branch                      application['app_source']['revision']
  create_dirs_before_symlink  deploy[:create_dirs_before_symlink]
  deploy_to                   deploy[:deploy_to] # defaults to 'name' if not specified
  environment                 OpsWorks::Escape.escape_double_quotes(application[:environment])
  group                       deploy[:group]
  keep_releases               deploy[:keep_releases]
  migrate                     false
  provider                    Chef::Provider::Deploy.const_get(deploy[:chef_provider])
  purge_before_symlink(deploy[:purge_before_symlink]) unless deploy[:purge_before_symlink].nil?
  repository                  application['app_source']['url']
  revision                    application['app_source']['revision']
  scm_provider                Chef::Provider::Git
  shallow_clone               deploy[:shallow_clone]
  symlinks(deploy[:symlinks]) unless deploy[:symlinks].nil?
  user                        deploy[:user]
  action                      deploy[:action] # defaults to :create if not specified
  rollback_on_error           true
end

ruby_block "change HOME back to /root after source checkout" do
  block do
    ENV['HOME'] = "/root"
  end
end

Здесь мы используем поваренную книгу развертывания, предоставленную Opsworks. поэтому prepare_git_checkouts исходит от Opsworks.

Сейчас,

  1. Установите этот рецепт для выполнения в событии жизненного цикла развертывания.
  2. каждый раз, когда что-то меняется в вашем репо. вы должны инициировать развертывание на opsworks, и все должно быть в порядке.

Надеюсь, поможет

person CuriousMind    schedule 05.06.2016