Jenkins:当在Docker容器中进行Maven构建时,如何使用JUnit插件 [英] Jenkins: How to use JUnit plugin when Maven builds occur within Docker container

查看:302
本文介绍了Jenkins:当在Docker容器中进行Maven构建时,如何使用JUnit插件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试创建一个管道,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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