diff --git a/source/before-we-start.rst b/source/before-we-start.rst
deleted file mode 100644
index 06b6204..0000000
--- a/source/before-we-start.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-============
-Avant-propos
-============
-
-Django se présente comme un `Framework Web pour perfectionnistes ayant des deadlines `_. `Django suit quelques principes `_:
-
- * Faible couplage et forte cohésion, pour que chaque composant ait son indépendance.
- * Moins de code, plus de fonctionnalités.
- * `Don't repeat yourself `_: ne pas se répéter!
- * Rapidié du développement.
-
-Pour commencer, nous allons nous concentrer sur la création d'un site ne contenant qu'une seule application, même si en pratique le site contiendra déjà plusieurs applications fournies pas django, comme nous le verrons plus loin.
-
-Pour prendre un exemple concret, nous allons créer un site permettant de gérer des listes de souhaits, que nous appellerons `gwift` (pour `GiFTs and WIshlisTs` :)).
-
-La première chose à faire est de définir nos besoins du point de vue de l'utilisateur, c'est-à-dire ce que nous souhaitons qu'un utilisateur puisse faire avec l'application. Ensuite, nous pourrons traduire ces besoins en fonctionnalités et finalement effectuer le développement.
-
diff --git a/source/index.rst b/source/index.rst
index b052ade..9242bce 100644
--- a/source/index.rst
+++ b/source/index.rst
@@ -12,7 +12,6 @@ Contents:
:maxdepth: 2
:numbered:
- before-we-start
intro
specs
models
@@ -20,6 +19,8 @@ Contents:
forms
admin
docs
+ integration
+ production
Indices and tables
==================
diff --git a/source/integration.rst b/source/integration.rst
new file mode 100644
index 0000000..d49d41e
--- /dev/null
+++ b/source/integration.rst
@@ -0,0 +1,69 @@
+====================
+Intégration continue
+====================
+
+Le but de l'intégration est continue est de nous permettre de tester automatiquement notre développement chaque fois que le code est mis à jour et ainsi éviter les régressions.
+
+Ceci nécessite de mettre à jour régulièrement les tests et d'utiliser un serveur d'intégration. Dans notre cas, nous allons utiliser jenkins.
+
+Nous considérons aussi que le code est hébergé sur gitlab (par exemple celui de `framasof `_)
+
+***********************
+Installation de jenkins
+***********************
+
+Jenkins fournit des paquets d'installation pour presque tous les systèmes d'exploitation sur leur site: `https://jenkins-ci.org/ `_.
+
+Par exemple, dans le cas de debian, il suffit de suivre les instructions sur `http://pkg.jenkins-ci.org/debian/ `_
+
+Comme nous utilisons git, il faut veiller à activer le plugin correspondant: `Git plugin `_.
+Ce dernier peut directement être installé depuis le panneau de gestion des plugins de jenkins.
+
+********************
+Création d'un projet
+********************
+
+Depuis la page principale de jenkins, on crée un nouveau projet en cliquant sur *Nouveau Item* et on donne un nom à notre nouveau projet:
+
+.. image:: integration/jenkins_new_project.png
+ :align: center
+
+Ensuite, on spécifie que le projet provient de git:
+
+.. image:: integration/jenkins_git.png
+ :align: center
+
+Finalement, on écrit le petit script permettant de lancer le build:
+
+.. image:: integration/jenkins_build_script.png
+ :align: center
+
+Et on sauve le tout.
+
+*********************
+Lien gitlab - jenkins
+*********************
+
+Pour que le build du projet que nous avons créé dans jenkins soit exécuté automatiquement, il est nécessaire d'autoriser le lancement du build via une url sur jenkins, cette dernière étant appelée depuis gitlab.
+
+Dans jenkins, on se rend dans les propriétés du projet et on active le déclanchement du build à distance:
+
+.. image:: integration/jenkins_build_with_url.png
+ :align: center
+
+Attention à générer un jeton d'authentification suffisamment aléatoire pour éviter que n'importe qui ne lance le build. Par exemple avec uuid en python:
+
+.. code-block:: python
+
+ >>> import uuid
+ >>> uuid.uuid4()
+ UUID('097e547c-08b4-4d4f-a8e8-2a1cf03b8463')
+ >>>
+
+Ensuite, on crée un web hook dans gitlab:
+
+.. image:: integration/gitlab_web_hook.png
+ :align: center
+
+Voilà, à chaque push sur gitlab, jenkins lancera le build du projet et exécutera les tests associés.
+
diff --git a/source/integration/gitlab_web_hook.png b/source/integration/gitlab_web_hook.png
new file mode 100644
index 0000000..d9cd4dc
Binary files /dev/null and b/source/integration/gitlab_web_hook.png differ
diff --git a/source/integration/jenkins_build_script.png b/source/integration/jenkins_build_script.png
new file mode 100644
index 0000000..fc4778b
Binary files /dev/null and b/source/integration/jenkins_build_script.png differ
diff --git a/source/integration/jenkins_build_with_url.png b/source/integration/jenkins_build_with_url.png
new file mode 100644
index 0000000..3546681
Binary files /dev/null and b/source/integration/jenkins_build_with_url.png differ
diff --git a/source/integration/jenkins_git.png b/source/integration/jenkins_git.png
new file mode 100644
index 0000000..d57a50b
Binary files /dev/null and b/source/integration/jenkins_git.png differ
diff --git a/source/integration/jenkins_new_project.png b/source/integration/jenkins_new_project.png
new file mode 100644
index 0000000..2063125
Binary files /dev/null and b/source/integration/jenkins_new_project.png differ
diff --git a/source/intro.rst b/source/intro.rst
index ac0f50f..ccf3f0a 100644
--- a/source/intro.rst
+++ b/source/intro.rst
@@ -2,6 +2,13 @@
Introduction
============
+Django se présente comme un `Framework Web pour perfectionnistes ayant des deadlines `_. `Django suit quelques principes `_:
+
+ * Faible couplage et forte cohésion, pour que chaque composant ait son indépendance.
+ * Moins de code, plus de fonctionnalités.
+ * `Don't repeat yourself `_: ne pas se répéter!
+ * Rapidié du développement.
+
.. include:: intro/01-prerequisites.rst
.. include:: intro/02-create-django-app.rst
diff --git a/source/intro/03-before-going-further.rst b/source/intro/03-before-going-further.rst
index f946651..2b5b0e6 100644
--- a/source/intro/03-before-going-further.rst
+++ b/source/intro/03-before-going-further.rst
@@ -2,7 +2,7 @@
Avant d'aller plus loin...
**************************
-Avant d'aller plus loin, donc, un petit point sur les conventions, les tests (unitaires, orientés comportement, basés sur la documentation, ...) et sur la documentation. Plus que dans tout langage compilé, ceux-ci sont pratiquement obligatoires. Vous pourrez les voir comme une perte de temps dans un premier temps, mais nous vous promettons qu'ils vous en feront gagner par la suite.
+Avant d'aller plus loin, donc, un petit point sur les conventions, les tests (unitaires, orientés comportement, basés sur la documentation, ...), la gestion de verstion du code et sur la documentation. Plus que dans tout langage compilé, ceux-ci sont pratiquement obligatoires. Vous pourrez les voir comme une perte de temps dans un premier temps, mais nous vous promettons qu'ils vous en feront gagner par la suite.
PEP8
====
@@ -141,3 +141,11 @@ Lancez ensuite `flake8` avec la commande `flake8 . --exclude="migrations"`. Sur
Bref, on le voit: nous n'avons que très peu de modules, et aucun d'eux n'est commenté.
En plus de cette méthode, Django permet également de rendre la documentation accessible depuis son interface d'administration.
+
+Gestion de version du code
+==========================
+
+Il existe plusiseurs outils permettant de gérer les versions du code, dont les plus connus sont `git `_ et `mercurial `_.
+
+Dans notre cas, nous utilisons git et hebergons le code et le livre directement sur le gitlab de `framasoft `_
+
diff --git a/source/production.rst b/source/production.rst
new file mode 100644
index 0000000..7b0dbf2
--- /dev/null
+++ b/source/production.rst
@@ -0,0 +1,20 @@
+==================
+Mise en production
+==================
+
+Le serveur que django met à notre disposition est prévu uniquement pour le développement.
+
+Pour une mise ne production, il nous faut donc quelque chose de plus solide:
+
+ * Nginx comme serveur principal
+ * Gunicorn comme serveur d'application
+ * PostgreSQL comme base de données
+
+Voir http://michal.karzynski.pl/blog/2013/06/09/django-nginx-gunicorn-virtualenv-supervisor/
+Et http://tutos.readthedocs.org/en/latest/source/ndg.html
+
+.. include:: production/environment.rst
+.. include:: production/postgresql.rst
+.. include:: production/gunicorn.rst
+.. include:: production/nginx.rst
+
diff --git a/source/production/environment.rst b/source/production/environment.rst
new file mode 100644
index 0000000..e69de29
diff --git a/source/production/gunicorn.rst b/source/production/gunicorn.rst
new file mode 100644
index 0000000..e69de29
diff --git a/source/production/nginx.rst b/source/production/nginx.rst
new file mode 100644
index 0000000..e69de29
diff --git a/source/production/postgresql.rst b/source/production/postgresql.rst
new file mode 100644
index 0000000..e69de29