snicaise / cd-infrastructure

Démontre un pipeline de continuous delivery automatisé par http://www.go.cd et http://www.ansible.com

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Sommaire

  • Présentation
    • [Stack applicative](#Stack applicative)
    • [Stack technique](#Stack technique)
    • Pipeline
  • Installation
    • Prérequis
    • [Forker les projets](#Forker les projets sur github)
    • [Lancer les machines virtuels](#Lancer les machines virtuels)
  • [Liens utiles](#Liens utiles)
  • TODO

Presentation

Ce projet démontre un pipeline de continuous delivery automatisé par go.cd et ansible.

Pour donner le contexte, la démonstration porte sur AirCorp, un site de vente de billet d'avion, qui a décidé de réduire les coûts, le temps et les risques de livrer des changements incrémentaux à ses clients.

Le modèle économique d'AirCorp est basé sur la vente de billet d'avion. AirCorp a décidé de se lancer dans la recommandation d'hôtels à proximité du lieu d'arrivée, espérant augmenter ses revenus en prenant une commission sur chaque nuitée vendue, en plus des commissions sur les billets d'avions.

Stack applicative

Le site d'AirCorp est constitué de 3 applications java basés sur dropwizard :

  • cd-web :
    • frontal web polymer, permettant aux clients d'effectuer un devis.
    • IHM polymer / et service de devis /api/booking/quotation?origin=paris&destination=londres
  • cd-recommendation :
    • service REST renvoyant des recommendations d'hotel pour un lieu donné
    • /recommendation/londres
  • cd-pricing :
    • service REST permettant de connaitre le prix d'un vol
    • /pricing/price?origin=paris&destination=londres

Les projets suivant supportent la stratégie de test :

  • cd-endtoend-test : vérifie que le système répond aux exigences et atteint ses objectifs, en testant l'ensemble du système, de bout en bout.
  • cd-performance-test : tests de charge
Principaux flux
                                             +------------------+
                                   hotels    |                  |
                                +------------+  recommendation  |
                                |            |                  |
                    +-----------+-----+      +------------------+
         devis      |                 |                             
client -------------+       web       |                             
                    |                 |                             
                    +-----------+-----+      +------------------+
                                |            |                  |
                                +------------+     pricing      |
                                    prix     |                  |
                                             +------------------+

L'application a été codé en TDD, en suivant cette stratégie de test : microservice testing. Du fait de la simplicité de l'application, le résultat peux sembler bête, on test trop souvent la même chose. Mais le but est de montrer un pipeline de livraison continue, avec pour objectif d'avoir un feedback constant sur la possibilité de mettre en production chaque commit.

On peut aussi trouver de la duplication entre les projets, mais l'objectif est que chaque application puisse être déployé indépendamment des autres.

La stack est basé sur :

  • dropwizard - Dropwizard pulls together stable, mature libraries from the Java ecosystem into a simple, light-weight package that lets you focus on getting things done.
  • polymer - The Polymer library is designed to make it easier and faster for developers to create great, reusable components for the modern web.
  • mockito - Tasty mocking framework for unit tests in Java
  • wiremock - WireMock is a flexible library for stubbing and mocking web services. Unlike general purpose mocking tools it works by creating an actual HTTP server that your code under test can connect to as it would a real web service.
  • rest-assured - Testing and validation of REST services in Java is harder than in dynamic languages such as Ruby and Groovy. REST Assured brings the simplicity of using these languages into the Java domain.
  • gauge - Test automation in the business language
  • selenium - Selenium automates browsers.
  • gatling - Gatling is a highly capable load testing tool. It is designed for ease of use, maintainability and high performance.

Stack technique

  • go.cd - Automate and streamline the build-test-release cycle for worry-free, continuous delivery of your product.
  • ansible - Deploy apps. Manage systems. Crush complexity. Ansible is a powerful automation tool that you can learn quickly.
  • vagrant et virtualbox - Create and configure lightweight, reproducible, and portable development environments.
Les VMs
                                                                   +-----------------------+
                                                                   |  AirCorp integration  |
                                                                   |  AirCorp uat          |
                                                                   |                       |
+----------------------+        +----------------------+           |                       |
|       go-server      |        |       go-agent1      +-----------+ server1/192.168.2.50  |
|                      |        |       go-agent2      |           +-----------------------+
|                      +--------+                      |                                    
|                      |        |                      |           +-----------------------+
|goserver/192.168.2.45 |        |goagent/192.168.2.46  +-----------+  AirCorp performance  |
+----------------------+        +----------------------+           |  AirCorp production   |
                                                                   |                       |
                                                                   |                       |
                                                                   | server2/192.168.2.51  |
                                                                   +-----------------------+

Pipeline

Principal

pipeline

Fast-release

TODO

Installation

Prerequis

Prérequis :

  1. virtualbox (testé avec la 5.0.4)
  2. vagrant (testé avec la 1.7.4)
  3. ansible (testé avec la 1.9.3)
  4. Suffisamment de RAM et de CPU pour lancer 4 VMs

Recommandé :

  1. plugin vagrant vagrant-hostmanager
  2. plugin vagrant vagrant-cachier

Forker les projets sur github

  • Générer une clef ssh pour que go.cd puisse accéder aux repository sur github
ssh-keygen -t rsa -b 4096 -C "gocd@example.com" > ~/.ssh/id_gocd

Lancer les machines virtuels

A partir du projet cd-infrastructure.

  • Modifier la configuration de go.cd pour que chaque material pointe vers les repos git forkés, en éditant la configuration XML dans le fichier vagrant/roles/gocd/templates/cruise-config.xml. Rechercher/remplacer avec la nouvelle url toutes les lignes du type :
<materials>
  <git url="git@github.com:snicaise/cd-recommendation.git" materialName="git"/>
</materials>
  • Provisionner l'infrastructure avec Vagrant :
cd vagrant
vagrant up

Les jobs se déclenchent automatiquement après avoir réussi à poller les repository git.

Liens utiles

go-server

go-server

applications

Chaque application expose les services suivant :

  • web :
    • IHM polymer : /
    • service de devis : /quotation/from/{from}/to/{to}
    • admin dropwizard : /admin
  • recommendation :
    • service de devis : /recommendation/{destination}
    • admin dropwizard : /admin
  • pricing :
    • service de taxation : /pricing/from/{from}/to/{to}
    • admin dropwizard : /admin

Environnement d'intégration

  • web : port 5080
  • recommendation : port 5070
  • pricing : port 5060

Environnement uat

  • web : port 6080
  • recommendation : port 6070
  • pricing : port 6060

Environnement de performance

  • web : port 7080
  • recommendation : port 7070
  • pricing : port 7060

Environnement de production

  • web : port 8080
  • recommendation : port 8070
  • pricing : port 8060

TODO

  • pipeline de release rapide
  • haproxy / déploiement sans interruption de service
  • ajouter des bases de données

About

Démontre un pipeline de continuous delivery automatisé par http://www.go.cd et http://www.ansible.com


Languages

Language:Shell 51.1%Language:Ruby 48.9%