Jenkins:当在Docker容器中进行Maven构建时,如何使用JUnit插件 [英] Jenkins: How to use JUnit plugin when Maven builds occur within Docker container
问题描述
我正在尝试创建一个管道,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 8080
Jenkinsfile:
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插件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!