目录
钥匙要点
接下来,我们选择通用部署选项,因此SemaphoreCi使我们可以自由添加手动配置。
>如何通过CI/CD和Envoy和Envoy?
首页 后端开发 php教程 如何将Laravel Envoy或Deployer与SmaphoreCi一起使用?

如何将Laravel Envoy或Deployer与SmaphoreCi一起使用?

Feb 10, 2025 pm 03:08 PM

如何将Laravel Envoy或Deployer与SmaphoreCi一起使用?

钥匙要点

    SmaphoreCi是一种连续的集成和交付服务,可以与Laravel Envoy或Deployer结合使用,以在成功测试后自动化部署过程。 可以通过定义服务器和创建工作以处理部署过程的任务来设置> 通过对存储库进行更改来触发集成和部署过程。如果出现任何问题,Smaphoreci提供了查看日志并调查问题的能力。它还提供了SSH进入构建服务器的选项,以进一步故障排除。
  • >
  • 本文由Wern Ancheta和Viraj Khatavkar进行了同行评审。感谢SitePoint所有的同行评审员制作SitePoint内容的最佳状态!

测试自动化,持续集成和连续交付在社区中很普​​遍。这使多种服务试图使过程更加愉快,并且对于开发人员来说是压倒性的,因此他们可以专注于交付软件,而不是构建/配置工具来实现这一目标。这些服务之一是SmaphoreCi。 >在本文中,我们将介绍如何使用我们自己的部署脚本和工具在成功测试后继续部署过程。


>我们将使用Smaphoreci进行连续交付和Deployer将代码推向Digitalocean Production Server。如果您不熟悉Deployer,我们建议您查看此简介。

>

演示应用程序

我们将使用500px应用程序,该应用程序从市场上加载照片。它是使用Laravel构建的,您可以在此处阅读有关其建筑过程的完整文章,并在Github上找到仓库。如何将Laravel Envoy或Deployer与SmaphoreCi一起使用?

创建Deployer脚本

> Deployer的工作方式是定义服务器,然后创建处理将应用程序部署应用程序的任务。我们的deploy.php脚本看起来像这样:

>如果您想了解有关此特定脚本的功能的更多信息,则应阅读Deployer文章。我们的下一步是设置一个信号素项目。如果您以前从未尝试过Semaphoreci,请阅读《速成课程》文章,并这样做。

>设置部署

>要配置部署策略,我们需要转到项目页面,然后单击设置部署。>
<span><span><?php 
</span></span><span>
</span><span><span>require_once "recipe/common.php";
</span></span><span>
</span><span><span>set('ssh_type', 'native');
</span></span><span><span>set('default_stage', 'staging');
</span></span><span><span>env('deploy_path', '/var/www');
</span></span><span><span>env('composer_options', 'install --no-dev --prefer-dist --optimize-autoloader --no-progress --no-interaction');
</span></span><span><span>set('copy_dirs', [
</span></span><span>    <span>'app/commands',
</span></span><span>    <span>'app/config',
</span></span><span>    <span>'app/controllers',
</span></span><span>    <span>'app/database',
</span></span><span>    <span>'app/lang',
</span></span><span>    <span>'app/models',
</span></span><span>    <span>'app/src',
</span></span><span>    <span>'app/start',
</span></span><span>    <span>'app/tests',
</span></span><span>    <span>'app/views',
</span></span><span>    <span>'app/filters.php',
</span></span><span>    <span>'app/routes.php',
</span></span><span>    <span>'bootstrap',
</span></span><span>    <span>'public',
</span></span><span>    <span>'composer.json',
</span></span><span>    <span>'composer.lock',
</span></span><span>    <span>'artisan',
</span></span><span>    <span>'.env',
</span></span><span><span>]);
</span></span><span>
</span><span><span>set('shared_dirs', [
</span></span><span>    <span>'app/storage/cache',
</span></span><span>    <span>'app/storage/logs',
</span></span><span>    <span>'app/storage/meta',
</span></span><span>    <span>'app/storage/sessions',
</span></span><span>    <span>'app/storage/views',
</span></span><span><span>]);
</span></span><span><span>set('writable_dirs', get('shared_dirs'));
</span></span><span><span>set('http_user', 'www-data');
</span></span><span>
</span><span><span>server('digitalocean', '174.138.78.215')
</span></span><span>    <span>->identityFile()
</span></span><span>    <span>->user('root')
</span></span><span>    <span>->stage('staging');
</span></span><span>
</span><span><span>task('deploy:upload', function() {
</span></span><span>    <span>$files = get('copy_dirs');
</span></span><span>    <span>$releasePath = env('release_path');
</span></span><span>
</span><span>    <span>foreach ($files as $file)
</span></span><span>    <span>{
</span></span><span>        <span>upload($file, "<span><span>{$releasePath}</span>/<span>{$file}</span>"</span>);
</span></span><span>    <span>}
</span></span><span><span>});
</span></span><span>
</span><span><span>task('deploy:staging', [
</span></span><span>    <span>'deploy:prepare',
</span></span><span>    <span>'deploy:release',
</span></span><span>    <span>'deploy:upload',
</span></span><span>    <span>'deploy:shared',
</span></span><span>    <span>'deploy:writable',
</span></span><span>    <span>'deploy:symlink',
</span></span><span>    <span>'deploy:vendors',
</span></span><span>    <span>'current',// print current release number
</span></span><span><span>])->desc('Deploy application to staging.');
</span></span><span>
</span><span><span>after('deploy:staging', 'success');
</span></span>
登录后复制
登录后复制

