Laravel Envoy 是一套在远程服务器上执行日常任务的工具。使用了 Blade 风格语法,你可以轻松地配置部署任务、Artisan 命令的执行等。

具体文档:https://learnku.com/docs/laravel/9.x/envoy/12265

下面是一个示例(Envoy.blade.php):

@servers(['serv_dev' => 'root@123.123.123.123','serv_prod' => 'root@234.234.234.234'])

@story('deploy_dev',['on' => 'serv_dev'])
    git_dev
@endstory

@story('deploy_prod',['on' => 'serv_prod'])
    git_prod
@endstory

@task('get_composer')
    if [ ! -f 'composer.phar' ]; then
        echo 'Downloading composer.phar ...'
        curl -s https://mirrors.aliyun.com/composer/composer.phar -o composer.phar
    fi
@endtask

@task('chown_www')
    find ./ ! -name '.user.ini' -print0 | xargs -0 chown www:www
@endtask

@task('git_dev')
    cd /www/wwwroot/project_dev
    git checkout dev
    git pull origin dev
    @run('chown_www')
    @if($composer)
        @run('get_composer')
        su www -s /bin/bash -c '/www/server/php/81/bin/php composer.phar install'
    @endif
    su www -s /bin/bash -c '/www/server/php/81/bin/php artisan config:clear'
    su www -s /bin/bash -c '/www/server/php/81/bin/php artisan route:clear'
    su www -s /bin/bash -c '/www/server/php/81/bin/php artisan view:clear'
    @run('chown_www')
@endtask

@task('git_prod')
    cd /www/wwwroot/project_prod
    git checkout master
    git pull origin master
    @run('chown_www')
    @if($composer)
        @run('get_composer')
        su www -s /bin/bash -c '/www/server/php/81/bin/php composer.phar install --optimize-autoloader --no-dev'
    @endif
    su www -s /bin/bash -c '/www/server/php/81/bin/php artisan config:cache'
    su www -s /bin/bash -c '/www/server/php/81/bin/php artisan route:cache'
    su www -s /bin/bash -c '/www/server/php/81/bin/php artisan view:cache'
    @run('chown_www')
@endtask

注:在一个 @task 任务中,可以使用 @run 标签嵌套子任务,这个是文档里没有提到的。