BitBucketのパイプラインを使用して(Laravel)アプリケーションをVultrサーバーインスタンスに自動デプロイする方法に頭を悩ませています。
手動で行う次の手順があります。これは自律的に複製しようとしています。
commit
自分の変更とBitBucketリポジトリへのPush
ssh root@ipaddress
cd
:cd /var/www/html/app/
pull
:git pull Origin master
composer install
、php artisan migrate
など。exit
私の理解では、パイプラインを使用してこれを自動化できますが、これは本当ですか?
これまでのところ、パイプラインとサーバーにSSHキーペアを設定しているため、サーバーのauthorized_keys
ファイルには、BitBucketパイプラインからの公開キーが含まれています。
私のパイプラインファイル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コンテナーを開始します
SSHを使用してVPSにログインした後、VPS内でcd /var/www/html/app
を実行していない場合、このエラーは理にかなっています。
誰かが正しい方向に案内してくれませんか?
ありがとう
script
で定義するコマンドは、VPSではなくDockerコンテナーで実行されます。
代わりに、すべてのコマンドをサーバーの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"
/var/www/html
をテストしてpull.sh
ファイルを最初に手動で。
ソリューションとしてマークされた回答の問題は、内部のコマンドのいずれかが失敗した場合、SHプロセスが終了しないことです。
このコマンドphp artisan route:cache
たとえば、簡単に失敗する可能性があります。プルは言うまでもありません!
さらに悪いことに、SHスクリプトは、失敗しても残りのコマンドを停止せずに実行します。
毎回、CIプロセスが停止し、それらのコマンドがCIプロセスを終了しないようにする方法を理解できないため、どのdockerコマンドも使用できません。 SHを使用していますが、前のコマンドの終了コードに基づいていくつかの条件を追加します。これにより、デプロイ中に問題が発生したかどうかがわかります。