qualitycode / phing-deploy
A simple tool to deploy your project
Installs: 0
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 2
Forks: 1
Open Issues: 0
Type:project
Requires
- ext-ssh2: *
- halleck45/phpmetrics: dev-master
- pear/archive_tar: ^1.3
- pear/versioncontrol_git: dev-master
- phing/phing: ^2.11
- phploc/phploc: ^2.1
- phpmd/phpmd: ^2.2
- phpunit/php-code-coverage: ^2.2@dev
- phpunit/phpunit: ^4.7
- sebastian/phpcpd: ^2.0
- sebastian/phpdcd: ^1.0@dev
- squizlabs/php_codesniffer: ^2.0@dev
This package is not auto-updated.
Last update: 2025-03-01 22:31:52 UTC
README
Deploy permets :
- 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 :
- 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.
Par exemple pour parameters.yml => parameters.yml.production
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 !
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.
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 :
- 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
<phingcall target="deploy.tool.ssh">
<property name="command" value="ma commande"/>
</phingcall>
Mise en place de cron
Dans le projet mettre les cron dans :
.
└── 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__
.
Configuration
Paramètres et leur emplacement conseillé :
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