2012-10-25 2 views
1

Auparavant, Jenkins lançait un script de génération perl qui, à un moment donné du script, ouvrait un fichier .bat qui lançait notre Emplois ANT. J'essaie de consolider et de se débarrasser des fichiers .bat et lancer ANT directement à partir du script Perl. J'ai réussi à le faire, mais le problème est que le fichier .properties que le script ANT a examiné pour ses variables n'est plus importé correctement comme c'était le cas lorsque le fichier .bat a lancé le script ANT.Jenkins lance un script Perl qui contient ANT, mais ANT ne peut pas lire un fichier .properties

Actuellement, je suis juste appelé un "Exec (" ant-buildfile C: \ projet \ buildfile.xml ") et cela déclenche la fourmi, mais il revient avec une erreur," Impossible de trouver $ {script. Le fichier "script.dir" est défini dans un fichier .properties situé dans le même répertoire que les fichiers de construction, ce qui fonctionne parfaitement lorsqu'il est lancé par le fichier .bat, mais il échoue chaque fois que il est appelé par Perl.Pour quelle raison? Ou mieux encore, comment le résoudre?

J'ai également essayé de le forcer à charger le fichier de propriétés en lançant. "Exec (" ant -buildfile C: \ projet \ buildfile. xml -Dpropertyfile = C: \ projet \ build.properties ")" et recevoir la même erreur

Edit: Ce est the.bat fichier

set project.name=%1 

set environment=%2 

set version.tag=%3 

set build.list=%4 

set JAVA_HOME=C:\ProgramFiles\IBM\jdk 

set ANT_HOME=C:\ProgramFiles\IBM\IMShared\plugins\org.apache.ant_1.7.1.v20100518-1145 

set PATH=C:\Program Files (x86)\IBM\IMShared\plugins\org.apache.ant_1.7.1.v20100518-1145\bin 


CALL ant -buildfile C:\scripts\build_service.xml 

script Perl:

system("set project.name=$project"); 
system("set environment=$environment"); 
system("set version.tag=$version"); 
system("set build.list=$service"); 
system("set JAVA_HOME=C:\ProgramFiles\IBM\jdk"); 
system("set ANT_HOME=C:\ProgramFiles\IBM\IMShared\plugins\org.apache.ant_1.7.1.v20100518-1145"); 
system("set PATH=C:\Program Files (x86)\IBM\IMShared\plugins\org.apache.ant_1.7.1.v20100518-1145\bin"); 
exec("CALL ant -buildfile C:\\scripts\\build_service.xml 
+2

Pourquoi appelles-tu ant du script perl? Jenkins a un [Plugin] (https://wiki.jenkins-ci.org/display/JENKINS/Ant+Plugin), qui ajoute le support Ant. Si votre script génère ou modifie le fichier de construction, vous devez simplement définir deux actions dans votre configuration. Un pour le script Perl et après celui pour la construction Ant. – Demnogonis

+0

Cela pourrait être la meilleure route à prendre. J'essaie de consolider et d'avoir tout au même endroit, mais si je ne peux pas le faire fonctionner correctement dans PERL c'est probablement la meilleure option. – Heuristic

Répondre

0

Tout d'abord, s'il vous plaît envisager d'appeler ANT directement de Jenkins
via le dédié ANT Plugin, comme mentionné par Demnogonis.

En second lieu, la façon dont il est actuellement écrit, chaque system(...) commande est exécutée dans sa propre fenêtre CMD,
sans aucune connaissance de l'autre système commandes qui a eu lieu avant qu'il ne
(les commandes précédentes déjà allés hors -scope), par exemple -

  • Les modifications apportées dans 'my_setup.bat' ne sont pas disponibles à 'ANT':

    exec("my_setup.bat"); 
    # at this point, 'my_setup.bat' is forgotten 
    exec("ANT ..."); 
    

    ou

    system("my_setup.bat"); 
    # at this point, 'my_setup.bat' is forgotten 
    exec("ANT ..."); 
    
  • Setup dans « run_my_ant.chauve-souris » sont connus pour ANT, en supposant ANT est appelé à partir du fichier BAT,
    après que les modifications ont été apportées:

    exec("run_my_ant.bat"); 
    

Pour surmonter ce problème, utilisez le hachage %ENV pour définir la variable dans votre environnement,
d'une manière qui les rendre disponibles pour d'autres commandes dans votre script:

$ENV{'project.name'} = $project; 
$ENV{'environment'} = $environment; 
$ENV{'version.tag'} = $version; 
$ENV{'build.list'} = $service; 
$ENV{'JAVA_HOME'} = "C:\\ProgramFiles\\IBM\\jdk"; 
$ENV{'ANT_HOME'}  = "C:\\ProgramFiles\\IBM\\IMShared\\plugins\\org.apache.ant_1.7.1.v20100518-1145"; 
$ENV{'PATH'}   = "C:\\Program Files (x86)\\IBM\\IMShared\\plugins\\org.apache.ant_1.7.1.v20100518-1145\\bin"; 
exec("CALL ant -buildfile C:\\scripts\\build_service.xml ..."); 

Voir aussi ici:

Bonne chance!

+0

Oups, je l'ai tapé mal dans mon message original, j'utilise les doubles barres obliques inverses comme vous l'avez mentionné. Pour une raison quelconque, il n'obtient aucune des valeurs renseignées dans ce fichier de propriétés. J'ai vérifié que le chemin est correct aussi. J'ai également vérifié et vérifié que tout ce qui est en train d'être défini dans le fichier .bat est actuellement défini dans le script perl. – Heuristic

+0

dans le fichier .bat qu'il faisait Code * * Appel C: \ Program Files \ IBM \ MQSI \ 7.0 \ bin \ mqsiprofile.cmd Set project.name =% 1 Set environemnt = 2% Set version.tag = $ 3 Appeler ant -buildfile c: \ path \ build.xml Ce que je peux dans mon système de script perl ("appeler C: \\ Program Files \\ IBM \\ MQSI \\ 7.0 \\ bin \\ mqsiprofile .cmd "); système ("set project.name = $ project"); système ("set environment = $ environemnt"); système ("set version.tag = $ version"); exec ("ant -buildfile C: \\ chemin \\ build.xml"); – Heuristic

+0

Oui, vous devez avoir les 4 commandes dans le même script, et les appeler avec une seule commande 'system'. Peut confirmer ceci en ajoutant le système ("SET"); après chaque commande 'système' que vous avez actuellement - cela montrera que les actions d'installation ne sont pas enregistrées. – Gonen

Questions connexes