我正在尝试将一个maven2项目放在hudson中持续集成。 该项目使用硒进行一些集成测试。 Hudson正在运行无头Linux。 我正在使用xvfb为selenium启动x服务器会话。
为了运行测试,我需要导出一个名为DISPLAY的环境变量。 e.g。
export DISPLAY=:99
但是,我不想在框中设置变量,因为它会影响所有构建。 我尝试使用m2 extra steps插件执行shell执行,但它不起作用,因为它在单独的bash文件中执行,这意味着环境变量不会持久存在。
有没有办法从hudson注册环境变量。
答案 0 :(得分:10)
fyi,我今天正在为Hudson发布the setenv plugin(假设java.net恢复到足以让我这样做了!) - 它的行为类似于参数化的构建功能,但具有更简单的UI(只是一个textarea)输入 - 键/值对由换行符分隔),无需在构建时提供参数值。
答案 1 :(得分:4)
Hudson中有一个新功能允许您指定parameters for builds。看起来它就像你想做的那样。
虽然注意到:
...
参数[s]可用作环境参数。所以例如shell($ FOO,%FOO%)或Ant($ {env.FOO})可以访问这些值。
答案 2 :(得分:3)
Hudson的Node Properties在这里做得很好。但是如果你正在寻找一种更自动化的方式来分配屏幕编号,你需要做更多的工作,或许可以联系port-allocator plugin,或者编写一个自动启动xvfb的新BuildWrapper插件,并代表构建设置SCREEN环境变量。
如果您愿意切换到其他X服务器进行测试,可以尝试Xvnc plugin用于Hudson。它将自动启动vncserver,并设置SCREEN环境变量。它还能够在测试完成时截取屏幕截图,并在作业的Hudson页面中显示。
答案 3 :(得分:1)
我发现使用xvfb-run
运行selenium比设置DISPLAY更可靠,所以这可能适合你。所以:
xvfb-run java -jar selenium-server.jar
答案 4 :(得分:1)
您是否尝试过使用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
答案 5 :(得分:0)
根据我对接受的答案的回答,这是我的发现。
注意未初始化的变量
在Hudson中使用参数化功能时,可以将环境变量附加到字符串的末尾 - 只要它们首先包含某些内容。
例如,如果环境变量$ FOO为空,并且您在字符串参数中使用以下行...
/usr/bin/ladeda/:$F00
然后环境变量将读取/ usr / bin / ladeda /:$ F00。
然而,如果我做了
export F00=/usr/bin/fiddledede
然后导出的变量就是....
/usr/bin/ladeda/:/usr/bin/fiddledede
当我最初将其作为测试运行时,我没有解决这个问题 - 因此认为参数功能不接受外部环境变量,实际上它们(它们只需要包含某些内容)。