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

时间:2010-09-02 12:39:01

标签: maven-2 hudson hudson-plugins

我有一个Hudson工作,运行maven目标。在执行maven目标之前,我已经在构建开始之前添加了一个要运行的步骤,它是一个shell脚本,它获取了我想在“目标和选项”字段中使用的版本号。

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

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

然后在构建部分下,我指向我的'根pom'。在目标和选项中,我希望能够做到这样的事情:

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

其中 build.release.version 是POM中引用的maven属性。但是,由于shell似乎没有使其变量全局化,因此它不起作用。有什么想法吗?

我唯一的一个就是安装Envfile插件并获取shell脚本将RELEASE属性写出来,然后获取插件来读取文件,但是运行所有内容的顺序可能会导致问题,似乎必须有更简单的方法...是吗?

提前致谢。

2 个答案:

答案 0 :(得分:1)

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

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

shell脚本的一般概念:

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

对于你的目标和选项,例如:

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

当然,这并不像人们想要的那样优雅,但对我们来说效果非常好,因为我们的构建被分解为几个工作开始,我们实际上可以重用第一个触发的其他工作(即,用不同的参数调用它们。)

答案 1 :(得分:0)

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

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

#!/bin/sh

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