rafaelstz
8/2/2018 - 3:31 PM

Magento 2 with Bitbucket Pipelines and Deployer

Automated deploy using Magento 2 + Bitbucket Pipelines + Deployer

Use both files in your root folder and run:

curl -LO https://deployer.org/deployer.phar && sudo mv deployer.phar /usr/local/bin/dep && sudo chmod +x /usr/local/bin/dep
composer require deployer/recipes --dev
composer require rafaelstz/deployer-magento2 dev-master --dev
34.199.54.113,34.232.25.90,34.232.119.183,34.236.25.177,35.171.175.212,52.54.90.98,52.202.195.162,52.203.14.55,52.204.96.37,34.218.156.209,34.218.168.212,52.41.219.63,35.155.178.254,35.160.177.10,34.216.18.129,34.199.54.113, 34.232.25.90, 34.232.119.183, 34.236.25.177, 52.204.96.37, 35.171.175.212, 52.54.90.98, 52.202.195.162, 52.203.14.55, 34.218.156.209, 34.218.168.212, 52.41.219.63, 35.155.178.254, 35.160.177.10, 34.216.18.129, 52.8.84.222, 52.52.234.127, 104.192.136.0/21
image: rafaelcgstz/magento2
clone:
  depth: 1 # include just the last commit
pipelines:
  branches:
    staging:
      - step:
          name: Deploy Staging
          deployment: staging
          caches:
            - composer
          artifacts:
            - vendor/**
          script:
              - echo "$AUTH" > auth.json
              - composer install --quiet
              - echo "$SSH_PRIVATE_KEY" | tr -d '\r' > /root/.ssh/id_rsa.tmp
              - base64 -d /root/.ssh/id_rsa.tmp > /root/.ssh/id_rsa
              - echo "$SSH_PUBLIC_KEY" | tr -d '\r' > /root/.ssh/id_rsa.pub
              - cat /root/.ssh/id_rsa.pub > /root/.ssh/authorized_keys
              - eval "$(ssh-agent -s)"
              - echo "$KNOWN_HOSTS" >> /root/.ssh/known_hosts
              - chmod 700 /root/.ssh
              - chmod 600 /root/.ssh/id_rsa
              - chmod 644 /root/.ssh/authorized_keys
              - chmod 644 /root/.ssh/known_hosts
              - echo -e "Host *\n StrictHostKeyChecking no\n UserKnownHostsFile=/dev/null" > /root/.ssh/config
              - curl -LO https://deployer.org/deployer.phar && mv deployer.phar /usr/local/bin/dep && chmod +x /usr/local/bin/dep
              - echo "set('slack_text', '_Bitbucket Pipelines_ deploying `{{branch}}` to *{{target}}*');" >> deploy.php
              - dep deploy staging
      - step:
          name: PHP Copy/Paste Detector
          caches:
            - composer
          artifacts:
            - vendor/**
          trigger: manual
          script:
            - composer install --quiet
            - php vendor/bin/phpcpd app/
      - step:
          name: PHP CodeSniffer PSR1
          caches:
            - composer
          artifacts:
            - vendor/**
          trigger: manual
          script:
            - composer install --quiet
            - php vendor/bin/phpcs --standard=PSR1 app/code app/design
      - step:
          name: PHP Mess Detector
          caches:
            - composer
          artifacts:
            - vendor/**
          trigger: manual
          script:
            - composer install --quiet
            - php vendor/bin/phpmd app/code,app/design text cleancode,codesize,controversial,design,naming,unusedcode
      - step:
          name: ECG Magento Code Sniffer PSR2
          caches:
              - composer
          artifacts:
            - vendor/**
          trigger: manual
          script:
              - composer install --quiet
              - composer require magento-ecg/coding-standard
              - php vendor/bin/phpcs --standard=PSR2 app/code app/design
              - php vendor/bin/phpcs --standard=vendor/magento-ecg/coding-standard/EcgM2/ruleset.xml --extensions=php,phtml app/code app/design
    master:
      - step:
          name: Deploy Production
          deployment: production
          size: 2x # Double resources available for this step
          caches:
            - composer
          artifacts:
            - vendor/**
          script:
            - echo "$AUTH" > auth.json
            - composer install --quiet
            - echo "$SSH_PRIVATE_KEY" | tr -d '\r' > /root/.ssh/id_rsa.tmp
            - base64 -d /root/.ssh/id_rsa.tmp > /root/.ssh/id_rsa
            - echo "$SSH_PUBLIC_KEY" | tr -d '\r' > /root/.ssh/id_rsa.pub
            - cat /root/.ssh/id_rsa.pub > /root/.ssh/authorized_keys
            - eval "$(ssh-agent -s)"
            - echo "$KNOWN_HOSTS" >> /root/.ssh/known_hosts
            - chmod 700 /root/.ssh
            - chmod 600 /root/.ssh/id_rsa
            - chmod 644 /root/.ssh/authorized_keys
            - chmod 644 /root/.ssh/known_hosts
            - echo -e "Host *\n StrictHostKeyChecking no\n UserKnownHostsFile=/dev/null" > /root/.ssh/config
            - curl -LO https://deployer.org/deployer.phar && mv deployer.phar /usr/local/bin/dep && chmod +x /usr/local/bin/dep
            - echo "set('slack_text', '_Bitbucket Pipelines_ deploying `{{branch}}` to *{{target}}*');" >> deploy.php
            - dep deploy production
      - step:
          name: Install Magento 2 Local
          trigger: manual
          caches:
            - composer
          artifacts:
            - vendor/**
          script:
            - echo "$AUTH" > auth.json
            - composer install --no-dev --quiet
            - chmod u+w -R ./var ./vendor ./pub/static ./pub/media ./app/etc
            - chmod u+x ./bin/magento
            - php -f ./bin/magento setup:install --base-url=http://localhost/ --use-secure=0 --db-host=127.0.0.1 --db-name=magento2 --db-user=root --db-password=root --admin-firstname=Magento --admin-lastname=Commerce --admin-email=user@example.com --admin-user=admin --admin-password=admin123 --language=en_US --currency=USD --timezone=America/Chicago --use-rewrites=1 --backend-frontname=admin
            - php -f ./bin/magento setup:upgrade
            - php -f ./bin/magento deploy:mode:set production --skip-compilation
            - php -f ./bin/magento setup:di:compile
            - php -f ./bin/magento setup:static-content:deploy -j 10
            - composer dump-autoload --no-dev --no-interaction --optimize
          services:
            - mysql
definitions:
  services:
    mysql:
      image: mysql:5.6
      environment:
        MYSQL_ROOT_PASSWORD: 'root'
        MYSQL_DATABASE: 'magento2'
        MYSQL_USER: 'magento'
        MYSQL_PASSWORD: 'magento'
<?php

namespace Deployer;
require __DIR__ . '/vendor/rafaelstz/deployer-magento2/deploy.php';

// Project
set('application', 'My Project Name');
set('repository', 'git@bitbucket.org:lesite/my-project.git');
set('default_stage', 'staging');

// Env Configurations
set('php', '/usr/bin/php70');
set('magerun', '/usr/bin/n98-magerun2');
set('composer', '/usr/bin/composer');

// Project Configurations
host('my-store.com')
    ->hostname('iuse.magemojo.com')
    ->user('my-user')
    ->port(22)
    ->set('deploy_path', '/home/my-project-folder')
    ->set('branch', 'master')
    ->set('is_production', 0)
    ->stage('production')
    //->configFile('~/.ssh/config')
    ->identityFile('~/.ssh/id_rsa')
    ->addSshOption('UserKnownHostsFile', '/dev/null')
    ->addSshOption('StrictHostKeyChecking', 'no');

// Slack
set('slack_webhook', 'https://hooks.slack.com/services/YOUR/REGISTER/HERE');
before('deploy', 'slack:notify');
after('success', 'slack:notify:success');
after('deploy:failed', 'slack:notify:failure');