如何使用Jenkins Docker插件在容器内构建maven项目

时间:2017-09-27 11:07:10

标签: docker jenkins-plugins jenkins-pipeline jenkins-docker

使用maven作为构建工具的项目。现在,当使用Jenkins进行部署时,我们需要使用Docker插件在docker容器内构建项目。我的理解是项目应该在容器内部构建,一旦完成它应该被删除。

我正在尝试使用类似的命令:docker.image(" imageName")。inside {} 现在我们如何确保删除容器并装入卷,以便在删除docker容器后可以访问作为构建的一部分创建的jar?

有些人可以提供上述理解的输入和上述命令的示例或任何引用的链接吗?

1 个答案:

答案 0 :(得分:3)

我认为,如果您将使用管道工作将会很好。 在这里,您可以查看带有注释的示例

pipeline {
stages {
    stage('Build') {
        agent { //here we select only docker build agents
            docker {
                image 'maven:latest' //container will start from this image
                args '-v /root/.m2:/root/.m2' //here you can map local maven repo, this let you to reuse local artifacts
            }
        }
        steps {
            sh 'mvn -B -DskipTests clean package' //this command will be executed inside maven container
        }
    }
    stage('Test') { //on this stage New container will be created, but current pipeline workspace will be remounted to it automatically
        agent {
            docker {
                image 'maven:latest'
                args '-v /root/.m2:/root/.m2'
            }
        }
        steps {
            sh 'mvn test' 
        }
    }
    stage ('Build docker image') { //here you can check how you can build even docker images inside container
        agent {
            docker {
                image 'maven:latest'
                args '-v /root/.m2:/root/.m2 -v /var/run/docker.sock:/var/run/docker.sock' //here we expose docker socket to container. Now we can build docker images in the same way as on host machine where docker daemon is installed
            }
        }
        steps {
            sh 'mvn -Ddocker.skip=false -Ddocker.host=unix:///var/run/docker.sock docker:build' //example of how to build docker image with pom.xml and fabric8 plugin
        }
    }
}

}

即使Jenkins本身在主机上安装了mounter jenkins_home的容器中,这也会有效。

如果我能从我的经验中为您提供更多有用的详细信息,请告诉我