Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using BitBucket Pipelines to Deploy onto VPS via SSH Access

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:

  • I commit my changes and push to BitBucket repo
  • I log into my server using Terminal: ssh root@ipaddress
  • I cd to the correct directory: cd /var/www/html/app/
  • I then pull from my BitBucket repo: git pull origin master
  • I then run some commands: composer install, php artisan migrate etc..
  • I then log out: 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

like image 901
Stefan Dunn Avatar asked Apr 27 '18 00:04

Stefan Dunn


People also ask

Does bitbucket have CI CD pipeline?

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.


Video Answer


1 Answers

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.

like image 59
thomas.drbg Avatar answered Sep 17 '22 13:09

thomas.drbg