What do I have wrong in my build script?
Asked by william_gay:

This is my first time working with pipelines or any other CD tool for that matter. Following the documentation, I built out the build script. It works fine. But when I add the deploy section, it will not run. If I edit inside Bitbucket, I get a notice that appears to be a formatting error. But, in that I don't know yaml and have never worked with a build script, I am lost. Can someone take a look at my script and help me understand what I have wrong?

image: php:7.4-fpm

pipelines:  
default:  
- step:  
name: Build and test  
caches:  
- composer  
script:  
- apt-get update \&\& apt-get install -qy git curl libmcrypt-dev mariadb-client ghostscript  
- yes \| pecl install mcrypt-1.0.3  
- docker-php-ext-install pdo_mysql bcmath exif  
- curl -sS <https://getcomposer.org/installer> \| php -- --install-dir=/usr/local/bin --file name=composer  
- composer install  
- ln -f -s .env.pipelines .env  
- php artisan migrate  
- ./vendor/bin/phpunit  
services:  
- mysql  
- redis  
definitions:  
services:  
mysql:  
image: mysql:5.7  
environment:  
MYSQL_DATABASE: "laravel-pipeline"  
MYSQL_RANDOM_ROOT_PASSWORD: "yes"  
MYSQL_USER: "homestead"  
MYSQL_PASSWORD: "secret"  
redis:  
image: redis  
script:  
- pipe: atlassian/scp-deploy:0.3.13  
variables:  
USER: '${remoteUser}'  
SERVER: '${server}'  
REMOTE_PATH: '${remote}'  
LOCAL_PATH: '${BITBUCKET_CLONE_DIR}/\*'


Answers:
author: Theodora Boudale
body: Hi William,

The issue here is that there is a script for the SCP Deploy pipe after the definitions section, which doesn't belong to any step.

Would you like to have this as a separate step than the "Build and test" step, but still as part of the default pipeline? If so, you can add it as follows after the first step, and before the definitions:

```
image: php:7.4-fpm

pipelines:
  default:
    - step:
        name: Build and test
        caches:
          - composer
        script:
          - apt-get update && apt-get install -qy git curl libmcrypt-dev mariadb-client ghostscript
          - yes | pecl install mcrypt-1.0.3
          - docker-php-ext-install pdo_mysql bcmath exif
          - curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --file name=composer
          - composer install
          - ln -f -s .env.pipelines .env
          - php artisan migrate
          - ./vendor/bin/phpunit
        services:
          - mysql
          - redis
    - step: 
        name: Deploy
        script:
          - pipe: atlassian/scp-deploy:0.3.13
            variables:
              USER: '${remoteUser}'
              SERVER: '${server}'
              REMOTE_PATH: '${remote}'
              LOCAL_PATH: '${BITBUCKET_CLONE_DIR}/*'

definitions:
  services:
    mysql:
      image: mysql:5.7
      environment:
        MYSQL_DATABASE: "laravel-pipeline"
        MYSQL_RANDOM_ROOT_PASSWORD: "yes"
        MYSQL_USER: "homestead"
        MYSQL_PASSWORD: "secret"
    redis:
      image: redis
```

If you need any cache or services in that step you'll need to add them there, the same way as in the first step.

Make sure that indentation is also the way I have it in the example file above.

Please feel free to let me know if you have any questions.

Kind regards,  
Theodora


Tags: bitbucket-pipelines

cloud

scp