接下来,我们选择通用部署选项,因此SemaphoreCi使我们可以自由添加手动配置。

如何将Laravel Envoy或Deployer与SmaphoreCi一起使用?

如何将Laravel Envoy或Deployer与SmaphoreCi一起使用?

选择自动部署后,SmaphoreCi将使我们能够指定部署命令。手动和自动之间的区别在于,在每次成功的测试后都会触发自动部署,而手动将使我们部署任何成功的提交。

>

如何将Laravel Envoy或Deployer与SmaphoreCi一起使用?

>我们可以选择将deverer.phar在我们的存储库中作为phar文件包含,也可以使用作曲家要求它。无论哪种方式,这些命令都会相似。

如果我们选择使用SSH部署该应用程序,SmaphoreCi使我们能够将我们的SSH专用密钥存储在其服务器上并在部署阶段提供。

如何将Laravel Envoy或Deployer与SmaphoreCi一起使用?

注意:Semaphoreci建议我们专门为部署过程创建一个新的SSH密钥。如果有人偷了我们的钥匙或其他东西,我们可以轻松撤销它。钥匙也将在将其存储在其末端之前进行加密。

>

键将在〜/.ssh/id_rsa下可用,因此可以将sidentityFile()放在默认值下。

>

推动部署

>现在一切都设置了,我们需要对存储库进行一些更改,以触发集成和部署过程。>

<span><span><?php 
</span></span><span>
</span><span><span>require_once "recipe/common.php";
</span></span><span>
</span><span><span>set('ssh_type', 'native');
</span></span><span><span>set('default_stage', 'staging');
</span></span><span><span>env('deploy_path', '/var/www');
</span></span><span><span>env('composer_options', 'install --no-dev --prefer-dist --optimize-autoloader --no-progress --no-interaction');
</span></span><span><span>set('copy_dirs', [
</span></span><span>    <span>'app/commands',
</span></span><span>    <span>'app/config',
</span></span><span>    <span>'app/controllers',
</span></span><span>    <span>'app/database',
</span></span><span>    <span>'app/lang',
</span></span><span>    <span>'app/models',
</span></span><span>    <span>'app/src',
</span></span><span>    <span>'app/start',
</span></span><span>    <span>'app/tests',
</span></span><span>    <span>'app/views',
</span></span><span>    <span>'app/filters.php',
</span></span><span>    <span>'app/routes.php',
</span></span><span>    <span>'bootstrap',
</span></span><span>    <span>'public',
</span></span><span>    <span>'composer.json',
</span></span><span>    <span>'composer.lock',
</span></span><span>    <span>'artisan',
</span></span><span>    <span>'.env',
</span></span><span><span>]);
</span></span><span>
</span><span><span>set('shared_dirs', [
</span></span><span>    <span>'app/storage/cache',
</span></span><span>    <span>'app/storage/logs',
</span></span><span>    <span>'app/storage/meta',
</span></span><span>    <span>'app/storage/sessions',
</span></span><span>    <span>'app/storage/views',
</span></span><span><span>]);
</span></span><span><span>set('writable_dirs', get('shared_dirs'));
</span></span><span><span>set('http_user', 'www-data');
</span></span><span>
</span><span><span>server('digitalocean', '174.138.78.215')
</span></span><span>    <span>->identityFile()
</span></span><span>    <span>->user('root')
</span></span><span>    <span>->stage('staging');
</span></span><span>
</span><span><span>task('deploy:upload', function() {
</span></span><span>    <span>$files = get('copy_dirs');
</span></span><span>    <span>$releasePath = env('release_path');
</span></span><span>
</span><span>    <span>foreach ($files as $file)
</span></span><span>    <span>{
</span></span><span>        <span>upload($file, "<span><span>{$releasePath}</span>/<span>{$file}</span>"</span>);
</span></span><span>    <span>}
</span></span><span><span>});
</span></span><span>
</span><span><span>task('deploy:staging', [
</span></span><span>    <span>'deploy:prepare',
</span></span><span>    <span>'deploy:release',
</span></span><span>    <span>'deploy:upload',
</span></span><span>    <span>'deploy:shared',
</span></span><span>    <span>'deploy:writable',
</span></span><span>    <span>'deploy:symlink',
</span></span><span>    <span>'deploy:vendors',
</span></span><span>    <span>'current',// print current release number
</span></span><span><span>])->desc('Deploy application to staging.');
</span></span><span>
</span><span><span>after('deploy:staging', 'success');
</span></span>
登录后复制
登录后复制

