Использование конвейеров BitBucket для развертывания на VPS через SSH Access - PullRequest
0 голосов
/ 27 апреля 2018

Я пытался понять, как использовать конвейеры BitBucket для автоматического развертывания моего приложения (Laravel) на экземпляре Vultr Server.

У меня есть следующие шаги, которые я делаю вручную, которые я пытаюсь воспроизвести автономно:

  • Я commit мои изменения и push в репозиторий BitBucket
  • Я захожу на свой сервер, используя Терминал: ssh root@ipaddress
  • I cd в правильный каталог: cd /var/www/html/app/
  • Я тогда pull из моего репозитория BitBucket: git pull origin master
  • Затем я запускаю несколько команд: composer install, php artisan migrate и т. Д.
  • Затем я выхожу из системы: exit

Насколько я понимаю, вы можете использовать конвейеры для автоматизации этого процесса, это правда?

Пока что я настроил пару ключей SSH для конвейеров и моего сервера, поэтому файл authorized_keys моего сервера содержит открытый ключ от BitBucket Pipelines.

Файл моих конвейеров bitbucket-pipelines.yml выглядит следующим образом:

image: atlassian/default-image:latest

pipelines:
  default:
    - step:
        deployment: staging
        caches:
          - composer
        script:
          - ssh root@ipaddress
          - cd /var/www/html/app/
          - git pull origin master
          - php artisan down
          - composer install --no-dev --prefer-dist
          - php artisan cache:clear
          - php artisan config:cache
          - php artisan route:cache
          - php artisan migrate
          - php artisan up
          - echo 'Deploy finished.'

Когда конвейер выполняется, я получаю ошибку: bash: cd: /var/www/html/app/: No such file or directory.

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

Каждый шаг в вашем конвейере запускает отдельный контейнер Docker для запустить команды, настроенные в скрипте

Ошибка, которую я получаю, имеет смысл, если она не выполняет cd /var/www/html/app в VPS после входа в нее с использованием SSH.

Может ли кто-нибудь направить меня в правильном направлении?

Спасибо

1 Ответ

0 голосов
/ 02 мая 2018

Команды, которые вы определяете в script, будут выполняться в контейнере Docker, а не на вашем VPS.

Вместо этого поместите все свои команды в файл bash на вашем сервере.

1 - Создайте файл bash pull.sh на своем VPS, чтобы выполнить все задачи развертывания

#/var/www/html
php artisan down
git pull origin master
composer install --no-dev --prefer-dist
php artisan cache:clear
php artisan config:cache
php artisan route:cache
php artisan migrate
php artisan up
echo 'Deploy finished.'

2 - Создайте скрипт deploy.sh в вашем хранилище, например

echo "Deploy script started"
cd /var/www/html
sh pull.sh
echo "Deploy script finished execution"

3 - наконец обновите bitbucket-pipelines.yml файл

image: atlassian/default-image:latest

pipelines:
  default:
    - step:
        deployment: staging
        script:
          - cat ./deploy.sh | ssh <user>@<host>
          - echo "Deploy step finished"

Я бы порекомендовал клонировать репо на VPS в /var/www/html и сначала протестировать файл pull.sh вручную.

...