Integration et deploiement continu

Avec Travis

Reynald Mandel

Lead Dev @ Theodo

Twitter @r_mandel

Github reynaldm

LinkedIn

  • Présentation de Travis

  • Configuration / ProTips

  • Déploiement continu

  • Avantages / Inconvénients

Pourquoi ?

Risque

Confiance

Temps

Stratégie

Bugs

Qualité

Engagement

Nouvelles Fonctionnalités

Devops

.travis.yml

.travis.yml

 branches:
    only:
      - master
      - /^deploy-.*$/

 

 branches:
    except:
      - /^test-.*$/

 

Travis LifeCycle

  1. Clone repo, move to folder, checkout commit
     
  2. before_install & install
     
  3. before_script & script
     
  4. after_success ou after_failure
     
  5. after_script

Accès SSH

cp devops/travis/.travis-composer-config.json ~/.composer/config.json

  • base64 encode private key => source_key (deprecated)
  • travis sshkey --upload ~/.ssh/id_rsa -r repository

Bases de donnée ?

  • installation de mysql
     
  • démarrage du service
     
  • configuration du user
     
  • utilisation du user dans Symfony2

Notifications

  • notifications:
        email:
            - my-project-dev@theodo.fr
     

  • Intégration avec d'autres services (API) :
    irc, campfire, slack...

.travis.yml

Astuces

  • cache:
        directories:
            - ~/.composer/cache
    (pas vendor à cause de l'autoload !!)
     

  • Travis webLint
    http://lint.travis-ci.org
     

  • Scripts par défaut
     

  • Bien faire attention au YML

Accélérer les builds ?

env:
    - TEST_FOLDER = src/Bundle/A
    - TEST_FOLDER = src/Bundle/B

 

script: phpunit -c app TEST_FOLDER

env:
    - TEST_TAG = units
    - TEST_TAG = functionnals

 

script: phpunit -c app --tags=TEST_TAG

Déploiement continu

  • gem install travis
  • travis login --pro
  • travis encrypt-file

1. Transmettre la clé

openssl aes-256-cbc

-K $encrypted_0a6446eb3ae3_key

-iv $encrypted_0a6446eb3ae3_key

-in super_secret.txt.enc -out

super_secret.txt -d

Encoder (en local)

Décoder (sur la vm travis)

Déploiement continu

after_success:

    - openssl ...
    - bundle install

    - [[ $TRAVIS_BRANCH = 'master' ]] && bundle exec cap deploy

2. Deployer sur le serveur

Avantages

  • Simple à mettre en place
  • Lisible
  • Cloud
  • Nouvelles fonctionnalités
  • Intégration autres services
  • Imperméable par projet

Inconvenients

  • Push & debug
  • env dev != env test
  • Ne teste pas le provisionning
  • UI = console
  • 3 endroits de configuration ?

Conclusion

Liens

Git submodules

  • Auto si .gitmodules
     
  • git:
        - submodules: false
     
  • before_install:
        - git submodule update --init --recursive
Made with Slides.com