Arquillian Cube和ArquillianResource网址

时间:2017-06-19 16:18:45

标签: jboss-arquillian

我一直在尝试获取我的Junit测试中使用的tomcat服务器(在docker容器中运行)的url而不仅仅是localhost。这很重要的原因是我的测试在本地运行正常,但是当我们的jenkins节点运行时,它也运行在Docker中,localhost不起作用。

我已经将节点配置为在Docker配置上使用Docker。我需要url使用父docker机器的ip。奇怪的是jmx url似乎可以很好地部署测试战,但是单元测试url本身存在问题。我用ip硬编码重写了测试,这很好用,但是在这里想要在本地运行测试的开发人员真的不是最佳解决方案。

我也尝试过使用@CubeIp和@DockerUrl或@HostIp,但它们只返回localhost或null,因为它说找不到容器" tomcat"

有什么想法吗?

这是我的arquillian.xml

<extension qualifier="cube">
    <property name="connectionMode">STARTORCONNECTANDLEAVE</property>

</extension>

<extension qualifier="docker">
    <property name="serverVersion">1.14</property>
    <property name="serverUri">unix:///var/run/docker.sock</property>
    <!--<property name="serverUri">localhost:2375</property>-->
    <property name="dockerInsideDockerResolution">false</property>
    <property name="definitionFormat">CUBE</property>
    <property name="dockerContainersFile">docker-compose.yml</property>
    <property name="dockerRegistry">https://internalnexus.com:5000/</property>
    <property name="username">user</property>
    <property name="password">pass</property>
    <property name="email">email</property>

</extension>

<container qualifier="tomcat" default="true">
    <configuration>
        <property name="host">10.0.20.1</property>
        <property name="httpPort">8080</property>
        <property name="user">user</property>
        <property name="pass">pass</property>
    </configuration>
</container>

这是我的码头撰写文件

`
   tomcat:
        image: internalnexus.com:5000/perf-tomcat:latest
        exposedPorts: [8080/tcp,8089/tcp]
        alwaysPull: false
        await:
          strategy: polling
        env: [TOMCAT_PASS=mypass, JAVA_OPTS=-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=8089 -Dcom.sun.management.jmxremote.rmi.port=8089 -Dcom.sun.management.jmxremote.ssl=false -Dspring.config.location=/usr/local/tomcat/conf/application.properties]
        portBindings: [8089/tcp, 8080/tcp]
        links:
          - database:database
      database:
        image: internalnexus.com:5000/perfstats-sqlserver:latest
        exposedPorts: [1433/tcp]
        env: [SA_PASSWORD=pass, ACCEPT_EULA=Y]
        await:
          strategy: log
          match: 'ms sql server is done'
          stdOut: true
          stdErr: true
          timeout: 30
        portBindings: [1433/tcp]
`

1 个答案:

答案 0 :(得分:0)

我有一个问题,这就是为什么你需要父码头主机ip?

我看到的是父Docker主机ip是Jenkins节点正在使用的docker主机ip。此IP是外部呼叫者访问Jenkins所需的IP。然后在该docker实例中运行另一个docker主机,或者您正在重用Jenkins运行的docker主机?