2 votes

Accroche de post-commit VisualSVN avec fichier batch

Je cours VisualSVN sur un serveur Windows.

Je tente d'ajouter un crochet post-commit pour mettre à jour notre projet de staging à chaque fois qu'un commit est effectué.

Dans VisualSVN, si je saisis la commande dans la boîte de dialogue hook/post-commit, tout fonctionne bien.

Cependant, si je crée un fichier batch avec la même commande exacte, j'obtiens une erreur indiquant que le crochet post-commit a échoué. Aucune information supplémentaire n'est donnée.

Ma commande utilise des chemins absolus.

J'ai essayé de placer le fichier batch dans le répertoire VisualSVN/bin, mais j'obtiens la même erreur.

J'ai vérifié que VisualSVN a les autorisations nécessaires pour les répertoires dans lesquels se trouve le fichier batch.

La seule chose à laquelle je pense est que je ne l'appelle pas correctement depuis VisualSVN. Je remplace simplement la commande svn update dans la boîte de dialogue hook/post-commit par le nom du fichier batch ("c:\VisualSVN\bin\mon-fichier-batch.bat") Je l'ai essayé avec et sans le chemin (sans le chemin, le fichier n'est pas trouvé du tout).

Est-ce que j'ai besoin d'utiliser une syntaxe différente dans la boîte de dialogue SVNCommit pour appeler le fichier batch ? Et à l'intérieur du fichier batch (il contient juste ma commande svn update. Ça fonctionne si je lance le fichier batch depuis la ligne de commande.)

Au final, je souhaite utiliser un fichier batch car je veux faire quelques actions supplémentaires après le commit.

1voto

David K Egghead Points 4564

Lorsque vous utilisez VisualSVN > Sélectionnez le Repo > Propriétés > Hooks > Post-commit hook. Où se trouve le code que j'utilise pour envoyer un e-mail puis exécuter un script, qui contient des commandes que je veux personnaliser

 "%VISUALSVN_SERVER%\bin\VisualSVNServerHooks.exe" ^
    commit-notification "%1" -r %2 ^
    --from support@domainname.com --to "support@domainname.com" ^
    --smtp-server mail.domainname.com ^
    --no-diffs ^
    --detailed-subject
    --no-html

set PWSH=%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe
%PWSH% -command $input ^| C:\ServerScripts\SVNScripts\post-commit-wp.ps1 %1 %2
if errorlevel 1 exit %errorlevel%

Le fichier de script est situé dans C:\ServerScripts\SVNScripts\post-commit-wp.ps1 et je passe deux variables VisualSVN en tant que %1 et %2

  • %1 = chemin du serveur avec repo
  • %2 = numéro de révision

Le fichier de script est écrit en Windows PowerShell

# CHEMIN VERS SVN.EXE
$svn = "C:\Program Files\VisualSVN Server\bin\svn.exe"
$pathtowebistesWP = "c:\websites-wp\"

# STOCKER LES ARGUMENTS DU HOOK DANS DES NOMS AMICAUX
$serverpathwithrep = $args[0]
$revision   = $args[1]

# OBTENIR LE NOM DE DOSSIER UNIQUEMENT À PARTIR DE LA CHAÎNE DE REPO-PATH
# EXEMPLE: C:\REPOSITORIES\DEVHOOKTEST
# RETOURNE 'DEVHOOKTEST'
$dirname = ($serverpathwithrep -split '\\')[-1]

# Combiner le chemin du serveur avec le nom du dossier
$exportpath = -join($pathtowebistesWP, $dirname);

# CONSTRUIRE L'URL VERS LE RÉPERTOIRE
$urepos = $serverpathwithrep -replace "\\", "/"
$url = "file:///$urepos/"

# --------------------------------
# QUELQUES SCRIPTS DE TEST
# --------------------------------

# CONSTRUCTEUR DE CHEMIN + NOM DE DOSSIER
$name = -join($pathtowebistesWP, "testscript.txt");
# CRÉER UN FICHIER SUR LE SERVEUR
New-Item $name -ItemType file
# AJOUTER DU TEXTE AU FICHIER
Add-Content $name $pathtowebistesWP
Add-Content $name $exportpath

# --------------------------------

# FAIRE L'EXPORTATION DE LA RÉVISION DU RÉPERTOIRE $REVISION VERS LE ExportPath
&"$svn" export -r $revision --force "$url" $exportpath

J'ai ajouté des commentaires pour expliquer chaque ligne et ce qu'elle fait. En résumé, les scripts :

  • Récupèrent tous les paramètres
  • Construisent un chemin de répertoire local
  • Exécutent l'exportation SVN
  • Placent les fichiers dans un répertoire de site web/publication.

C'est une manière simple de déployer votre code nouvellement validé sur un site web.

0voto

Ivan Zhakov Points 2778

Avez-vous essayé d'exécuter le fichier batch en utilisant la commande 'call' ? Je veux dire :

call C:\Script\myscript.bat

0voto

user2166634 Points 1

J'ai essayé la même chose et j'ai constaté que vous devez également avoir le script dans le dossier des hooks... le fichier bat en question.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X