Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jenkins启动了一个包含ANT的Perl脚本,但ANT无法读取.properties文件_Perl_Ant_Jenkins - Fatal编程技术网

Jenkins启动了一个包含ANT的Perl脚本,但ANT无法读取.properties文件

Jenkins启动了一个包含ANT的Perl脚本,但ANT无法读取.properties文件,perl,ant,jenkins,Perl,Ant,Jenkins,之前,我让Jenkins启动了一个perl构建脚本,在脚本编写过程中的某个时候,它会打开一个启动ANT作业的.bat文件。我正试图整合并删除.bat文件,并直接从perl脚本启动ANT。我已经成功地做到了这一点,但问题是ANT脚本为其变量查看的.properties文件不再像.bat文件启动ANT脚本时那样正确导入 目前,我被称为“Exec”(“ant-buildfile C:\project\buildfile.xml”),它会触发ant,但返回时会出现一个错误,“找不到${script.di

之前,我让Jenkins启动了一个perl构建脚本,在脚本编写过程中的某个时候,它会打开一个启动ANT作业的.bat文件。我正试图整合并删除.bat文件,并直接从perl脚本启动ANT。我已经成功地做到了这一点,但问题是ANT脚本为其变量查看的.properties文件不再像.bat文件启动ANT脚本时那样正确导入

目前,我被称为“Exec”(“ant-buildfile C:\project\buildfile.xml”),它会触发ant,但返回时会出现一个错误,“找不到${script.dir}/barbuildfile.xml”正在与生成文件位于同一目录中的.properties文件中定义。当它由.bat文件启动时,它可以完美地工作,但是只要通过Perl调用它,它就会失败。有什么原因吗?或者更好的是,如何修复它

我还尝试通过启动来强制它加载属性文件。“Exec(“ant-buildfile C:\project\buildfile.xml-Dpropertyfile=C:\project\build.properties”)”并收到相同的错误

编辑: 这是.bat文件

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
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

首先,请考虑从詹金斯直接调用蚂蚁 如所述,通过专用的

其次,按照当前的编写方式,每个
system(…)
命令都在自己的CMD窗口中运行,
不知道之前运行的其他系统命令
(以前的那些命令已经超出范围),例如-

  • 在“my_setup.bat”中所做的更改对“ANT”不可用:

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

  • ant知道“run_my_ant.bat”中的设置,假设ant是从bat文件中调用的,
    在进行更改后:

    exec("run_my_ant.bat");
    
要克服此问题,请使用
%ENV
散列在您的环境中设置变量,
以使它们可用于脚本中的其他命令的方式:

$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 ...");
另见此处:


祝你好运

为什么要从perl脚本调用ant?Jenkins有一个新的应用程序,它增加了Ant支持。如果您的脚本生成或修改构建文件,您应该在配置中设置两个操作。一个用于Perl脚本,另一个用于Ant构建。这可能是最好的选择。我试图将所有内容整合到同一个位置,但是如果我不能让它在PERL中正常工作,这可能是最好的选择。哎呀,我在我的原始帖子中输入了错误的内容,我使用了你提到的双反斜杠。出于某种原因,它实际上没有得到该属性文件中填充的任何值。我也验证了路径是否正确。我还检查并确保.bat文件中设置的所有内容当前都在perl脚本中设置。在.bat文件中,它正在执行代码调用C:\Program Files\IBM\MQSI\7.0\bin\mqsiprofile.cmd set project。name=%1 set environment=%2 set version。tag=$3 Call ant-buildfile C:\path\build.xml我在perl脚本中可以做什么系统(“调用C:\\Program Files\\IBM\\MQSI\\7.0\\bin\\mqsiprofile.cmd”);系统(“set project.name=$project”);系统(“设置环境=$environment”);系统(“set version.tag=$version”);exec(“ant-buildfile C:\\path\\build.xml”);是的,您需要在同一脚本中包含所有4个命令,并使用单个“系统”命令调用它们。可以通过添加系统(“设置”)来确认这一点;在您当前拥有的每个“系统”命令之后-它将显示安装操作未注册。因此,我在同一脚本中拥有所有4个命令,并且它似乎没有修复任何问题。我又做错什么了?我想我把自己搞糊涂了,哈哈!继续并添加了.bat文件以及perl中的操作
$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 ...");