9

我正在尝试将 maven2 项目置于哈德逊的持续集成之下。该项目使用 selenium 进行一些集成测试。Hudson 在无头 linux 上运行。我正在使用 xvfb 为 selenium 启动 ax 服务器会话。

为了运行测试,我需要导出一个名为 DISPLAY 的环境变量。例如

export DISPLAY=:99

但是,我不想在盒子上设置变量,因为它会影响所有构建。我曾尝试使用 m2 extra steps 插件执行 shell,但它不起作用,因为它是在单独的 bash 文件中执行的,这意味着环境变量不会被持久化。

有没有办法从哈德森注册环境变量。

4

6 回答 6

10

仅供参考,我今天发布了用于 Hudson 的 setenv 插件(假设 java.net 恢复到足以让我这样做!) - 它的行为类似于参数化构建功能,但 UI 更简单(只是一个用于输入的文本区域 - 键/值对由换行符分隔)并且无需在构建时为参数提供值。

于 2009-09-29T22:23:07.350 回答
4

Hudson 中有一个新功能允许您为构建指定参数。这看起来像你想要的。

虽然请注意:

警告 这仍然是一个非常年轻的功能,因此感谢您的反馈

...

参数[s] 可用作环境参数。因此,例如 shell ($FOO, %FOO%) 或 Ant (${env.FOO}) 可以访问这些值。

于 2009-08-25T18:28:34.560 回答
3

Hudson 的节点属性在这里会做得很好。但是,如果您正在寻找一种更自动化的分配屏幕编号的方法,您需要做更多的工作,可能会绑定到port-allocator 插件,或者编写一个新的 BuildWrapper 插件来自动启动 xvfb,并且代表构建设置 SCREEN 环境变量。

如果你愿意切换到不同的 X 服务器进行测试,你可以试试 Hudson 的Xvnc 插件。它将自动启动 vncserver,并设置 SCREEN 环境变量。它还可以在测试完成时截取屏幕截图,并在作业的 Hudson 页面中显示。

于 2009-08-25T19:32:49.843 回答
1

我发现运行 seleniumxvfb-run比设置 DISPLAY 更可靠,所以这可能对你有用。所以:

xvfb-run java -jar selenium-server.jar
于 2009-12-20T00:02:17.300 回答
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

于 2010-05-18T19:38:12.217 回答
0

根据我对已接受答案的回复,这是我的发现。

注意未初始化的变量

在使用 Hudson 中的参数化功能时,您可以将环境变量附加到字符串的末尾——前提是它们首先包含某些内容。

例如,如果环境变量 $FOO 为空,并且您要在字符串参数中使用以下行...

/usr/bin/ladeda/:$F00

然后环境变量将读取 /usr/bin/ladeda/:$F00。

但是,如果我这样做了

export F00=/usr/bin/fiddledede

那么导出的变量将是....

/usr/bin/ladeda/:/usr/bin/fiddledede

当我最初将其作为测试运行时,我没有解决这个问题 - 因此认为参数功能不接受外部环境变量,而实际上是(它们只需要包含一些东西)。

于 2009-09-07T13:04:31.790 回答