I have been trying to wrap my head around how to utilise BitBucket's Pipelines to auto-deploy my (Laravel) application onto a Vultr Server instance.
I have the following steps I do manually, which I am trying to replicate autonomously:
commit
my changes and push
to BitBucket repossh root@ipaddress
cd
to the correct directory: cd /var/www/html/app/
pull
from my BitBucket repo: git pull origin master
composer install
, php artisan migrate
etc..exit
My understanding is that you can use Pipelines to automatise this, is this true?
So far, I have set up a SSH key pair for pipelines and my server, so my server's authorized_keys
file contains the public key from BitBucket Pipelines.
My pipelines file bitbucket-pipelines.yml
is as follows:
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.'
When the pipeline executes, I get the error: bash: cd: /var/www/html/app/: No such file or directory
.
I read that each script step is run in it's own container.
Each step in your pipeline will start a separate Docker container to run the commands configured in the script
The error I get makes sense if it's not executing cd /var/www/html/app
within the VPS after logging into it using SSH.
Could someone guide me into the correct direction?
Thanks
Bitbucket Pipelines is an integrated CI/CD service built into Bitbucket. It allows you to automatically build, test, and even deploy your code based on a configuration file in your repository.
The commands you are defining under script
are going to be run into a Docker container and not on your VPS.
Instead, put all your commands in a bash file on your server.
1 - Create a bash file pull.sh
on your VPS, to do all your deployment tasks
#/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 - Create a script deploy.sh
in your repository, like so
echo "Deploy script started" cd /var/www/html sh pull.sh echo "Deploy script finished execution"
3 - Finally update your bitbucket-pipelines.yml
file
image: atlassian/default-image:latest pipelines: default: - step: deployment: staging script: - cat ./deploy.sh | ssh <user>@<host> - echo "Deploy step finished"
I would recommend to already have your repo cloned on your VPS in /var/www/html
and test your pull.sh
file manually first.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With