flosy.info | Développement Web, Open source …

Mar/12

20

Déploiement de projets à l’aide de Fabric

Le déploiement d’un projet est toujours une étape fastidieuse et parfois complexe.
Pour automatiser cela nous pouvons utiliser un outil comme Fabric qui va nous permettre de scripter notre déploiement.
J’ai découvert cet outil dans la présentation Adopt Devops philosophy on your Symfony projects de Fabrice Bernhard lors de la conférence symfony live 2011.

Fabric est un outil écrit en Python et disponible sur le site suivant : http://docs.fabfile.org/en/latest/index.html.

Installation

Il est recommandé de passer par pip pour installer Fabric. Pip n’est pas installé de base sur la Fedora. Il est cependant disponible sous forme de package.

  # yum install python-pip

Pip va nous permettre d’installer Fabric grâce à la commande suivante :

  # pip-python install fabric

Note : Dans mon cas cela n’a pas fonctionné directement. En effet Fabric a comme dépendance la bibliothèque PyCrypto qui va être compilée par pip. Il m’a fallu installer le package python-devel.

Utilisation

À titre d’exemple nous allons créer un fichier fabric qui va nous permettre de créer un projet symfony et de lui associer un dépôt GIT.

Nous créons le fichier fabfile.py dans le dossier parent du futur projet (dans mon cas /var/www/symfony2).

from fabric.api import *
 
version_symfony = 'Symfony_Standard_2.0.12.tgz'
url_symfony = 'http://symfony.com/download?v=' + version_symfony
 
def install_symfony(project_name):
  local("wget " + url_symfony)
  local("tar xzvf " + version_symfony)
  local("rm " + version_symfony)
  local("mv Symfony " + project_name)
  local("cp %s/app/config/parameters.ini %s/app/config/parameters.ini.dist " % (project_name, project_name))
 
def create_repository(project_name):
  local('touch ./%s/.gitignore' % project_name)
  ignore_file = open('./%s/.gitignore' % project_name, 'w')
  ignore_file.write("""/web/bundles/
/app/bootstrap*
/app/cache/*
/app/logs/*
/vendor/
/app/config/parameters.ini""")
  with lcd(project_name):	# Context managers lcd pour local, cd pour remote (run).
    local('git init ')
    local('git add .')
    local('git commit -m  "Initial commit"')
 
def install_vendors(project_name):
  with lcd(project_name):
    local('php bin/vendors install')
 
def install(project_name):
  install_symfony(project_name)
  create_repository(project_name)
  install_vendors(project_name)

Le fichier décompose l’installation en 3 fonctions :

install_symfony
Installe une version donnée de symfony sans les vendors.
create_repository
Gère toutes les opérations nécessaires à la création du dépôt GIT.
install_vendors
Installe les vendors.

La fonction install nous sert de facade.

Nous pouvons donc les appeler successivement ou utiliser la facade.

  $ fab install_symfony:symfabric
  $ fab create_repository:symfabric
  $ fab install_vendors:symfabric

ou

  $ fab install:symfabric

Vous noterez l’utilisation du context manager lcd qui permet de spécifier un dossier de travail pour un groupe d’instructions.
Dans le cas d’un accès distant il convient d’utiliser le context manager cd.

Connexion sur un hôte distant

Nous allons utiliser une connexion ssh par clé. Pour cela nous allons ajouter sur l’hôte distant, la clé publique dans le fichier .ssh/authorized_keys.
Attention à donner les bons droits au fichier :

  $ chmod 600 .ssh/authorized_keys

Pour l’exemple je vous renvoie vers le très bon exemple de la présentation de Fabrice Bernhard disponible sur GitHub.

Related Posts:

  • No Related Posts

No tags

No comments yet.

Leave a Reply

 

<<

>>

Theme Design by devolux.nh2.me