场景
- nginx搭了负载均衡, 需要保证保证各台机器同步更新代码
参考文档
- laravel envoy官方文档
小贴士
- envoy多servers避免输入密码
- ssh-copy-id user@machine 本地主机的公钥复制到远程的authorized_keys上, 并且赋予设当的权限
解决(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 ~/.bashrcWrite 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 codeVariables
envoy run deploy --commit=‘测试’ 命令行可以传递参数到Envoy
配合@if @else @endif 指令可实现组合功能, eg:如果没有传递commit参数 则提示传递 &&不上传, 否则执行其他命令@story
将一些小task集合到一个组合中, 方便统一调用
Multiple ServersEnvoy 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