Quelques définitions pour débuter
Intégration continue
L’intégration continue est la pratique d’intégrer les changements des différents développeurs de l’équipe sur la branche principale le plus tôt possible.
Dans le meilleur des cas, l’intégration se fait plusieurs fois par jour.
Cela permet de s’assurer que le code sur lequel un développeur travaille n’est pas trop différent de celui des autres.
Cette pratique devrait être accompagnée de tests automatisés.
Déploiement continu
Le déploiement continu est relié à l’intégration continue. L’objectif est que l’application développée puisse être déployée en tout temps.
Idéalement, le déploiement devrait être automatisé vers un environnement de test ou de production si tous les tests automatisés passent.
Livraison continue
La livraison continue est la pratique d’avoir une base de code qui peut être déployée en tout temps vers un environnement de production.
En plus de s’assurer que l’application passe tous les tests, l’application doit contenir toutes les configurations nécessaires afin qu’elle soit livrée en production.
Plusieurs équipes poussent des changements, qui passent les tests automatisés, directement vers l’environnement de test ou de production afin d’avoir une boucle de développement rapide.
Intégration continue en détail
L’intégration continue est un ensemble de pratiques utilisées en génie logiciel consistant à vérifier, à chaque modification de code source, que le résultat des modifications ne produit pas de régression dans l’application développée.
https://fr.wikipedia.org/wiki/Integration_continue
L’automatisation
L’intégration continue repose souvent sur la mise en place d’une brique logicielle permettant l’automatisation de tâches :
- Compilation,
- Tests unitaires et fonctionnels,
- Validation du produit,
- Tests de performances…
À chaque changement du code, cette brique logicielle va exécuter un ensemble de tâches et produire un ensemble de résultats, que le développeur peut par la suite consulter.
Cette intégration permet ainsi de ne pas oublier d’éléments lors de la mise en production et donc ainsi améliorer la qualité du produit.
https://fr.wikipedia.org/wiki/Integration_continue
Prérequis de l’intégration continue
- Le code source soit partagé (en utilisant des logiciels de gestion de versions tels que CVS, Subversion, git, etc).
- Les développeurs intègrent (commit) quotidiennement
(au moins) leurs modifications. - Des tests d’intégration sont développés pour valider l’application.
Les outils de l’intégration continue
Afin d’automatiser l’intégration ou le déploiement, plusieurs outils sont disponible. Certains sont hébergés dans le nuage (hosted) et d’autres peuvent être installés à l’intérieur de votre réseau (self-hosted).
On pense à :
- Jenkins
- Travis
- TeamCity
- CruiseControl
- Codeship
- Gitlab CI
D’autres outils, comme Phpunit, SonarQube ou Jacoco, peuvent être mis en place afin de superviser la qualité du code.
Les principaux avantages de l’intégration continue
- Le test immédiat des modifications.
- La notification rapide en cas de code incompatible ou manquant.
- Les problèmes d’intégration sont détectés et réparés de façon continue, évitant les problèmes de dernière minute.
- Une version est toujours disponible pour un test, une démonstration ou une distribution.
https://fr.wikipedia.org/wiki/Integration_continue
Les bonnes pratiques
- Maintenir un dépôt unique de code source versionné.
- Automatiser les compilations.
- Tout le monde commit tous les jours.
- Maintenir un cycle de compilation court.
- Tester dans un environnement de production cloné.
- Rendre disponible facilement le dernier exécutable.
- Automatiser le déploiement.
Les outils utiles pour l’intégration continue
Jenkins
Gitlab et Gitlab CI
- Mise en place rapide avec un Docker https://hub.docker.com/r/gitlab/gitlab-ce/
Circle CI
- Add-on Heroku disponible
- Compte gratuit disponible
- https://circleci.com/pricing/
- 1,500 build minutes per month
- 1 container
- 1 concurrent build
- Vidéo d’introduction
- https://circleci.com/docs/continuous-deployment-with-heroku/
Travis
- Gratuit pour les projets « open source »
- Compatible Heroku
- Pré-configuré avec angular-fullstack
- Voir le fichier .travis.yml
- Configuration avec Karma
- https://karma-runner.github.io/0.8/plus/Travis-CI.html
Exemple de fichier .travis.yml
1 2 3 4 5 6 7 8 9 10 11 12 |
language: node_js node_js: - '0.10.33' before_script: - 'export CHROME_BIN=chromium-browser' - 'export DISPLAY=:99.0' - 'sh -e /etc/init.d/xvfb start' - 'npm install -g bower karma grunt-cli jshint' - 'npm install' # install npm packages - 'bower install' # install bower packages after_script: - 'grunt' # or other command for build, run tests, etc |
Gitlab
- GitLab Continuous Integration | GitLab
https://about.gitlab.com/gitlab-ci/ - Readme · Quick start · Ci · Help · GitLab
https://gitlab.com/help/ci%2Fquick_start/README - Configuration of your builds with .gitlab-ci.yml
http://doc.gitlab.com/ee/ci/yaml/README.html
Exemple de fichier .gitlab-ci.yml pour un projet angular-fullstack
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
before_script: - apt-get update -y - apt-get install -y libssl-dev build-essential wget - wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bash - source /root/.bashrc - nvm install node - nvm use node - node -v - npm -v - npm install -g grunt-cli - npm install jasmine-core - npm install grunt - npm install karma - npm install phantomjs-prebuilt - npm install karma-phantomjs-launcher - npm install grunt-karma - npm install mocha - npm install - ./node_modules/bower/bin/bower install --force-latest --allow-root test: script: npm test |
Exemple de fichier .gitlab-ci.yml pour un projet Ruby
1 2 3 4 5 6 7 8 9 10 11 12 |
before_script: - apt-get update -qq && apt-get install -y -qq sqlite3 libsqlite3-dev nodejs - ruby -v - which ruby - gem install bundler --no-ri --no-rdoc - bundle install --jobs $(nproc) "${FLAGS[@]}" rspec: script: - bundle exec rspec rubocop: script: - bundle exec rubocop |
Gitlab Shared Runner
Shared Runners
If you use GitLab.com you can use Shared Runners provided by GitLab Inc.
These are special virtual machines that run on GitLab’s infrastructure and can build any project.
To enable Shared Runners you have to go to your project’s Settings > Runners and click Enable shared runners.
Read more on Shared Runners.
Codeship
Addon pour Heroku
- https://elements.heroku.com/addons/codeship
- https://devcenter.heroku.com/articles/codeship
Compatible avec
- Github
- Bitbucket
Forfait gratuit
- Builds per Month 100
- Concurrent Builds 1
- Private Projects 5
- Team Members per Project Unlimited
- Premium Support
- ParallelCI pipelines 1
Mot de la fin
Recommandations
Intégrer votre code fréquemment (À tous les jours)
- git pull
- git commit -m
Mettre en place des tests unitaires. Un incontournable!
- karma et jasmine
- phpunit
Mettre en place un serveur d’intégration continue
- Jenkins – gratuit et configurable
Planifiez vos projets sans négliger la qualité.
Laisser un commentaire
Participez-vous à la discussion?N'hésitez pas à contribuer!