測試自動化,持續集成和連續交付在社區中很普遍。這使多種服務試圖使過程更加愉快,並且對於開發人員來說是壓倒性的,因此他們可以專注於交付軟件,而不是構建/配置工具來實現這一目標。這些服務之一是SmaphoreCi。 >在本文中,我們將介紹如何使用我們自己的部署腳本和工具在成功測試後繼續部署過程。
>
演示應用程序
我們將使用500px應用程序,該應用程序從市場上加載照片。它是使用Laravel構建的,您可以在此處閱讀有關其建築過程的完整文章,並在Github上找到倉庫。
創建Deployer腳本
>要配置部署策略,我們需要轉到項目頁面,然後單擊設置部署。
<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>
選擇自動部署後,SmaphoreCi將使我們能夠指定部署命令。手動和自動之間的區別在於,在每次成功的測試後都會觸發自動部署,而手動將使我們部署任何成功的提交。
>
>我們可以選擇將deverer.phar在我們的存儲庫中作為phar文件包含,也可以使用作曲家要求它。無論哪種方式,這些命令都會相似。
如果我們選擇使用SSH部署該應用程序,SmaphoreCi使我們能夠將我們的SSH專用密鑰存儲在其服務器上並在部署階段提供。
注意: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>
如果出現問題,我們可以單擊失敗的部署過程,然後查看日誌以進一步調查問題。
>由於未啟用了MCRypt擴展名,因此上述屏幕截圖是失敗的提交。 注意:SmaphoreCi提供的另一個整潔的技巧是向構建服務器sshing以查看出了什麼問題。
>其他部署工具
>我們此處使用的相同過程可以應用於任何其他部署工具。例如,Laravel Envoy可能是這樣的配置:
CI/CD工具是開發人員的工作流程的一個很好的改進,當然可以幫助團隊將新代碼集成到生產系統中。 Semaphoreci是我推薦的絕佳選擇,它易於使用界面及其出色的支持。如果您有任何評論或疑問,請在下面發布它們!
>為CI/CD配置Laravel涉及設置您的測試環境,為應用程序編寫測試,設置構建過程以及設置部署過程。您可以使用PHPUNIT進行測試,用於管理依賴的作曲家以及Laravel Envoy或Deployer之類的工具以自動化部署任務。您還需要選擇一個CI/CD平台,例如Semaphoreci或Gitlab CI/CD,並配置它以運行測試,構建應用程序並部署應用程序。
>
> SemaphoreCi在Laravel部署中的作用是什麼?測試和部署Laravel應用程序的過程。您可以在Semaphoreci中設置管道來運行測試,構建應用程序並部署應用程序。 Semaphoreci支持包括PHP和Laravel在內的各種語言和框架,並且它與許多流行的工具(例如Laravel Envoy and Deployer)集成在一起。
>>我可以在同一項目中使用Laravel Envoy和Deployer嗎?
是的,您可以在同一項目中同時使用Laravel Envoy和Deployer。但是,通常不必使用這兩個工具,因為它們具有類似的目的。您可以選擇最適合您需求的一種。如果您喜歡帶有刀片語法的更簡單的工具,則可以選擇Envoy。如果您喜歡一個更高級的工具,並支持許多不同的框架,則可以選擇Deployer。以上是如何將Laravel Envoy或Deployer與SmaphoreCi一起使用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!