首页 > 解决方案 > 使用 jenkins 管道在 docker mongo 实例中运行我的测试

问题描述

我想使用 Jenkins 管道针对 Docker MongoDB 实例运行我的测试。我已经让它工作了。我的问题是测试在 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

标签: mongodbdockerjenkinsjenkins-pipeline

解决方案


推荐阅读