de Bryan Lee

Implementare continuă Laravel cu CircleCI și Deployer

Implementare continua Laravel cu CircleCI si Deployer
Imagine din Maxpixel

Există multe soluții de implementare acolo cu implementarea Laravel, variind de la SSH în echipamentul dvs. și git pullfișierele (?) pentru a economisi timp, cum ar fi Trimis sau rulează-ți propriul cu Deployer. Personal îmi place Deployer, deoarece este gratuit, foarte flexibil și îți poate sprijini proiectele de la vârsta copilăriei până când ajungi la mai multe mașini.

Deployer funcționează executând scripturile de implementare la nivel local și putem face acest lucru și mai convenabil integrând Deployer în conducta dvs. CI. Pentru un proiect recent, am folosit CircleCI pentru a rula toate testele mele și pentru a le implementa automat.

Configurați implementatorul local

Pentru a economisi timp, vă recomand cu tărie să aveți Distribuitor instalat local și configurat și funcționează pentru aplicația dvs. Acest lucru economisește mult timp când trebuie să faceți depanare la configurarea deployer atunci când construirea CircleCI nu reușește.

Laravel și CircleCI

Dacă aveți deja configurat CircleCI pentru testele proiectului Laravel, treceți la următoarea secțiune. În caz contrar, presupun că cel puțin aveți deja un cont CircleCI și un proiect de bază creat în interior.

Creeaza o .circleci/config.yml și cu cele de mai jos


version: 2
jobs:
  build:
    docker:
      # Specify the version you desire here
      - image: circleci/php:7.1-browsers
      - image: circleci/mysql:5.7
        environment:
          MYSQL_ALLOW_EMPTY_PASSWORD: yes
          MYSQL_USER: root
          MYSQL_ROOT_PASSWORD: ''
          MYSQL_DATABASE: laravel

    working_directory: ~/laravel

    steps:
      - checkout
      - run:
          name: Install PHP exts
          command: |
            sudo docker-php-ext-install zip
            sudo docker-php-ext-install pdo_mysql
            sudo apt install -y mysql-client
      - run: sudo composer self-update

      # Download and cache dependencies
      - restore_cache:
          keys:
          - v1-dependencies-{{ checksum "composer.json" }}
          # fallback to using the latest cache if no exact match is found
          - v1-dependencies-

      - run: composer install -n --prefer-dist

      - save_cache:
          paths:
            - ./vendor
          key: v1-dependencies-{{ checksum "composer.json" }}

      - run:
          name: Setup Laravel stuffs
          command: |
            php artisan migrate --force
      - run: ./vendor/bin/phpunit

workflows:
  version: 2
  notify_deploy:
    jobs:
      - build

Acesta este un element de bază config.yml pentru Laravel. Acesta va instala PHP, MySQL și va rula teste PHPunit. Nu ezitați să modificați acest lucru pentru a se potrivi nevoilor dvs.

Implementarea CircleCI

După efectuarea testelor noastre, dorim ca CircleCI să înceapă automat implementarea pe serverul nostru. Amintiți-vă că Deployer folosește SSH, deci, în serverul nostru la distanță, dorim să creăm o pereche de chei SSH ssh-keygen -t rsa -b 4096 -C “[email protected]". Vrem să adăugăm această cheie pe care am creat-o în CircleCI ca cheie de implementare. Rețineți amprenta, deoarece va trebui să adăugăm acest lucru în fișierul nostru de configurare mai târziu.

Să creăm o nouă lucrare în fișierul nostru de configurare:

jobs:
  build: ... # from above
  
  deploy:
    docker:
      - image: circleci/php:7.2-browsers
    working_directory: ~/laravel
    steps:
      - checkout

Acest lucru îi spune lui CircleCI că avem un nou job numit deploy și să o construiți pe baza imaginii de andocare a browserelor php-7.2.

Vă amintiți amprenta de care am luat act atunci când am adăugat-o în CircleCI? Trebuie să menționăm acest lucru în configurația noastră, astfel încât cheia SSH să fie prezentă în containerul nostru.

jobs:
  build: ... # from above
  
  deploy:
    docker:
      - image: circleci/php:7.2-browsers
    working_directory: ~/laravel
    steps:
      - checkout
      - add_ssh_keys:
          fingerprints:
            - "YOUR_FINGERPRINT"

Deci acum, CircleCI știe să adauge această cheie prin amprenta digitală în containerul de andocare și acest lucru ne va permite să rulăm Deployer și SSH pe serverul nostru la distanță pentru a fi implementat.

jobs:
  build: ... # from above
  
  deploy:
    docker:
      - image: circleci/php:7.2-browsers
    working_directory: ~/laravel
    steps:
      - checkout
      - add_ssh_keys:
          fingerprints:
            - "YOUR_FINGERPRINT"
      - run:
          name: Install Deployer
          command: |
            curl -LO https://deployer.org/deployer.phar
            sudo mv deployer.phar /usr/local/bin/dep
            sudo chmod +x /usr/local/bin/dep
      - run:
          name: Deploy
          command: |
            dep deploy www.your_server.com

Cu deploy job definit, ultimul pas ar fi să îi spunem lui CircleCI să îl ruleze după ce testele noastre trec. Este simplu, avem deja un flux de lucru de bază numit notify_deploy pe care ne putem baza.

workflows:
  version: 2
  notify_deploy:
    jobs:
      - build
      - deploy:
          requires:
            - build
          filters:
            branches:
              only: master

Acest lucru spune CircleCI că în notify_deploy flux de lucru, în afară de alergare build, vrem să fugim deploy după ce este terminat și să o faceți numai pe master ramură.

Cu toate lucrurile făcute, acum putem împinge fișierul de configurare în depozitul nostru git și îl putem urmări testând și implementând singur. Folosiți un alt mod de implementare a Laravel? Anunță-mă, mi-ar plăcea să aud despre asta!