запустить мой тест в Docker Mongo, используя конвейер Дженкинса - PullRequest
1 голос
/ 17 октября 2019

Я бы хотел запустить свои тесты для экземпляра Docker MongoDB, используя конвейер Jenkins. У меня это работает вроде. Моя проблема в том, что тесты выполняются в контейнере Mongo. Я просто хочу, чтобы он загрузил контейнер и мои тесты для подключения к контейнеру Monogo. На данный момент он загружает Gradle внутри контейнера и занимает около 5 минут. Надеюсь, что это имеет смысл. Вот мой JenkinsFile

    #!/usr/bin/env groovy

pipeline {
    environment {
        SPRING_PROFILES_ACTIVE = "jenkins"
    }

    agent {
        node {
           label "jdk8"
        }
    }

    parameters {
       choice(choices: 'None\nBuild\nMinor\nMajor', description: '', name: 'RELEASE_TYPE')
       string(defaultValue: "refs/heads/master:refs/remotes/origin/master", description: 'gerrit refspec e.g. refs/changes/45/12345/1', name: 'GERRIT_REFSPEC')
       choice(choices: 'master\nFETCH_HEAD', description: 'gerrit branch', name: 'GERRIT_BRANCH')
    }

    stages {
         stage("Test") {
                stages {
                    stage("Initialise") {
                        steps {
                            println "Running on ${NODE_NAME}, release type: ${params.RELEASE_TYPE}"
                            println "gerrit refspec: ${params.GERRIT_REFSPEC}, branch: ${params.GERRIT_BRANCH}, event type: ${params.GERRIT_EVENT_TYPE}"
                            checkout scm
                            sh 'git log -n 1'
                        }
                    }

                    stage("Verify") {
                       agent {
                          dockerfile {
                             filename 'backend/Dockerfile'
                             args '-p 27017:27017'
                             label 'docker-pipeline'
                             dir './maintenance-notifications'
                          }
                        }

                        steps {
                            sh './gradlew :maintenance-notifications:backend:clean'
                            sh './gradlew :maintenance-notifications:backend:check :maintenance-notifications:backend:test'
                        }

                        post {
                            always {
                                junit 'maintenance-notifications/backend/build/test-results/**/*.xml'
                            }
                        }
                    }
                }
            }

            stage("Release") {
                when {
                  expression {
                        return params.RELEASE_TYPE != '' && params.RELEASE_TYPE != 'None';
                   }
                }

                steps {
                     script {
                        def gradleProps = readProperties file: "gradle.properties"
                        def isCurrentSnapshot = gradleProps.version.endsWith("-SNAPSHOT")
                        def newVersion = gradleProps.version.replace("-SNAPSHOT", "")
                        def cleanVersion = newVersion.tokenize(".").collect{it.toInteger()}
                            if (params.RELEASE_TYPE == 'Build') {
                                newVersion = "${cleanVersion[0]}.${cleanVersion[1]}.${isCurrentSnapshot ? cleanVersion[2] : cleanVersion[2] + 1}"
                            } else if (params.RELEASE_TYPE == 'Minor') {
                                newVersion = "${cleanVersion[0]}.${cleanVersion[1] + 1}.0"
                            } else if (params.RELEASE_TYPE == 'Major') {
                                newVersion = "${cleanVersion[0] + 1}.0.0"
                            }
                        def newVersionArray = newVersion.tokenize(".").collect{it.toInteger()}
                        def newSnapshot = "${newVersionArray[0]}.${newVersionArray[1]}.${newVersionArray[2] + 1}-SNAPSHOT"
                        println "release version: ${newVersion}, snapshot version: ${newSnapshot}"

                        sh "./gradlew :maintenance-notifications:backend:release -Prelease.useAutomaticVersion=true -Prelease.releaseVersion=${newVersion} -Prelease.newVersion=${newSnapshot}"
                     }
                 }
            }
    }
}

, а вот мой Dockerfile

FROM centos:centos7

ENV container=docker

RUN mkdir -p /usr/java; curl http://configuration/yum/thecloud/artifacts/java/jdk-8u151-linux-x64.tar.gz|tar zxC /usr/java && ln -s /usr/java/jdk1.8.0_151/bin/j* /usr/bin
RUN mkdir -p /usr/mongodb; curl http://configuration/yum/thecloud/artifacts/mongodb/mongodb-linux-x86_64-3.4.10.tgz|tar zxC /usr/mongodb && ln -s /usr/mongodb/mongodb-linux-x86_64-3.4.10/bin/* /usr/bin
ENV JAVA_HOME /usr/java/jdk1.8.0_151/
ENV SPRING_PROFILES_ACTIVE jenkins
RUN yum -y install git.x86_64 && yum clean all

# Set up directory requirements
RUN mkdir -p /data/db /var/log/mongodb /var/run/mongodb
VOLUME ["/data/db", "/var/log/mongodb"]

# Expose port 27017 from the container to the host
EXPOSE 27017

CMD ["--port", "27017", "--pidfilepath", "/var/run/mongodb/mongod.pid"]

# Start mongodb
ENTRYPOINT /usr/bin/mongod
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...