2016-10-13 1 views
0

J'essaie d'exécuter un script batch depuis le job jenkins qui a deux commandes msiexec pour la désinstallation et l'autre pour l'installation.
Ce script est sur github si l'emploi de jenkins clone le repo et puis exécutez le script
L'exécution du script batch avec deux commandes msiexec provoque la fin du script juste après la fin de la première commande

commande Jenkins d'exécution de début de l'emploi du deuxième msiexec (installation), mais il se termine immediately.If i ouvrir la console d'emploi je peux voir le message « processus Descripteurs de fichiers ayant fui. " et le statut du travail: Succès



Si je cours Le même script via cmd sans jenkins cela fonctionne très bien.

setlocal enabledelayedexpansion 
IF EXIST "directory path" (
msiexec /uninstall {Product ID} /qb 
) 
pushd \\shared drive 
IF EXIST "directory path" (
msiexec /i "path to exefile" /qb 
popd 
exit 0 
) 
ELSE (
ECHO Setup Not Found in current 
exit 0 
) 
+0

Il est étrange que cela fonctionne dans cmd, à moins qu'il y ait des choses que vous ne nous montrez pas parce que la structure de votre commande est fausse. Voir [ici] (http://pastebin.com/WVJcJfUe) – Compo

+0

Non, il n'y a pas de trucs supplémentaires, j'utilise seulement ces deux commandes pour installer/désinstaller et oui si je cours même script après le clonage à travers cmd fonctionne bien – Shah

+0

vous regardez les deux exemples que j'ai posté dans le lien, aucun d'entre eux sont ce que vous avez posté et l'un d'eux est susceptible d'être correct. Je ne sais pas lequel et sans la bonne structure de débogage est impossible. – Compo

Répondre

0

Le mot-clé ELSE doit être sur la même ligne que ) de la branche TRUE de IF état séparé de ) par un espace. Le ELSE sur une ligne distincte est interprété comme le nom d'une application console à exécuter.

if exist "directory path" (
    %SystemRoot%\System32\msiexec.exe /uninstall {Product ID} /qb 
) 
pushd "\\ComputerName\ShareName\" 
if exist "directory path" (
    %SystemRoot%\System32\msiexec.exe /i "path to exefile" /qb 
) else (
    echo Setup not found in %CD%. 
) 
popd 
exit /B 0 

Astuce: Pour le débogage d'un fichier batch exécuté de l'intérieur d'une fenêtre d'invite de commande et non avec double cliquant dessus après le retrait ou de commenter toutes les lignes contenant echo off. Et n'utilisez pas EXIT sans /B car cela entraîne toujours la sortie du processus de commande entier et non seulement la sortie du traitement du fichier de traitement en cours. Le débogage d'un fichier batch dans une fenêtre d'invite de commande devient difficile si le fichier batch contient EXIT sans /B et cette commande est réellement exécutée lors de l'exécution du fichier batch car les messages d'erreur générés lors de l'exécution du fichier batch ne sont pas visibles dans ce cas.