通过持续交付使用GitLab CI部署Laravel应用程序时,是否需要Laravel Envoy?

时间:2017-10-27 17:07:02

标签: linux laravel continuous-integration gitlab laravel-envoy

我正在将持续集成实施到我的Laravel工作流程中,在完成基本操作时,我遇到了Gitlab上的示例项目,其中(1.)Laravel Envoys用于编写与应用程序应如何部署相关的任务,然后( 2.)使用Gitlab CI引导过程。

我有点困惑,在我看来,在.gitlab-ci.yml文件中定义作业时,使用Enovy定义任务的部分(波纹管)很容易复制,这使得Envoy的使用变得多余: / p>

 ...

    @setup
        $repository = 'git@gitlab.example.com:<USERNAME>/laravel-sample.git';
        $releases_dir = '/var/www/app/releases';
        $app_dir = '/var/www/app';
        $release = date('YmdHis');
        $new_release_dir = $releases_dir .'/'. $release;
    @endsetup

    ...

    @task('update_symlinks')
        echo "Linking storage directory"
        rm -rf {{ $new_release_dir }}/storage
        ln -nfs {{ $app_dir }}/storage {{ $new_release_dir }}/storage

        echo 'Linking .env file'
        ln -nfs {{ $app_dir }}/.env {{ $new_release_dir }}/.env

        echo 'Linking current release'
        ln -nfs {{ $new_release_dir }} {{ $app_dir }}/current
    @endtask

   ...

如果有人能够纠正我,如果我错了,或者解释Envoy可以为Gitlab持续集成工作流带来什么好处,我将不胜感激。

1 个答案:

答案 0 :(得分:5)

您是正确的,可以在.gitlab-ci.yml文件或Envoy.blade.php文件中轻松实现示例shell脚本(因此&#39; no&#39;,gitlab不需要Envoy- laivel应用程序的ci部署。)我看到用户可能选择通过gitlab在Envoy中部署部署任务的三个主要原因:

熟悉

Laravel开发人员可能更熟悉Envoy用于部署的语言(PHP和Blade语法),而不是gitlab使用的语言(使用gitlab和管道语法进行Yaml格式化)。

简化不太熟悉的.gitlab-ci.yml文件并将大部分复杂性添加到更熟悉的Envoy文件中可能会节省开发人员的时间。

可移植性

某些开发人员可能希望在CI平台之间切换选项。通过保持gitlab-ci文件简单并在Envoy文件中具有大量部署逻辑,开发人员可以切换到另一个CI服务器,如Jenkins,而无需重写部署代码。 (或者,正如我所见,开发人员可能正在使用gitlab-ci和Jenkins来构建他们的软件。使用Envoy意味着两个CI平台之间的共享代码更多。)

现有堆栈

Envoy Task Runner使用Laravel部署(PHP和Composer)已经需要的软件。另一方面,Gitlab需要在机器上安装gitlab-runner才能进行部署。