Статьи

Как я могу использовать Laravel Envoy или Deployer с SemaphoreCI?

Эта статья была рецензирована Верном Анчетой и Виражем Хатавкаром . Спасибо всем рецензентам SitePoint за то, что сделали контент SitePoint как можно лучше!


Автоматизация тестирования, непрерывная интеграция и непрерывная доставка в настоящее время довольно широко распространены в сообществе. Это привело к появлению множества сервисов, пытающихся сделать процесс более приятным и менее сложным для разработчиков, поэтому они могут сосредоточиться на поставке программного обеспечения, а не на создании / настройке инструментов для этого. Одним из таких сервисов является SemaphoreCI .

В этой статье мы рассмотрим, как использовать собственные сценарии и инструменты развертывания, чтобы продолжить процесс развертывания после успешного тестирования.

Мы будем использовать SemaphoreCI для непрерывной доставки и Deployer для отправки нашего кода на производственный сервер DigitalOcean. Если вы не знакомы с Deployer, рекомендуем вам ознакомиться с этим введением .

Сочетание логотипов SemaphoreCI и Deployer

Демо-приложение

Мы будем использовать 500-пиксельное приложение, которое загружает фотографии с рынка. Он был построен с использованием Laravel, и вы можете прочитать полную статью о его процессе сборки здесь и найти репозиторий на GitHub .

Создание сценария развертывания

Мы используем Deployer, определяя серверы, а затем создавая задачи, которые обрабатывают процесс развертывания приложения на этих серверах. Наш скрипт deploy.php выглядит так:

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

Вам следует прочитать статью Deployer, если вы хотите узнать больше о том, что делает этот конкретный скрипт. Наш следующий шаг — настроить проект SemaphoreCI. Пожалуйста, прочитайте статью об ускоренном курсе, если вы никогда не пробовали SemaphoreCI раньше, и делайте это.

Настройка развертывания

Чтобы настроить стратегию развертывания, нам нужно перейти на страницу проекта и нажать « Set Up Deployment .

Страница проекта

Далее мы выбираем универсальную опцию развертывания, так что SemaphoreCI дает нам свободу добавлять ручную настройку.

Общее развертывание

Стратегия развертывания

После выбора автоматического развертывания SemaphoreCI даст нам возможность задавать команды развертывания. Разница между ручным и автоматическим заключается в том, что автоматическое развертывание запускается после каждого успешного теста, а ручное развертывание позволяет нам развертывать любой успешный коммит.

Команды развертывания

Мы можем включить файл deployer.phar в наше хранилище в виде файла PHAR или потребовать его с помощью Composer. В любом случае, команды будут похожи.

Если мы решили развернуть приложение с использованием SSH, SemaphoreCI дает нам возможность хранить наш закрытый ключ SSH на своих серверах и сделать его доступным на этапе развертывания.

Ключ развертывания

Примечание . SemaphoreCI рекомендует создать новый ключ SSH специально для процесса развертывания. В случае, если кто-то украл наши ключи или что-то еще, мы можем легко отозвать его. Ключ также будет зашифрован перед сохранением его на своем конце.

Ключ будет доступен в ~/.ssh/id_rsa , поэтому identityFile() можно оставить по умолчанию.

Нажмите, чтобы развернуть

Теперь, когда все настроено, нам нужно зафиксировать некоторые изменения в репозитории, чтобы запустить процесс интеграции и развертывания.

 // Edit something git add . git commit -am "Updated deploy" git push origin master 

Успешное развертывание

Если что-то пошло не так, мы можем щелкнуть по неудачному процессу развертывания и просмотреть журналы для дальнейшего изучения проблемы.

Ошибка развертывания

Приведенный выше снимок экрана является неудачной фиксацией из-за того, что команда php artisan clear-compiled возвращает ошибку, так как расширение mcrypt не было включено.

Примечание . Еще одна полезная уловка, которую предоставляет SemaphoreCI, — это SSHing к серверу сборки, чтобы увидеть, что пошло не так.

Сервер сборки SSH

Другие инструменты развертывания

Тот же процесс, который мы использовали здесь, может быть применен к любому другому инструменту развертывания. Например, Laravel Envoy может быть настроен так:

 @servers(['web' => 'root@ip-address']) @task('deploy', ['on' => 'web']) cd /var/www @if($new) {{-- If this is the first deployment --}} git init git remote add origin repo@github.git @endif git reset --hard git pull origin master composer update composer dumpautoload -o @if($new) chmod -R 755 storage php artisan storage:link php artisan key:generate @endif php artisan migrate --force php artisan config:clear php artisan route:clear php artisan optimize php artisan config:cache php artisan route:cache php artisan view:clear @endtask 

И на этапе команды развертывания мы установим и запустим Envoy:

 cd /var/www composer global require "laravel/envoy=~1.0" envoy run deploy 

Это оно! Envoy теперь аутентифицируется с помощью ключа, который мы добавили, и запускает указанную нами команду обновления.

Вывод

Инструменты CI / CD значительно улучшают рабочий процесс разработчика и, безусловно, помогают командам интегрировать новый код в производственные системы. SemaphoreCI — отличный выбор, который я рекомендую за его простой в использовании интерфейс и прекрасную поддержку. Если у вас есть какие-либо комментарии или вопросы, пожалуйста, оставьте их ниже!