1

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

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

有人可以提供有关上述理解的输入以及上述命令的示例或任何链接以供参考吗?

4

1 回答 1

4

我认为,如果您使用管道作业会很好。在这里你可以用评论查看我的例子

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 本身在带有来自主机的安装程序 jenkins_home 的容器中运行,这也将起作用。

如果我可以根据我的经验向您提供更多有用的详细信息,请告诉我

于 2017-12-14T18:12:11.160 回答