首頁 > 後端開發 > php教程 > 如何將Laravel Envoy或Deployer與SmaphoreCi一起使用?

如何將Laravel Envoy或Deployer與SmaphoreCi一起使用?

尊渡假赌尊渡假赌尊渡假赌
發布: 2025-02-10 15:08:30
原創
242 人瀏覽過

如何將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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板