在hudson中为build构建环境变量

时间:2009-08-25 18:11:49

标签: maven-2 hudson environment-variables

我正在尝试将一个maven2项目放在hudson中持续集成。 该项目使用硒进行一些集成测试。 Hudson正在运行无头Linux。 我正在使用xvfb为selenium启动x服务器会话。

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

export DISPLAY=:99

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

有没有办法从hudson注册环境变量。

6 个答案:

答案 0 :(得分:10)

fyi,我今天正在为Hudson发布the setenv plugin(假设java.net恢复到足以让我这样做了!) - 它的行为类似于参数化的构建功能,但具有更简单的UI(只是一个textarea)输入 - 键/值对由换行符分隔),无需在构建时提供参数值。

答案 1 :(得分:4)

Hudson中有一个新功能允许您指定parameters for builds。看起来它就像你想做的那样。

虽然注意到:

  

warning    这仍然是一个非常年轻的功能,所以反馈意见

     

...

     

参数[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

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