nginx负载均衡 多服务器代码同步更新(envoy)

场景

  • nginx搭了负载均衡, 需要保证保证各台机器同步更新代码

参考文档

小贴士

  • envoy多servers避免输入密码

解决(envoy)

  • Envoy样例 如果传入了commit参数,则提交本地代码,然后更新另外一台server的code

全局安装

composer global require laravel/envoy

Make sure to place the ~/.composer/vendor/bin directory in your PATH so the envoy executable is found when running the envoy command in your terminal.

需要~/.composer/vendor/bin放到PATH中, 这样才可以在终端找到envoy命令 但是也有可能不在这里, 全局安装的时候,会有提示, 我的就是.config/composer/vendor/bin/

echo 'export PATH="$PATH:$HOME/.config/composer/vendor/bin/"' >> ~/.bashrc
source ~/.bashrc

Write Tasks

所有命令定义在项目的根目录的Envoy.blade.php中
Envoy样例

@servers

定义在文件第一行,里面定义可以连接的servers,
如果想要在当前server上跑命令,可以指定server ip是127.0.0.1 eg:@servers(['localhost' => '127.0.0.1'])

@task

on属性指定执行命令的server,
@task内部是在remote server上执行的bash code

Variables

envoy run deploy --commit=‘测试’ 命令行可以传递参数到Envoy
配合@if @else @endif 指令可实现组合功能, eg:如果没有传递commit参数 则提示传递 &&不上传, 否则执行其他命令

@story

将一些小task集合到一个组合中, 方便统一调用
Multiple Servers

Envoy allows you to easily run a task across multiple servers. First, add additional servers to your @servers declaration. Each server should be assigned a unique name. Once you have defined your additional servers, list each of the servers in the task’s on array:
和单个类似,只是多定义了一些而已, 但是可以实现在多台机器上的操作

Parallel Execution

Envoy默认是执行完一台server,再去执行另外一台, 但是parallel选项允许几台机器同时执行

Running Tasks
envoy run $task/$story 如果输入选项的话 --option

Envoy样例

@servers(['web1' => '127.0.0.1', 'web2' => ['carsonlius@YOUR IP'])

@story('deploy')
    @if($commit)
        push_web1
        pull_web2
    @else
        intro
    @endif
@endstory

@task('intro')
    echo 'Please input commit!';
@endtask

@task('pull_web2', ['on' => [ 'web2'], 'parallel' => true])
    cd laravel_learn
    git pull origin master
@endtask

@task('push_web1',  ['on' => [ 'web1'], 'parallel' => true])
    git add .
    git commit -m 'modify: {{ $commit }}'
    git push
    echo 'well done!'
@endtask

猜你喜欢

转载自blog.csdn.net/cominglately/article/details/86085808