3

Arquillian webdriverの抽出中にディレクトリを作成できないか、Javaによって存在しないと考えられるため、gitlab.comのGitLab CI共有ランナー(MCVEはhttps://gitlab.com/krichter/gitlab-ci-file-creation、ログはhttps://gitlab.com/krichter/gitlab-ci-file-creation/-/jobs/40064276)でローカルで正常に動作しません。詳細は下記):Arquillian Drone機能テストがGitLab CIで動作しないのはなぜですか?

Nov 13, 2017 7:31:32 AM org.glassfish.deployment.admin.DeployCommand execute 
INFO: 664320b4-384a-414a-b0b4-546937428842 was successfully deployed in 7,496 milliseconds. 
Nov 13, 2017 7:31:33 AM org.arquillian.spacelift.Spacelift$SpaceliftInstance <init> 
INFO: Initialized Spacelift from defaults, workspace: /builds/krichter/gitlab-ci-file-creation, cache: /root/.spacelift/cache 
Drone: downloading phantomjs-2.1.1-linux-x86_64.tar.bz2 from https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2 to /root/.arquillian/drone/phantomjs/2.1.1/phantomjs-2.1.1-linux-x86_64.tar.bz2 
................ 
Nov 13, 2017 7:31:34 AM org.jboss.arquillian.core.impl.ObserverImpl resolveArguments 
WARNING: Argument 1 for UpdateTestResultBeforeAfter.update is null. It won't be invoked. 
Nov 13, 2017 7:31:34 AM org.jboss.arquillian.core.impl.ObserverImpl resolveArguments 
WARNING: Argument 1 for UpdateTestResultBeforeAfter.update is null. It won't be invoked. 
Nov 13, 2017 7:31:34 AM org.jboss.arquillian.core.impl.ObserverImpl resolveArguments 
WARNING: Argument 1 for ReusableRemoteWebDriverExtension.destroyLastRemoteWebDriver is null. It won't be invoked. 
Nov 13, 2017 7:31:35 AM com.sun.enterprise.admin.cli.embeddable.DeployerImpl undeploy 
INFO: 664320b4-384a-414a-b0b4-546937428842 was successfully undeployed 
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 19.022 sec <<< FAILURE! - in richtercloud.gitlab.ci.file.creation.GitLabCIIT 
testSomething(richtercloud.gitlab.ci.file.creation.GitLabCIIT) Time elapsed: 2.195 sec <<< ERROR! 
java.lang.IllegalStateException: Something bad happened when Drone was trying to download and prepare a binary. For more information see the cause. 
    at org.jboss.arquillian.drone.webdriver.binary.handler.AbstractBinaryHandler.checkAndSetBinary(AbstractBinaryHandler.java:62) 
    at org.jboss.arquillian.drone.webdriver.factory.PhantomJSDriverFactory.getCapabilities(PhantomJSDriverFactory.java:99) 
    at org.jboss.arquillian.drone.webdriver.factory.PhantomJSDriverFactory.createInstance(PhantomJSDriverFactory.java:72) 
    at org.jboss.arquillian.drone.webdriver.factory.PhantomJSDriverFactory.createInstance(PhantomJSDriverFactory.java:37) 
    at org.jboss.arquillian.drone.webdriver.factory.WebDriverFactory.createInstance(WebDriverFactory.java:127) 
    at org.jboss.arquillian.drone.webdriver.factory.WebDriverFactory.createInstance(WebDriverFactory.java:38) 
    at org.jboss.arquillian.drone.impl.DroneConfigurator$1.createInstance(DroneConfigurator.java:112) 
    at org.jboss.arquillian.drone.impl.CachingCallableImpl.call(CachingCallableImpl.java:44) 
    at org.jboss.arquillian.core.impl.threading.ThreadedExecutorService$ContextualCallable.call(ThreadedExecutorService.java:89) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 
    at java.lang.Thread.run(Thread.java:748) 
Caused by: java.lang.IllegalStateException: The phantomJS binary is not present on the expected path target/drone/1c947d57fce2f21ce0b43fe2ed7cd361/phantomjs-2.1.1-linux-x86_64/bin/phantomjs 
    at org.jboss.arquillian.drone.webdriver.binary.handler.PhantomJSDriverBinaryHandler.prepare(PhantomJSDriverBinaryHandler.java:56) 
    at org.jboss.arquillian.drone.webdriver.binary.handler.AbstractBinaryHandler.downloadAndPrepare(AbstractBinaryHandler.java:226) 
    at org.jboss.arquillian.drone.webdriver.binary.handler.AbstractBinaryHandler.downloadAndPrepare(AbstractBinaryHandler.java:208) 
    at org.jboss.arquillian.drone.webdriver.binary.handler.AbstractBinaryHandler.downloadAndPrepare(AbstractBinaryHandler.java:175) 
    at org.jboss.arquillian.drone.webdriver.binary.handler.AbstractBinaryHandler.checkAndSetBinary(AbstractBinaryHandler.java:60) 
    ... 12 more 

Nov 13, 2017 7:31:36 AM org.jboss.arquillian.core.impl.ObserverImpl resolveArguments 
WARNING: Argument 1 for SeleniumServerExecutor.stopSeleniumServer is null. It won't be invoked. 
Nov 13, 2017 7:31:36 AM org.glassfish.admin.mbeanserver.JMXStartupService shutdown 
INFO: JMXStartupService and JMXConnectors have been shut down. 
JdbcRuntimeExtension, getAllSystemRAResourcesAndPools = [GlassFishConfigBean.org.glassfish.jdbc.config.JdbcResource, GlassFishConfigBean.org.glassfish.jdbc.config.JdbcResource, GlassFishConfigBean.org.glassfish.jdbc.config.JdbcConnectionPool, GlassFishConfigBean.org.glassfish.jdbc.config.JdbcConnectionPool, GlassFishConfigBean.org.glassfish.jdbc.config.JdbcConnectionPool, GlassFishConfigBean.org.glassfish.jdbc.config.JdbcResource] 
Nov 13, 2017 7:31:36 AM com.sun.enterprise.v3.server.AppServerStartup stop 
INFO: Shutdown procedure finished 

私は

<dependencies> 
    [...]  
    <dependency> 
     <groupId>org.jboss.shrinkwrap.descriptors</groupId> 
     <artifactId>shrinkwrap-descriptors-api-javaee</artifactId> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.jboss.arquillian.junit</groupId> 
     <artifactId>arquillian-junit-container</artifactId> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.jboss.shrinkwrap.resolver</groupId> 
     <artifactId>shrinkwrap-resolver-depchain</artifactId> 
     <type>pom</type> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.jboss.arquillian.graphene</groupId> 
     <artifactId>graphene-webdriver</artifactId> 
     <version>2.2.0</version> 
     <type>pom</type> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.seleniumhq.selenium</groupId> 
     <artifactId>htmlunit-driver</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>net.sourceforge.htmlunit</groupId> 
     <artifactId>htmlunit</artifactId> 
     <version>2.24</version> 
    </dependency> 
    <dependency> 
     <groupId>org.seleniumhq.selenium</groupId> 
     <artifactId>selenium-java</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.seleniumhq.selenium</groupId> 
     <artifactId>selenium-firefox-driver</artifactId> 
    </dependency> 
<!--  <dependency> 
     <groupId>com.google.guava</groupId> 
     <artifactId>guava</artifactId> 
     <version>20.0</version> 
    </dependency>--> 
    <dependency> 
     <groupId>ru.yandex.qatools.ashot</groupId> 
     <artifactId>ashot</artifactId> 
     <version>1.5.3</version> 
    </dependency> 
    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-core</artifactId> 
     <version>2.9.2</version> 
    </dependency> 
</dependencies> 
<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>org.jboss.arquillian</groupId> 
      <artifactId>arquillian-bom</artifactId> 
      <version>1.1.13.Final</version> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.jboss.arquillian.selenium</groupId> 
      <artifactId>selenium-bom</artifactId> 
      <version>3.7.0</version> 
       <!-- - 3.3.1, 3.2.0 and 3.1.0 cause required: java.util.function.Function<? super org.openqa.selenium.WebDriver,V> 
         found: org.openqa.selenium.support.ui.ExpectedCondition<org.openqa.selenium.WebElement> 
         reason: cannot infer type-variable(s) V 
         (argument mismatch; org.openqa.selenium.support.ui.ExpectedCondition<org.openqa.selenium.WebElement> cannot be converted to java.util.function.Function<? super org.openqa.selenium.WebDriver,V>) 
       - 3.0.1 causes java.lang.IllegalAccessError: tried to access class org.openqa.selenium.os.ExecutableFinder from class org.openqa.selenium.phantomjs.PhantomJSDriverService when using phantomjs driver 
       - 3.6.0 causes `Unrecognized platform: linux-unknown-64bit` 
        which one is supposed to work around using 3.5.3 
        <ref>https://github.com/SeleniumHQ/selenium/issues/4781</ref>--> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.jboss.arquillian.extension</groupId> 
      <artifactId>arquillian-drone-bom</artifactId> 
      <version>2.1.0</version> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 

<profiles> 
    <profile> 
     <id>arquillian-glassfish-embedded</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <dependencies> 
      <dependency> 
       <groupId>org.jboss.arquillian.container</groupId> 
       <artifactId>arquillian-glassfish-embedded-3.1</artifactId> 
       <version>1.0.1</version> 
      </dependency> 
      <dependency> 
       <groupId>fish.payara.extras</groupId> 
       <artifactId>payara-embedded-all</artifactId> 
       <version>4.1.2.174-SNAPSHOT</version> 
        <!-- - 4.1.2.173 causes `java.lang.NoClassDefFoundError: fish/payara/nucleus/healthcheck/stuck/StuckThreadsStore` 
          - 4.1.2.172 causes `Caused by: java.lang.ClassNotFoundException: fish.payara.notification.eventbus.EventbusMessage` --> 
       <scope>test</scope> 
      </dependency> 
     </dependencies> 
     <build> 
      <testResources> 
       <testResource> 
        <directory>src/test/resources</directory> 
       </testResource> 
       <testResource> 
        <directory>src/test/resources-glassfish-embedded</directory> 
       </testResource> 
      </testResources> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-surefire-plugin</artifactId> 
        <version>2.12</version> 
        <configuration> 
        </configuration> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
</profiles> 

を使用して、プロファイルをアクティブにしています。

phantomjs-2.1.1-linux-x86_64.tar.bz2http://phantomjs.org/download.htmlからダウンロードして抽出して調査し、phantomjs-2.1.1-linux-x86_64/examples/colorwheel.jsが内部に存在することを確認しました。 Arquillian Drone Webdriverは、ダウンロードされた.tar.bz2と一致するMD5の合計1c947d57fce2f21ce0b43fe2ed7cd361をターゲットディレクトリとして使用します。

エラーが(詳細は、あなたに提案の修正のためhttps://github.com/arquillian/arquillian-spacelift/pull/34を参照してくださいphantomjsドライバを抽出するためにArquillianドローンによって使用されるとSpaceliftは、ディレクトリの作成の失敗を無視するので、あなたがスタックトレースから見ることができませんされてArquillian Spaceliftに位置しています.gitlab-ci.ymlmainジョブに

- git clone --branch file_utils_mkdir https://github.com/krichter722/arquillian-spacelift.git && cd arquillian-spacelift && mvn --batch-mode install && cd .. 

を指定し、POMにおいて1.0.2から1.0.3-SNAPSHOTにSpacelift依存性を変化させることにより使用することができる。

説明したのと同じ方法でSpaceliftソースを変更します上記に加えてeでもxplicitディレクトリの作成とタッチ文と必ずディレクトリが

int pythonDebugReturncode = Runtime.getRuntime().exec(new String[] {"python3", 
     "-c", 
     String.format("'import os;os.makedirs(\"%s\");'", 
       file.getParentFile().getAbsoluteFile().getAbsolutePath())}).waitFor(); 
System.out.println("pythonDebugReturncode: "+pythonDebugReturncode); 
pythonDebugReturncode = Runtime.getRuntime().exec(new String[] {"python3", 
     "-c", 
     String.format("'from pathlib import Path;Path(\"%s\").touch();'", 
       file.getAbsoluteFile().getAbsolutePath())}).waitFor(); 
System.out.println("pythonDebugReturncode: "+pythonDebugReturncode); 

returncodesとして印刷されている0秒で結果が、Javaコードで失敗する相対パスを持つディレクトリを使用して作成されていることを確認するには、Java内からのPythonを使用して。

私は、ドッキングウィンドウの画像にubuntu:xenialubuntu:trustyubuntu:artfuldebian:siddebian:busterを試してみました。 AfaikのみLinuxベースのシステムをドッカーイメージとして使用できます。私は、より多くのイメージをテストすることによってより多くの洞察を得ることを望んでいない。

私は

java.net.UnknownHostException: runner-3bd5f424-project-4630314-concurrent-0: runner-3bd5f424-project-4630314-concurrent-0: Temporary failure in name resolution 
    at java.net.InetAddress.getLocalHost(InetAddress.java:1505) 

を経験するが、私は、ネットワークファイルシステムが関与していないとビルドがrootユーザーとして実行されるため獲得許可時の名前解決を使用しないので、それは問題には無関係だと仮定します。

答えて

1

Arquillian SpaceliftまたはArquillian Drone Webdriverは、MavenがアグリゲータプロジェクトルートおよびMavenベースアで一貫して起動されても変更されない作業ディレクトリを解決できません。私はこれをhttps://issues.jboss.org/browse/ARQ-2154に報告しました。

これは-DskipTests=true -DskipITs=trueでコンパイルを実行してからmvn installの通常の実行を分割し、次にサブモジュールディレクトリに変更してmvn verifyを実行することを意味します。