Maven 2 为内置hudson设置环境变量

Maven 2 为内置hudson设置环境变量,maven-2,hudson,environment-variables,Maven 2,Hudson,Environment Variables,我正试图将一个maven2项目持续集成到hudson中。 该项目使用selenium进行一些集成测试。 Hudson运行的是无头linux。 我正在使用xvfb为selenium启动x服务器会话 为了运行测试,我需要导出一个名为DISPLAY的环境变量。 e、 g 但是,我不想在框上设置变量,因为它会影响所有构建。 我曾尝试使用m2 extra steps插件执行一个shell,但它不起作用,因为它是在一个单独的bash文件中执行的,这意味着环境变量不会持久化 是否有办法从hudson注册环境变

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

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

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


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

hudson中有一个新功能,允许您指定。这看起来像是你想要的

但请注意:

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

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


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


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

根据我对公认答案的回答,以下是我的发现

小心未初始化的变量

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

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

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

然而,如果我这样做了

export F00=/usr/bin/fiddledede
那么导出的变量将是

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

当我最初把它作为一个测试运行时,我还没有解决这个问题——因此我认为参数功能不接受外部环境变量,而实际上它是(它们只是必须包含一些内容)。

fyi,我今天发布Hudson(假设java.net恢复足够我这么做!)-它的行为类似于参数化构建功能,但具有更简单的UI(仅用于输入的文本区域-键/值对由换行符分隔),并且不需要在构建时提供参数值。

我发现使用
xvfb run
运行selenium比设置显示更可靠,所以这可能对你有用。因此:

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>

org.codehaus.mojo

我不相信这确实回答了人们提出的问题——如何在调用Maven时在同一个shell中设置环境变量?这些参数是非常有用的,但它不是用户想要的-它也不允许您编辑当前存在的环境变量,即您无法让它自己调用。例如,export PATH=/usr/bin/foo:$PATH将无法工作,因为它无法识别$PATH@Spedge您正在合并环境变量的读取和设置。问题是如何设置变量,所描述的机制正是这样做的。在您的示例中,您正在进行设置和读取,这不是要求的。@Rich Seller-抱歉,先生。我已经在这方面做了一些工作,并将在下面的回答中详细说明(因为评论中没有足够的空间)。如何添加(未设置)对于环境变量,如
PATH
?@Sridhar,我建议开始一个全新的问题。@Sridhar:如果新变量值在当前构建步骤中仍然有效,则无法解决此问题。
<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>