我正在尝试创建一个管道,Jenkins将在该管道上构建我的Docker映像,运行测试,然后在测试通过的情况下部署容器.问题是我在docker容器中运行了maven,并且在运行该容器之前,我实际上无法访问已发布的测试.我希望在测试通过后运行并部署Docker容器.这似乎很简单,但是我想不出一个好方法.我误会了吗?谢谢.
I am trying to create a Pipeline where Jenkins builds my Docker image, runs tests, and then deploys the container if the tests pass. The problem is that I have maven running inside the docker container, and I can't actually access the published tests until I run the container. I want the Docker container to be ran and deployed after the tests pass. This seems like a simple thing to do, but I can't think of a good way to do it. Am I misunderstanding something? Thanks.
Dockerfile:
Dockerfile:
FROM openjdk:10 as step-one COPY ./ /var/www/java/ WORKDIR /var/www/java RUN apt-get update -y && apt-get install -y maven RUN mvn clean package -X ENTRYPOINT ["java"] CMD ["-jar", "target/gs-serving-web-content-0.1.0.jar"] EXPOSE 8080Jenkinsfile:
Jenkinsfile:
pipeline { agent any stages { stage('Build') { steps { echo 'Building..' sh 'docker build -t spring-image .' } } stage('Test') { steps { echo 'Testing..' junit '/var/www/java/target/surefire-reports/TEST-ma.SpringTest.xml' } } stage('Deploy') { steps { echo 'Deploying....' sh 'docker run -i -d --name spring-container spring-image' } } } }推荐答案
您可以在junit之前创建一个临时容器,以提取测试结果文件以将测试结果复制到您的工厂.最后将其删除
You could create an temporary container just before junit to extract test results files to copy test result to your workspsace. And finally remove it
sh 'docker create --name temporary-container spring-image' sh 'docker cp temporary-container:/var/www/java/target/surefire-reports .' sh 'docker rm temporary-container' junit 'surefire-reports'您还可以查看 docker-pipeline 文档,该文档为您提供一些抽象来构建docker镜像
You could also take a look do docker-pipeline documentations which provides you some abstraction to build docker images
更多推荐
Jenkins:当在Docker容器中进行Maven构建时,如何使用JUnit插件
发布评论