CI Jenkins is running on CentOS headless machine under non-root user.
Xvfb packege is installed, when I try the hint from How can I specify a display?, i.e. manually set in the console
export DISPLAY=127.0.0.1:0
Xvfb :0
firefox &
and it works - the Xvfb output displays some firefox requests, Firefox output to the console.
When I run the same thing from maven, nothing happens. Please review my pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>somegrouppegas</groupId>
<artifactId>pegas</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>pegas</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<thucydides.version>0.9.273</thucydides.version>
<thucydides.jbehave.version>0.9.273</thucydides.jbehave.version>
<webdriver.driver>firefox</webdriver.driver>
<actualVersion>0.9.7.1-BETA</actualVersion>
</properties>
<dependencies>
<dependency>
<groupId>net.thucydides</groupId>
<artifactId>thucydides-core</artifactId>
<version>${thucydides.version}</version>
</dependency>
<dependency>
<groupId>net.thucydides</groupId>
<artifactId>thucydides-junit</artifactId>
<version>${thucydides.version}</version>
</dependency>
<dependency>
<groupId>net.thucydides</groupId>
<artifactId>thucydides-jbehave-plugin</artifactId>
<version>${thucydides.jbehave.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>org.easytesting</groupId>
<artifactId>fest-assert</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.googlecode.lambdaj</groupId>
<artifactId>lambdaj</artifactId>
<version>2.3.3</version>
</dependency>
<dependency>
<groupId>org.apache.ftpserver</groupId>
<artifactId>ftpserver-core</artifactId>
<version>1.0.6</version>
</dependency>
<dependency>
<groupId>com.javadocmd</groupId>
<artifactId>simplelatlng</artifactId>
<version>RELEASE</version>
</dependency>
<!--<dependency>
<groupId>com.github.arachnidium</groupId>
<artifactId>arachnidium-app-model</artifactId>
<version>${actualVersion}</version>
</dependency> -->
</dependencies>
<build>
<plugins>
<!--
XMInd plugin is not needed right now; it will be added after it will be improved
<plugin>
<groupId>mavenplugintest</groupId>
<artifactId>mavenplugintest</artifactId>
<version>1.0-SNAPSHOT</version>
<configuration>
<xmindpath>parse.xmind</xmindpath>
</configuration>
<executions>
<execution>
<id>generateStoriesFromXMind</id>
<phase>validate</phase>
<goals>
<goal>generateStoriesFromXMind</goal>
</goals>
</execution>
<execution>
<id>generateXMindFromTestResults</id>
<phase>post-integration-test</phase>
<goals>
<goal>generateXMindFromTestResults</goal>
</goals>
</execution>
</executions>
</plugin> -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.17</version>
<configuration>
<forkCount>0</forkCount>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.17</version>
<configuration>
<forkCount>0</forkCount>
<includes>
<include>**/*Test.java</include>
<include>**/Test*.java</include>
<include>**/When*.java</include>
<include>**/*TestSuite.java</include>
</includes>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<!--<compilerArguments>
<endorseddirs>${endorsed.dir}</endorseddirs>
</compilerArguments> -->
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.9</version>
</plugin>
<plugin>
<groupId>net.thucydides.maven.plugins</groupId>
<artifactId>maven-thucydides-plugin</artifactId>
<version>${thucydides.version}</version>
<executions>
<execution>
<id>thucydides-reports</id>
<phase>post-integration-test</phase>
<goals>
<goal>aggregate</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>maven2</id>
<activation>
<file>
<missing>${basedir}</missing>
</file>
</activation>
<reporting>
<plugins>
<plugin>
<groupId>net.thucydides.maven.plugins</groupId>
<artifactId>maven-thucydides-plugin</artifactId>
<version>${thucydides.version}</version>
</plugin>
</plugins>
</reporting>
</profile>
<profile>
<id>jenkins</id>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>selenium-maven-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<id>xvfb</id>
<phase>pre-integration-test</phase>
<goals>
<goal>xvfb</goal>
</goals>
<configuration>
<display>:0</display>
</configuration>
</execution>
<execution>
<id>start</id>
<phase>pre-integration-test</phase>
<goals>
<goal>start-server</goal>
</goals>
<configuration>
<background>true</background>
<logOutput>true</logOutput>
</configuration>
</execution>
<execution>
<id>stop</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop-server</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>maven3</id>
<activation>
<file>
<exists>${basedir}</exists>
</file>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>3.2</version>
<configuration>
<reportPlugins>
<plugin>
<groupId>net.thucydides.maven.plugins</groupId>
<artifactId>maven-thucydides-plugin</artifactId>
<version>${thucydides.version}</version>
</plugin>
</reportPlugins>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
The firefox and Xvfb utilities are chowned for the jenkins linux user and chmoded 777, so the permissions are not the root of the problem.
export DISPLAY=127.0.0.1:0
Is set to pre-build actions. Xvfb should be started by the maven selenium plugin and it is started according to the mavn output and own Xvfb log.
I'd like to know how Thucydides/Selenium defines how to find the Firefox binaries to run? May be they should be explicitly configured in jenkins profile somehow?
Actually, I couldn't resolve the problem in the way I liked, because despite of any combinations of DISPLAY variables, attributing files and binaries to the jenkins user and back to root, it was impossible to run Xvfb from the maven plugin config. However, the Xvfb Jenkins plugin worked fine! And if was more perfect for me, since I no longer need different mvn profiles to run on the local machine and on the CI (Xvfb run for the plugin was stored as jenkins profile),