我正在将持续集成实施到我的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持续集成工作流带来什么好处,我将不胜感激。
答案 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才能进行部署。