如何将Laravel Envoy或Deployer与SmaphoreCi一起使用?如果出现问题,我们可以单击失败的部署过程,然后查看日志以进一步调查问题。

>由于未启用了MCRypt扩展名,因此上述屏幕截图是失败的提交。 如何将Laravel Envoy或Deployer与SmaphoreCi一起使用?注意:SmaphoreCi提供的另一个整洁的技巧是向构建服务器sshing以查看出了什么问题。

>

其他部署工具

如何将Laravel Envoy或Deployer与SmaphoreCi一起使用?>我们此处使用的相同过程可以应用于任何其他部署工具。例如,Laravel Envoy可能是这样的配置:

在部署命令步骤中,我们将安装和运行Envoy:

就是这样! Envoy现在将使用我们添加的密钥进行身份验证,并运行我们指定的更新命令。

结论

CI/CD工具是开发人员的工作流程的一个很好的改进,当然可以帮助团队将新代码集成到生产系统中。 Semaphoreci是我推荐的绝佳选择,它易于使用界面及其出色的支持。如果您有任何评论或疑问,请在下面发布它们!

>

在Laravel Envoy,Deployer和Semaphoreci 上经常询问问题(常见问题解答)

>如何将Laravel Envoy与Smaphoreci集成以进行连续整合?首先,您需要在Semaphoreci上设置Laravel项目。之后,您需要使用作曲家在项目中安装Envoy。安装后,您可以在项目根目录中创建Envoy.blade.php文件。该文件将包含您要自动化的所有任务。然后,您可以在Smaphoreci管道中添加一个新命令来运行特使任务。该命令将看起来像这样:PHP供应商/bin/Envoy Run Deploy。 ,功能且非常适合Laravel等PHP应用。它为Laravel提供了开箱即用的支持,这意味着您不必编写自定义脚本来部署Laravel应用程序。 Deployer负责所有部署任务,例如从存储库中提取最新代码,运行作曲家安装,运行迁移和重新启动PHP-FPM。它还支持零下的部署,原子部署和并行部署,这可以大大缩短您的部署时间。

为CI/CD配置Laravel涉及设置您的测试环境,为应用程序编写测试,设置构建过程以及设置部署过程。您可以使用PHPUNIT进行测试,用于管理依赖的作曲家以及Laravel Envoy或Deployer之类的工具以自动化部署任务。您还需要选择一个CI/CD平台,例如Semaphoreci或Gitlab CI/CD,并配置它以运行测试,构建应用程序并部署应用程序。

>如何通过CI/CD和Envoy和Envoy?

使用CI/CD和Envoy部署Laravel应用程序,涉及设置包括部署阶段的CI/CD管道。在此阶段,您可以使用Envoy自动执行部署任务。您只需要在项目根目录中创建Envoy.blade.php文件,并在此文件中定义您的任务。然后,您可以在CI/CD管道中添加命令以运行特使任务。该命令将看起来像这样:PHP供应商/bin/Envoy Run部署。

>

> SemaphoreCi在Laravel部署中的作用是什么?

测试和部署Laravel应用程序的过程。您可以在Semaphoreci中设置管道来运行测试,构建应用程序并部署应用程序。 Semaphoreci支持包括PHP和Laravel在内的各种语言和框架,并且它与许多流行的工具(例如Laravel Envoy and Deployer)集成在一起。

>

>我如何使用Laravel Envoy进行部署? Laravel Envoy允许您在刀片语法中定义任务并将其运行在远程服务器上。要使用Envoy进行部署,您需要使用Composer将其安装在项目中。然后,您可以在项目根目录中创建Envoy.blade.php文件,并在此文件中定义部署任务。定义了任务后,您可以使用Envoy Run命令。

>如何将Deployer用于Laravel部署?

