2012-07-12 37 views
2

我想了解如何以及何時運行before_symlink,特別是如果出現故障。以此塊爲例:廚師的deploy_revision/before_symlink何時運行?

deploy_revision "foo" do 
    action :deploy 
    deploy_to "/opt/foo" 
    ... 
    symlink_before_migrate(app_symlinks.merge({ 
    ...  })) 
    purge_before_symlink([]) 
    create_dirs_before_symlink([]) 
    symlinks({}) 
    before_symlink do 
    current_release = release_path 

    bash "foo_buildout_install" do 
     user "foo" 
     cwd current_release 
     code <<-EOH 
     ... 
     EOH 
    end 
    end 
    restart_command do 
    current_release = release_path 
    bash "foo_foreman_install_and_restart" do 
     restart foo || start foo 
     EOH 
    end 
    end 
end 

before_symlink塊在什麼條件下運行?例如,如果構建失敗,那麼廚師會重新調配 - 它會再次運行嗎?如果創建了符號鏈接,它會再次被調用嗎?

(我還在學習廚師,而我不這樣做Ruby開發,所以請不要以爲我瞭解deploy_revision是如何工作的,或軌道部署模型的東西)

回答

1

我相信它會每次「部署」時都會運行,我相信每次通過Chef提供時都會發生這種情況。

如果你想進一步研究自己,找到了廚師安裝在你的Ruby寶石路,看看裏面的./lib/chef/provider/deploy.rb

部署方法幾乎解釋了自己:

def deploy 
    enforce_ownership 
    verify_directories_exist 
    update_cached_repo 
    copy_cached_repo 
    install_gems 
    enforce_ownership 
    callback(:before_migrate, @new_resource.before_migrate) 
    migrate 
    callback(:before_symlink, @new_resource.before_symlink) 
    symlink 
    callback(:before_restart, @new_resource.before_restart) 
    restart 
    callback(:after_restart, @new_resource.after_restart) 
    cleanup! 
    Chef::Log.info "#{@new_resource} deployed to #{@new_resource.deploy_to}" 
    end 
+0

嗯,這很容易閱讀:)如果存儲庫代碼與已部署的代碼相同,是否沒有檢查某處以避免重新部署? – 2012-08-22 08:26:11

+0

看起來並不像它,copy_cached_repo方法會再次複製'cached-copy'目錄中的任何內容到發佈目錄,然後是上面的符號鏈接操作等。據推測,緩存副本的存在意味着不要再次從頭檢出回購,只是一個GIT拉或其他。 – Anentropic 2012-08-22 09:04:16