README
Deploy permets :, (*1)
- la création d'un package pour le déploiement
- le déploiement d'un package
- l'analyse statique du code
Il permet de gérer :, (*2)
- plusieurs projets
- plusieurs environnements de déploiement
- plusieurs serveurs par environnement
Pré-requis
Serveur de déploiement
- php >= 5.3
- php-ssh
- git
- composer
- installer la clef publique du serveur de dĂ©ploiement sur les diffĂ©rents serveurs oĂč l'on doit dĂ©ployer
- ajouter la clef publique du serveur de déploiement sur bitbucket et github
Fichiers de configuration du projet
Les fichiers de configuration du projet doivent ĂȘtre disponible pour chacun des environnements de dĂ©ploiement., (*3)
Par exemple pour parameters.yml => parameters.yml.production, (*4)
Fonctionnement
Deploy task
- En local
- création du répertoire de release
- clonage du repository
- récupération du dernier tag de la branche configurée si il y a des tags ou récupération du tag passé en paramÚtre
- récupération de composer.phar
- copie des fichiers de configuration spécifique à l'environnement
- composer install
- exécution de la tache "package" du build.xml du projet
- création d'un package (fichier tgz)
- Sur le(s) serveur(s) distant(s)
- création des répertoires du projet
- copie du package
- création du répertoire pour le déploiement
- décompression du package
- installation des cron
- exécution de la tache "deploy" du build.xml du projet
- mise Ă jour du lien current
- nettoyage des anciens déploiement
Installation
#!bash
$ git clone git@github.com:QualityCodePhp/PhingDeploy.git
$ composer install
That's all !, (*5)
Utilisation
- ./vendor/bin/phing help => Display this message
- ./vendor/bin/phing prepare -Dproject.name=test -Dstage.name=production => Prepare server
- ./vendor/bin/phing rollback -Dproject.name=test -Dstage.name=production => Rollback to previous deployment
- ./vendor/bin/phing package -Dproject.name=test -Dstage.name=production -Drepository.tag=1.0 => Application packaging
- ./vendor/bin/phing deploy -Dproject.name=test -Dstage.name=production -Drepository.tag=1.0 => Application deployment
- ./vendor/bin/phing qa -Dproject.name=test -Dstage.name=production -Drepository.tag=1.0 => Run qa tools
- ./vendor/bin/phing deploy-with-qa -Dproject.name=test -Dstage.name=production -Drepository.tag=1.0 => Run qa tools and deployment tasks
Si le projet est un bundle ou une library, le deployement n'a pas de sens, penser Ă mettre deploy.enable Ă false dans le fichier de
configuration du projet., (*6)
Structure
Projet
.
âââ build.xml => Taches de base et gestion des paramĂštres (deploy, help)
âââ lib
â  âââ step
â  â  âââ history.xml => DĂ©ploiement sur les environnements distants
â  â  âââ package.xml => CrĂ©ation de l'archive
â  â  âââ remote.xml => Actions sur le(s) serveur(s)
â  â  âââ rollback.xml => Gestion du rollback
â  â  âââ prepare.xml => Initialisation de la structure sur le(s) serveur(s)
â  âââ tool
â  âââ composer.xml => Taches liĂ©es Ă composer
â  âââ git.xml => Taches liĂ©es Ă git
â  âââ cron.xml => Mise Ă jour des taches cron sur le(s) serveur(s)
â  âââ qa.xml => Taches des outils de QA
âââ properties
  âââ build.properties => ParamĂštrage gĂ©nĂ©ral
 âââ projects => DĂ©finition des projets
  â  âââ project1.properties
  â  âââ project2.properties
  âââ stage => DĂ©finition des environnements
  âââ preproduction.properties
  âââ production.properties
  âââ recette.properties
 âââ recette => DĂ©finition des spĂ©cificitĂ©s des projets pour un environnement
    âââ project1.properties
    âââ project2.properties
Release
.
âââ releases
  âââ project_name
    âââ stage_name
    âââ build_uniq_id
    âââ code
    âââ package
    âââ report
Remote
.
âââ project_name
  âââ cache
  âââ logs
  âââ packages
  âââ releases
â âââ previous
â âââ current
  âââ shared
Taches spécifiques au projet
S'il y a besoin d'exécuter des taches spécifiques au projet, il suffit de placer un fichier phing build.xml à sa racine avec
3 targets :, (*7)
- pre-package => avant la création de l'archive (par exemple : minification js et css)
- post-package => aprÚs la création du package (par exemple : versionning du package, envoie d'un mail)
- pre-deploy => avant le déploiement
- post-deploy => aprÚs le déploiement
- pre-rollback => avant le rollback
- post-rollback => aprĂšs le rollback
Si la tache a besoin d'ĂȘtre Ă©xĂ©cutĂ©e sur le serveur, il faut passer par la target deploy.tool.ssh, (*8)
<phingcall target="deploy.tool.ssh">
<property name="command" value="ma commande"/>
</phingcall>
Mise en place de cron
Dans le projet mettre les cron dans :, (*9)
.
âââ Ressources
  âââ cron.d
    âââ project_name-__STAGE__-name1
  âââ project_name-__STAGE__-name2
:
    âââ ....
Les chemins des scripts dans les fichiers cron doivent ĂȘtre prĂ©cĂ©dĂ© par __PATH__
., (*10)
Configuration
ParamÚtres et leur emplacement conseillé :, (*11)
properties/build.properties
Nom |
Type |
Description |
Default |
Requis |
qa.phploc.path |
string |
chemin complet ou relatif |
n/a |
oui |
qa.phpcpd.path |
string |
chemin complet ou relatif |
n/a |
oui |
qa.phpdcd.path |
string |
chemin complet ou relatif |
n/a |
oui |
qa.phpmd.path |
string |
chemin complet ou relatif |
n/a |
oui |
qa.phpcs.path |
string |
chemin complet ou relatif |
n/a |
oui |
qa.pdepend.path |
string |
chemin complet ou relatif |
n/a |
oui |
qa.phpmetrics.path |
string |
chemin complet ou relatif |
n/a |
oui |
deploy.history |
entier |
nombre de déploiement à conserver |
5 |
non |
properties/project/project_name.properties
Nom |
Type |
Description |
Default |
Requis |
repository |
string |
url (http ou ssh) du dépot git |
n/a |
oui |
repository.branch |
string |
nom de la branche à récupérer |
n/a |
oui |
source.path |
string |
chemin relatif des sources (ex: ./src) |
n/a |
oui |
deploy |
boolean |
doit-on déployer le projet |
true |
non |
project.configuration.files |
string |
liste des fichiers de configuration (séparé par ,) |
n/a |
non |
properties/stage/stage_name.properties
Nom |
Type |
Description |
Default |
Requis |
deploy.path |
string |
chemin complet sur le serveur |
n/a |
oui |
deploy.hosts |
string |
ip ou nom des serveurs (séparé par ,) |
n/a |
oui |
deploy.user |
string |
utilisateur sur le serveur |
n/a |
oui |
deploy.pubkeyfile |
string |
chemin complet ou relatif de la clef publique |
n/a |
oui |
deploy.privkeyfile |
string |
chemin complet ou relatif de la clef privée |
n/a |
oui |
properties/stage/stage_name/project_name.properties
Vous pouvez surcharger ici tous les paramĂštres, (*12)