在hudson中为build构建环境变量
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在hudson中为build构建环境变量相关的知识,希望对你有一定的参考价值。
我试图将一个maven2项目放在哈德森的持续集成中。该项目使用硒进行一些集成测试。 Hudson正在运行无头Linux。我正在使用xvfb为selenium启动x服务器会话。
为了运行测试,我需要导出一个名为DISPLAY的环境变量。例如
export DISPLAY=:99
但是,我不想在框中设置变量,因为它会影响所有构建。我尝试使用m2额外步骤插件执行shell执行,但它不起作用,因为它在单独的bash文件中执行,这意味着环境变量不会持久化。
有没有办法从hudson注册环境变量。
Hudson中有一个新功能,允许您指定parameters for builds。这看起来像你想做的。
虽然注意到:
...
参数[s]可用作环境参数。所以例如shell($ FOO,%FOO%)或Ant($ {env.FOO})可以访问这些值。
fyi,我今天正在为Hudson发布the setenv plugin(假设java.net恢复到足以让我这样做了!) - 它的行为类似于参数化构建功能,但具有更简单的UI(只是输入的textarea - 键/值对由换行符分隔),无需在构建时提供参数值。
Hudson的Node Properties在这里做得很好。但是如果你正在寻找一种更自动化的方式来分配屏幕编号,你需要做更多的工作,可能会加入port-allocator plugin,或编写一个新的BuildWrapper插件,它会自动启动xvfb,并设置屏幕代表构建的环境变量。
如果您愿意切换到不同的X服务器进行测试,可以尝试使用Xvnc plugin进行Hudson测试。它将自动启动vncserver,并设置SCREEN环境变量。它还能够在测试完成时截取屏幕截图,并在作业的Hudson页面中显示。
我发现使用xvfb-run
运行selenium比设置DISPLAY更可靠,所以这可能适合你。所以:
xvfb-run java -jar selenium-server.jar
你试过使用selenium maven插件吗?
该插件可以配置为启动Xvfb,运行测试然后停止它。
使用这个pom.xml配置:
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>selenium-maven-plugin</artifactId>
<executions>
<execution>
<id>xvfb</id>
<phase>pre-integration-test</phase>
<goals>
<goal>xvfb</goal>
</goals>
</execution>
<execution>
<id>selenium</id>
<phase>pre-integration-test</phase>
<goals>
<goal>start-server</goal>
</goals>
<configuration>
<background>true</background>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
细节在这里:http://mojo.codehaus.org/selenium-maven-plugin/examples/headless-with-xvfb.html
根据我对接受的答案的回答,这是我的发现。
注意未初始化的变量
在Hudson中使用参数化功能时,可以将环境变量附加到字符串的末尾 - 只要它们首先包含某些内容即可。
例如,如果环境变量$ FOO为空,并且您在字符串参数中使用以下行...
/usr/bin/ladeda/:$F00
然后环境变量将读取/ usr / bin / ladeda /:$ F00。
但是,如果我这样做了
export F00=/usr/bin/fiddledede
然后导出的变量将是....
/usr/bin/ladeda/:/usr/bin/fiddledede
当我最初将其作为测试运行时,我没有解决这个问题 - 因此认为参数功能不接受外部环境变量,实际上它们(它们只需要包含某些内容)。
以上是关于在hudson中为build构建环境变量的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Jenkins/Hudson 中以编程方式设置环境变量?
hudson用SVN插件下载代码,用ant插件打包, 用SSH插件部署