Integration et deploiement continu

Avec Travis

Reynald Mandel

Lead Dev @ Theodo

Twitter @r_mandel

Github reynaldm

LinkedIn

  • Travis

  • Codeship

  • Conclusion

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
  • ou via l'interface graphique

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

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 ...

    - "[[ $TRAVIS_BRANCH = 'staging' ]] && bundle install && bundle exec cap staging deploy"

2. Deployer sur le serveur

Avantages

  • Tests simples à mettre en place
     
  • 0 maintenance & imperméable par projet
     
  • YAML lisible, Ctrl-C / Ctrl-V
     
  • Intégration autres services, nouvelles fonctionnalités

Inconvenients

  • Déploiement continu tricky à cause des clés :'(
  • Push & debug
  • env dev != env test
  • Ne teste pas le provisionning
  • UI = console
  • 2 endroits de configuration à savoir

Conclusion

Liens

Git submodules

  • Auto si .gitmodules
     
  • git:
        - submodules: false
     
  • before_install:
        - git submodule update --init --recursive

Formation CI du 02/04/2015

By Reynald Mandel

Formation CI du 02/04/2015

  • 1,295