Integration et deploiement continu
Avec Travis
-
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
- Clone repo, move to folder, checkout commit
-
before_install & install
-
before_script & script
-
after_success ou after_failure
- 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,366