1

当我shell:clean最后打电话时,似乎在任务完成~/tmp/<domain>之前删除了目录。shell:sync我在目标中缺少文件~/www/versions/<domain>

shell:sync任务执行命令将rsync文件从复制~/tmp~/www.

grunt.registerTask('deploy', 'Deploy web app', function(){
    grunt.task.run('shell:create_temp');

    //create version directories
    grunt.task.run('shell:create_version');
    grunt.task.run('shell:sync');

    //create symlink to live site
    grunt.task.run('shell:symlink');
    grunt.task.run('shell:clean');
});

这是配置:

grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        cfg: _.extend(grunt.file.readJSON('config.json'), grunt.file.readJSON('config.'+env+'.json'), { env: env }),
        version_path: '<%= cfg.www_dir %>/versions/<%= cfg.domain %>@<%= pkg.version %>',
        tmp_site_path: '<%= cfg.tmp_dir %>/<%= cfg.domain %>',
        live_path: '<%= cfg.www_dir %>/<%= cfg.domain %>',
        shell: {
            create_temp: {
                command: 'mkdir -p <%= tmp_site_path %>',
                options: {
                    stdout: true,
                    stderr: true
                }
            },
            create_version: {
                command: 'mkdir -p <%= version_path %>',
                options: {
                    stdout: true,
                    stderr: true
                }
            },
            sync: {
                command: 'rsync -avz --delete --progress <%= tmp_site_path %>/ <%= version_path %>/',
                options: {
                    stdout: true,
                    stderr: true
                }
            },
            symlink: {
                command: 'rm <%= live_path %>; ln -sv <%= version_path %> <%= live_path %>',
                options: {
                    stdout: true,
                    stderr: true
                }
            },
            clean: {
                command: 'rm -rf <%= tmp_site_path %>',
                options: {
                    stdout: true,
                    stderr: true
                }
            }
        }
    });
4

2 回答 2

2

通常任务是同步运行的。但是插件可以绕过这一点——这也可能是插件中的一个错误。

但请注意,您通常会以这种方式组合任务:

grunt.registerTask("deploy", [
    'shell:create_temp',
    'shell:create_version',
    'shell:sync',
    'shell:symlink',
    'shell:clean'
]);
于 2013-11-07T22:07:43.900 回答
0

您可能想查看grunt-bg-shell。它允许您在任务完成运行时指定回调。

bgShell: {
  sync: {
    cmd: 'rsync -avz --delete --progress <%= tmp_site_path %>/ <%= version_path %>/',
    done: function () {
      grunt.task.run('shell:clean');
    }
  }
}
于 2013-11-07T23:35:34.093 回答