Export de fichier depuis un Subversion pour mise en producti
Posté : 03 juil. 2008, 17:03
Suite à mon billet, j'ai réussi un premier draft qui fonctionne pas mal, donc je vous en fait profiter.
Le code permet de faire des mises en production avec les dossiers, tout en permettant un rollback rapide...
Beaucoup d'évolution sont possibles suivant l'imagination
Le code permet de faire des mises en production avec les dossiers, tout en permettant un rollback rapide...
Beaucoup d'évolution sont possibles suivant l'imagination
// Dossier ou seront deposees les export/backup
$baseLocale = '';
/**
* Informations de connexion au serveur FTP
*/
$hoteFTP = '';
$loginFTP = '';
$passFTP = '';
// Dossier dans lesquel se trouve les fichiers
$baseDossierFTP = '';
/**
* Definition des dossier de base (mep pour la mise en production, backup pour effectuer le backup)
*/
$baseMep = $baseLocale.'mep-'.$revision;
$baseBackup = $baseLocale.'backup-'.$revision;
// URL du serveur de subversion
// exemple : svn://monsubversion/
$urlBaseSVN = '';
// Nom du projet ex : projet1
$projet = '';
// Numero de la revision correspond au fichier a recuperer
$revision = 1;
// exemple : svn://monsubversion/projet1/
$svn = $urlBaseSVN.$projet;
$cmd = "svn diff --summarize -r ".$revision." ".$svn;
exec($cmd, $tabRetour);
/**
* Recuperation des fichiers du SVN
*/
mkdir($baseMep);
chdir($baseMep);
foreach($tabRetour as $unFichier) {
$newInfo = str_replace(' ', '',$unFichier);
$type = substr($newInfo, 0, 1);
$nomFichier = substr($newInfo, 1);
if ($type == 'M' || $type == 'A') {
if (ereg('(\.)', $nomFichier)) {
$tab = explode($projet, $nomFichier);
$folder = $tab[1];
$tabFolder = explode('/', $folder);
array_pop($tabFolder);
foreach ($tabFolder as $sousDossier) {
if (!is_dir($sousDossier)) {
mkdir($sousDossier);
}
chdir($sousDossier);
}
$cmd = "svn export ".$nomFichier;
exec($cmd);
echo '(GETSVN) Export fichier '.$folder."\n";
chdir($baseMep);
$tabFichier [] = $folder;
}
}
}
/**
* Creation du backup - recuperation des fichiers sur le FTP
*/
mkdir($baseBackup);
chdir($baseBackup);
$stream = ftp_connect($hoteFTP);
ftp_login($stream, $loginFTP,$passFTP);
foreach($tabFichier as $fichier) {
$tabFolder = explode('/', $fichier);
array_pop($tabFolder);
foreach ($tabFolder as $sousDossier) {
if (!is_dir($sousDossier)) {
mkdir($sousDossier);
}
chdir($sousDossier);
}
chdir($baseBackup);
ftp_get($stream, $fichier, $baseDossierFTP.$fichier,FTP_BINARY);
echo '(BACKUP) Recuperation fichier '.$fichier."\n";
}
/**
* Envoi des fichiers pour Mise en production
*/
chdir($baseMep);
foreach($tabFichier as $fichier) {
ftp_put($stream, $baseDossierFTP.$fichier, $fichier, FTP_BINARY);
echo '(MEP) Envoi fichier '.$fichier."\n";
}
ftp_close($stream);