3

I am trying to run my integration tests with Testcontainers on Jenkins Kubernetes Docker in Docker container.

Testcontainer version: 1.15.3

However, it always fails to get the Container.getMappedPort(X) inside the DinD Container.

It works absolutely fine on my local setup and manages to get the mapped port.

Has anyone encounter this issue before or has a solution for this?

My Jenkins file

#!groovy

def label = "debug-${UUID.randomUUID().toString()}"

podTemplate(label: label, slaveConnectTimeout: '10', containers: [
        containerTemplate(
                name: 'docker-in-docker',
                image: 'cfzen/dind:java11',
                privileged: true,
                workingDir: '/home/jenkins/agent',
                ttyEnabled: true,
                command: 'cat',
          envVars: [
            envVar(key: 'TESTCONTAINERS_HOST_OVERRIDE', value: 'tcp://localhost:2375'),
            envVar(key: 'TESTCONTAINERS_RYUK_DISABLED', value: 'true'),
          ]
        ),
        containerTemplate(
                name: 'helm-kubectl',
                image: 'dtzar/helm-kubectl',
                workingDir: '/home/jenkins/agent/',
                ttyEnabled: true,
                command: 'cat'
        )
],
        volumes: [hostPathVolume(mountPath: '/var/run/docker.sock', hostPath: '/var/run/docker.sock'),],
        annotations: [
                podAnnotation(key: 'iam.amazonaws.com/role',
                        value: 'arn:aws:iam::xxxxxxxxxxx')
        ],
)
        {
            node(label) {

                deleteDir()

                stage('Checkout') {
                    checkout scm
                    def shortCommit = sh(returnStdout: true, script: "git log -n 1 --pretty=format:'%h'").trim()
                    currentBuild.description = "${shortCommit}"
                }


              stage('Run Integration tests') {
                container('docker-in-docker') {
                  withCredentials([
                    usernamePassword(credentialsId: 'jenkins-artifactory-credentials',
                      passwordVariable: 'ARTIFACTORY_SERVER_PASSWORD',
                      usernameVariable: 'ARTIFACTORY_SERVER_USERNAME')])
                    {
                  echo 'Run Integration tests'
                  sh("mvn -B clean verify -q -s  mvn/local-settings.xml")
                }
            }
        }

TestRunner:

@RunWith(CucumberWithSerenity.class)
@CucumberOptions(features = "classpath:features")
public final class RunCucumberIT {


    @BeforeClass
    public static void init(){
        Containers.POSTGRES.start();
        System.out.println("Exposed port of db is"+Containers.POSTGRES.getExposedPorts());
        System.out.println("Assigned port of db is"+Containers.POSTGRES.getFirstMappedPort());
        Containers.WIREMOCK.start();
        Containers.S3.start();
    }

    private RunCucumberIT() {

    }

}

Fails at Containers.POSTGRES.getFirstMappedPort()

Requested port (X) is not mapped
theGeek
  • 101
  • 9

0 Answers0