2010-09-02 58 views
0

我有一个运行Maven目标的Hudson作业。在执行这个maven目标之前,我已经添加了一个在构建开始之前运行的步骤,它是一个shell脚本,它获取我想在“目标和选项”字段中使用的版本号。使用使用预编译shell命令获得的变量为Hudson中的Maven构建设置选项

在我的作业配置

所以,在构建环境我已经检查了配置M2额外的构建步骤盒和构建之前增加了一个shell脚本。该脚本是这样的:

export RELEASE={command to extract release version} 
echo $RELEASE 

然后根据构建节中,我指出我的“根POM”。在目标和选项我再想能够做这样的事情:

-Dbuild.release.version=${RELEASE} deploy 

build.release.version是在POM中引用的行家属性。然而,因为shell似乎没有使其变量全局化,所以它不起作用。有任何想法吗?

我唯一拥有的就是安装Envfile插件并获取shell脚本将RELEASE属性写入文件,然后让插件读取该文件,但运行一切的顺序可能会导致问题而且似乎必须有更简单的方法...在那里?

在此先感谢。

回答

0

当你说它不起作用时,你的意思是你的RELEASE变量没有传递给maven命令?我相信问题在于,默认情况下,shell脚本的每一行都是单独执行的,因此环境变量会丢失。

如果你想整个shell脚本来执行,如果它是一个脚本文件,使第一线:

#!/bin/sh 

我觉得这是在旁边的shell脚本生成步骤的帮助信息中描述(和如果我错了,那是寻找正确语法的好地方)。

+0

您好,感谢您的答复 - 我试过了,但得到的错误: 大厦主 [工作区] $/bin/sh的C:\ DOCUME〜1 \ USR \ LOCALS〜1 \ TEMP \ 1 \ hudson5860957589544318456 .sh 致命错误:命令执行失败 java.io.IOException:无法运行程序“/ bin/sh”(在目录“E:\ hudson \ jobs \ MyJob \ workspace”中):CreateProcess error = 3,系统找不到指定的路径 \t在java.lang.ProcessBuilder.start(ProcessBuilder.java:459) \t \t ... 引起:产生java.io.IOException:CreateProcess的错误= 3,系统无法找到路径指定 \t at java.lang.ProcessImpl.create(Native Method) \t ... 在窗口框上运行 – 2010-09-03 10:44:56

+0

想我现在明白了 - http://hudson.361315.n4.nabble.com/sh-in- cygwin-td368129.html – 2010-09-03 13:41:48

+0

是的,仍然无法正常工作。使用Hudson版本1.371 – 2010-09-03 14:11:53

1

我最近也想做同样的事情,但是AFAIK无法将预构建shell的值导出到作业环境中。如果有这个Hudson插件,我错过了它。

但是,有什么工作是类似于您所建议的设置:让预构建shell脚本将所需值写入工作区中的属性文件,然后使用触发器另一个实际完成工作的工作(在你的情况下,调用Maven工作)。该插件可以配置为读取它从属性文件传递的参数。所以第一个作业只有shell脚本和构建后触发器,而第二个人做了实际的工作,具有可用的环境变量的正确参数。

shell脚本的总体思路:

echo "foo=bar 
baz=`somecmd`" > build.properties 

并为您的目标和方案,是这样的:

-Dbuild.release.version=${foo} deploy 

当然,这是不优雅的一个可能想不过果然奏效对我们来说是好的,因为我们的构建被分解成几个作业,我们可以重新使用第一个作业触发的其他作业(即用不同的参数调用它们)。

相关问题