laiyuquan

博客

Laravel-Envoy--远程任务方法

laravel-Envoy :defining common tasks you run on your remote servers;

理解定义:用简单、清晰的命令,进行远程命令的部署;

应用场景:本篇主要是介绍 Envoy 实现 用本地脚本,实现代码部署到远程服务器;


下载与安装

composer global require laravel/envoy

 

这里用的是 composer 全局安装,因为怕起冲突;composer全局安装默认在 composer文件下;

思考:为什么是全局安装呢?说明Envoy并不是智能作用在laravel框架的

Github对Envoy的定义: Elegant SSH tasks for PHP。

 

Envoy.blade.php

项目根目录下 创建:Envoy.blade.php:

@servers(['web' => '192.168.1.1']) 

@setup
   $repository = 'git@gitlab.com:laiyuquan/laravel-envoy.git';

   $base_dir = '/var/www';

   $dir = '/var/www/laravel-envoy';

@endsetup

@story('deploy')       
   git       
   composer 
@endstory 

@task('git') 

if [ ! -d {{$dir}} ]

    then

        cd {{ $base_dir  }}

        git clone {{$repository}}

        echo '初始化clone成功';

    else

        cd {{ $dir }}

        git pull

        echo 'pull 完成!'
fi
@task('composer')  

   cd {{ $dir }}       

   composer install 

@endtask

语法风格,跟laravel的blade模板引擎 非常的类似;

@servers 'user@192.168.1.1'

登录远程服务器的user 和 具体的IP;如果你已经配置了ssh key 登录,执行命令时

就不会提示输入密码

@task  @endtask

执行命令的标签,将具体执行命令写入其中,名称可以自定义;

@story   @endstory
执行多个 task 命令的集合
具体执行命令:
 envoy run deploy

如果你安装envoy 没有配置全局的系统环境变量,~/.composer/vendor/bin/envoy  进行执行

 

PS:也可以部署多台服务器, 类似这样

@servers(['web-1' => '192.168.1.1', 'web-2' => '192.168.1.2'])

@task('deploy', ['on' => ['web-1', 'web-2']])

over!

其实很好理解,就是在本地 用 Envoy 写远程服务执行的代码,然后本地脚本执行!

 

思考:

这样部署其实已经蛮方便了,但有没有不需要  一边需要提交git远程仓库,一边又要本地 执行发布脚本;

能不能在本地代码 commit 或者 push 时  就直接 将代码从 gitlab 部署到 正式线上服务器?

答案就是 Gitlab CI/CD 持续集成

 

下一篇: 我们就来讲 Gitlab CI/CD 持续集成!

 

点赞

发表评论