If you’re using Bitbucket, then using their Pipelines feature as your CI/CD tool is a natural choice. Here’s a pipeline script that I use as a starting point for my new projects.
For every pull request created, the pipeline will perform the following tasks:
- Running your test suite.
 - Ensuring code standards are adhered to.
 - Running static analysis against your codebase.
 
The pipeline
Bitbucket Pipelines uses a Docker container under the hood, and is configured by placing a bitbucket-pipelines.yml file in the root folder of your repository.
I’ve got a sample configuration file below, that works for a relatively standard Laravel application.
image: php:7.4-fpm
pipelines:
  pull-requests:
    '**':
      - step:
          name: Run tests
          services:
            - docker
          caches:
            - composer
            - node
          script:
            - apt-get update
            - apt-get install -y unzip libzip-dev libpng-dev zip git
            - curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
            - docker-php-ext-configure zip
            - docker-php-ext-install zip bcmath pcntl gd
            - php -r "file_exists('.env') || copy('.env.example', '.env');"
            - composer install --no-progress --no-suggest --prefer-dist --no-interaction
            - vendor/bin/phpcs --standard=PSR2 -n app
            - apt-get update && apt-get install -y curl gnupg gnupg2 && curl -sL https://deb.nodesource.com/setup_10.x | bash - && apt-get install -y nodejs
            - php artisan key:generate
            - npm install
            - npm run dev
            - php artisan test --parallel
            - vendor/bin/phpstan analyse --memory-limit=512M
Lessons learned
- The earlier you can get these steps automated, the better. Pro tip: do it BEFORE you hire your first developer!
 - Bitbucket Pipelines is a pain to configure. But it’s really cheap if you’re already using Bitbucket.
 
End
What do you think about my pipeline setup? Would you do anything differently?
Leave a Reply