2017 © Pedro PelĂĄez
 

project phing-deploy

A simple tool to deploy your project

image

qualitycode/phing-deploy

A simple tool to deploy your project

  • 0 Dependents
  • 0 Suggesters
  • 1 Forks
  • 0 Open issues
  • 2 Versions
  • 0 % Grown

The README.md

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

  1. En local
    1. création du répertoire de release
    2. clonage du repository
    3. 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
    4. récupération de composer.phar
    5. copie des fichiers de configuration spécifique à l'environnement
    6. composer install
    7. exécution de la tache "package" du build.xml du projet
    8. création d'un package (fichier tgz)
  2. Sur le(s) serveur(s) distant(s)
    1. création des répertoires du projet
    2. copie du package
    3. création du répertoire pour le déploiement
    4. décompression du package
    5. installation des cron
    6. exécution de la tache "deploy" du build.xml du projet
    7. mise Ă  jour du lien current
    8. 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)

The Versions