我有一个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属性写出来,然后获取插件来读取文件,但是运行所有内容的顺序可能会导致问题,似乎必须有更简单的方法...是吗?
提前致谢。
答案 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脚本构建步骤中描述的(如果我错了,那么这是寻找正确语法的好地方)。