跳转至

流水线 (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_dirsshared_files 配置参数中指定共享目录和文件. 该过程分为以下步骤:

  • 指定的目录如果不存在将这些目录从 release_path 复制到shared 中,
  • release_path中删除这些目录,
  • 软链接这些目录从sharedrelease_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一起运行此任务.

current 软链接切换到 release_path. 如果目标系统支持符号链接的原子切换, 它将被使用.

deploy:unlock

删除.dep/deploy.lock 文件. 您可以直接运行此任务来删除锁文件:

dep deploy:unlock staging

cleanup

根据 keep_releases 选项来清理旧版本. -1 被视为不清理.

success

打印成功消息.

Back to top