1

以前我让 Jenkins 启动了一个 perl 构建脚本,在脚本执行过程中的某个时间点会打开一个 .bat 文件来启动我们的 ANT 作业。我正在尝试合并和删除 .bat 文件并直接从 perl 脚本启动 ANT。我已经能够成功地做到这一点,但问题是 ANT 脚本查看其变量的 .properties 文件不再像 .bat 文件启动 ANT 脚本时那样正确导入。

目前我只是被称为“Exec(“ant -buildfile C:\project\buildfile.xml”),它会触发蚂蚁,但它会返回一个错误,“找不到 ${script.dir}/barbuildfile .xml”。“script.dir”被定义在一个 .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
4

1 回答 1

0

首先,请考虑
通过专用的ANT 插件直接从 Jenkins 调用 ANT ,如Demnogonis 所述

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

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

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

    或者

    system("my_setup.bat");
    # at this point, 'my_setup.bat' is forgotten
    exec("ANT ...");
    
  • 'run_my_ant.bat' 中的设置对于 ANT 来说是已知的,假设在 BAT 文件中调用 ANT,
    在进行更改后:

    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 ...");

另请参阅此处:

祝你好运!

于 2012-10-26T07:58:13.027 回答