在hudson中为build构建环境变量

问题描述 投票:9回答:6

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

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

export DISPLAY=:99

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

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

maven-2 hudson environment-variables
6个回答
4
投票

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

虽然注意到:

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

...

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


10
投票

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


3
投票

Hudson的Node Properties在这里做得很好。但是如果你正在寻找一种更自动化的方式来分配屏幕编号,你需要做更多的工作,可能会加入port-allocator plugin,或编写一个新的BuildWrapper插件,它会自动启动xvfb,并设置屏幕代表构建的环境变量。

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


1
投票

我发现使用xvfb-run运行selenium比设置DISPLAY更可靠,所以这可能适合你。所以:

xvfb-run java -jar selenium-server.jar

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


0
投票

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

注意未初始化的变量

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

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

/usr/bin/ladeda/:$F00

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

但是,如果我这样做了

export F00=/usr/bin/fiddledede

然后导出的变量将是....

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

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

© www.soinside.com 2019 - 2024. All rights reserved.