流水線 (Flow)
如果你的recipe是基于Deployer自帶的 common recipe 或框架recipe, 則使用的是一個默認的流水線.
每個流水線是在 deploy 命名空間內描述的一組其他任務.一個常見的部署流程如下所示:
task('deploy', [
'deploy:prepare',
'deploy:lock',
'deploy:release',
'deploy:update_code',
'deploy:shared',
'deploy:writable',
'deploy:vendors',
'deploy:clear_paths',
'deploy:symlink',
'deploy:unlock',
'cleanup',
'success'
]);
框架recipes可能在流程上有所不同, 但基本結構是相同的. 您可以通過重寫 deploy 任務來創建自己的流, 但更好的解決方案是使用緩存.
例如, 如果要在軟鏈接新版本之前運行某些任務:
before('deploy:symlink', 'deploy:build');
或者, 在成功部署后發送通知:
after('success', 'notify');
接下來快速了解一下每項任務.
deploy:prepare
準備部署. 檢查 deploy_path 是否存在, 否則創建它. 同時檢查是否存在以下路徑:
releases– 在這個目錄中, 將存儲版本.shared– 跨所有版本共享文件..dep– 部署程序使用的元數據.
deploy:lock
部署鎖, 只能運行一個并發部署. 此任務將檢查 .dep/deploy.lock 文件. 如果部署過程被Ctrl+C取消, 請運行 dep deploy:unlock 刪除此文件. 如果部署失敗, 則 deploy:unlock 任務將自動觸發.
deploy:release
基于 release_name 配置參數創建新的發布文件夾. 同時讀取 .dep/releases 以獲取以前創建的版本列表.
此外, 如果在 deploy_path 中有早期版本的符號鏈接, 則會將其刪除.
deploy:update_code
使用Git下載新版本的代碼. 如果您使用的是Git 2.0版并且 git_cache 配置已打開, 則此任務將使用以前版本中的文件, 因此只下載更改的文件.
在 deploy.php 中重寫此任務, 創建自己的代碼轉移策略:
task('deploy:update_code', function () {
upload('.', '{{release_path}}');
});
deploy:shared
從 shared 目錄創建共享文件和目錄到 release_path. 您可以在 shared_dirs 和 shared_files 配置參數中指定共享目錄和文件. 該過程分為以下步驟:
- 指定的目錄如果不存在將這些目錄從
release_path復制到shared中, - 從
release_path中刪除這些目錄, - 軟鏈接這些目錄從
shared到release_path.
共享文件也遵循同樣的步驟. 如果您的系統支持相對符號鏈接, 則將使用它們, 否則將使用絕對符號鏈接.
deploy:writable
設置 writable_dirs 參數中列出的目錄可寫. 默認情況下, 使用 acl 模式(使用setfacl命令)此任務將嘗試猜測http_user用戶名, 或者可以自己配置它:
set('http_user', 'www-data');
// Or only for specified host:
host(...)
->set('http_user', 'www-data');
此任務還支持其他可寫模式:
- chown
- chgrp
- chmod
- acl
要使用其中一個, 請添加以下內容:
set('writable_mode', 'chmod');
要將sudo與可寫設置一起使用, 請添加以下內容:
set('writable_use_sudo', true);
deploy:vendors
安裝 composer 依賴. 可以使用 composer_options 參數來配置composer選項.
deploy:clear_paths
刪除 clear_paths 中指定的目錄. 可以使用 clear_use_sudo 參數與sudo一起運行此任務.
deploy:symlink
將 current 軟鏈接切換到 release_path. 如果目標系統支持符號鏈接的原子切換, 它將被使用.
deploy:unlock
刪除.dep/deploy.lock 文件. 您可以直接運行此任務來刪除鎖文件:
dep deploy:unlock staging
cleanup
根據 keep_releases 選項來清理舊版本. -1 被視為不清理.
success
打印成功消息.