Maven 2 使用使用预构建shell命令获得的变量为Hudson中的Maven build设置选项

Maven 2 使用使用预构建shell命令获得的变量为Hudson中的Maven build设置选项,maven-2,hudson,hudson-plugins,Maven 2,Hudson,Hudson Plugins,我有一份哈德逊的工作,有一个马文的目标。在执行这个maven目标之前,我添加了一个在构建开始之前运行的步骤,它是一个shell脚本,用于获取我要在“目标和选项”字段中使用的版本号 因此,在我的作业配置中,在构建环境下,我选中了配置M2额外构建步骤框,并在构建之前添加了一个shell脚本。脚本如下所示: export RELEASE={command to extract release version} echo $RELEASE -Dbuild.release.version=${RELEA

我有一份哈德逊的工作,有一个马文的目标。在执行这个maven目标之前,我添加了一个在构建开始之前运行的步骤,它是一个shell脚本,用于获取我要在“目标和选项”字段中使用的版本号

因此,在我的作业配置中,在构建环境下,我选中了配置M2额外构建步骤框,并在构建之前添加了一个shell脚本。脚本如下所示:

export RELEASE={command to extract release version}
echo $RELEASE
-Dbuild.release.version=${RELEASE} deploy
然后在构建部分下,我指向我的“根pom”。在目标和选项中,我希望能够做到以下几点:

export RELEASE={command to extract release version}
echo $RELEASE
-Dbuild.release.version=${RELEASE} deploy
其中build.release.version是POM中引用的maven属性。然而,由于shell似乎没有将其变量设置为全局变量,因此它不起作用。有什么想法吗

我唯一能做的就是安装插件,让shell脚本将RELEASE属性写到一个文件中,然后让插件读取该文件,但运行的顺序可能会导致问题,而且似乎必须有更简单的方法……是吗


提前感谢。

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

如果希望整个shell脚本像执行一个脚本文件一样执行,请执行第一行:

#!/bin/sh

我认为这在shell脚本构建步骤旁边的帮助信息中有描述(如果我错了,这是一个寻找正确语法的好地方)。

我最近也想做同样的事情,但恐怕无法将值从预构建shell导出到作业环境。如果有一个哈德逊插件,我错过了

然而,实际起作用的是与您建议的类似的设置:让预构建shell脚本将所需的值写入工作区中的属性文件,然后使用触发另一个实际执行该工作的作业(在您的示例中,调用Maven作业)。插件可以配置为从属性文件读取它传递的参数。因此,第一个作业只有shell脚本和构建后触发器,第二个作业执行实际工作,具有作为环境变量可用的正确参数

shell脚本的总体思路:

echo "foo=bar
baz=`somecmd`" > build.properties
对于你的目标和选择,比如:

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

诚然,这并不像人们所希望的那样优雅,但对我们来说效果非常好,因为我们的构建从一开始就被分为几个作业,我们实际上可以重用第一个作业触发的其他作业(也就是说,用不同的参数调用它们)。

嗨,谢谢你的回答-我尝试过了,但得到了错误:在master上构建[workspace]$/bin/sh c:\DOCUME~1\usr\LOCALS~1\Temp\1\hudson5860957589544318456.sh致命:命令执行失败java.io.IOException:Cannot run program”/bin/sh(在目录“E:\hudson\jobs\MyJob\workspace”):createprocesserror=3,系统找不到java.lang.ProcessBuilder.start(ProcessBuilder.java:459)指定的路径…原因:java.io.IOException:CreateProcess error=3,系统找不到在java.lang.ProcessImpl.create(本机方法)处指定的路径…运行在windows boxThink I now上-