> exployer是PHP部署工具 - 支持Laravel。要使用Deployer进行Laravel部署,您需要使用Composer将其安装在项目中。然后,您可以在项目根目录中创建一个deploy.php文件,并在此文件中定义部署任务。定义任务后,您可以使用DEP部署命令进行运行。

> Laravel Envoy和Deployer之间有什么区别? Laravel Envoy和Deployer都是PHP部署工具,但它们都是PHP部署工具,但是它们是有一些差异。 Envoy使用刀片语法来定义任务,而Deployer使用PHP语法。特使更特定于Laravel,而Deployer为许多不同的框架提供了支持。特使更简单,更易于使用,但是部署者提供了更高级的功能,例如零 - 降低时间部署,原子部署和并行部署。

>我可以在同一项目中使用Laravel Envoy和Deployer吗?

是的,您可以在同一项目中同时使用Laravel Envoy和Deployer。但是,通常不必使用这两个工具,因为它们具有类似的目的。您可以选择最适合您需求的一种。如果您喜欢带有刀片语法的更简单的工具,则可以选择Envoy。如果您喜欢一个更高级的工具,并支持许多不同的框架,则可以选择Deployer。

以上是如何将Laravel Envoy或Deployer与SmaphoreCi一起使用?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1655
14
CakePHP 教程
1413
52
Laravel 教程
1306
25
PHP教程
1252
29
C# 教程
1226
24
在PHP API中说明JSON Web令牌(JWT)及其用例。 在PHP API中说明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

会话如何劫持工作,如何在PHP中减轻它? 会话如何劫持工作,如何在PHP中减轻它? Apr 06, 2025 am 12:02 AM

会话劫持可以通过以下步骤实现:1.获取会话ID,2.使用会话ID,3.保持会话活跃。在PHP中防范会话劫持的方法包括:1.使用session_regenerate_id()函数重新生成会话ID,2.通过数据库存储会话数据,3.确保所有会话数据通过HTTPS传输。

什么是REST API设计原理? 什么是REST API设计原理? Apr 04, 2025 am 12:01 AM

RESTAPI设计原则包括资源定义、URI设计、HTTP方法使用、状态码使用、版本控制和HATEOAS。1.资源应使用名词表示并保持层次结构。2.HTTP方法应符合其语义,如GET用于获取资源。3.状态码应正确使用,如404表示资源不存在。4.版本控制可通过URI或头部实现。5.HATEOAS通过响应中的链接引导客户端操作。

PHP中的匿名类是什么?您何时可以使用它们? PHP中的匿名类是什么?您何时可以使用它们? Apr 04, 2025 am 12:02 AM

匿名类在PHP中的主要作用是创建一次性使用的对象。1.匿名类允许在代码中直接定义没有名字的类,适用于临时需求。2.它们可以继承类或实现接口,增加灵活性。3.使用时需注意性能和代码可读性,避免重复定义相同的匿名类。

您如何在PHP中有效处理异常(尝试,捕捉,最后,投掷)? 您如何在PHP中有效处理异常(尝试,捕捉,最后,投掷)? Apr 05, 2025 am 12:03 AM

在PHP中,异常处理通过try,catch,finally,和throw关键字实现。1)try块包围可能抛出异常的代码;2)catch块处理异常;3)finally块确保代码始终执行;4)throw用于手动抛出异常。这些机制帮助提升代码的健壮性和可维护性。

说明PHP中的不同错误类型(注意,警告,致命错误,解析错误)。 说明PHP中的不同错误类型(注意,警告,致命错误,解析错误)。 Apr 08, 2025 am 12:03 AM

PHP中有四种主要错误类型:1.Notice:最轻微,不会中断程序,如访问未定义变量;2.Warning:比Notice严重,不会终止程序,如包含不存在文件;3.FatalError:最严重,会终止程序,如调用不存在函数;4.ParseError:语法错误,会阻止程序执行,如忘记添加结束标签。

包括,require,incement_once,require_once之间有什么区别? 包括,require,incement_once,require_once之间有什么区别? Apr 05, 2025 am 12:07 AM

在PHP中,include,require,include_once,require_once的区别在于:1)include产生警告并继续执行,2)require产生致命错误并停止执行,3)include_once和require_once防止重复包含。这些函数的选择取决于文件的重要性和是否需要防止重复包含,合理使用可以提高代码的可读性和可维护性。

PHP和Python:比较两种流行的编程语言 PHP和Python:比较两种流行的编程语言 Apr 14, 2025 am 12:13 AM

PHP和Python各有优势,选择依据项目需求。1.PHP适合web开发,尤其快速开发和维护网站。2.Python适用于数据科学、机器学习和人工智能,语法简洁,适合初学者。

See all articles