Jenkins: Как использовать плагин JUnit, когда сборки Maven происходят в контейнере Docker - PullRequest
2 голосов
/ 28 марта 2019

Я пытаюсь создать конвейер, в котором Jenkins создает образ Docker, запускает тесты, а затем развертывает контейнер, если тесты пройдут.Проблема в том, что у меня работает maven внутри док-контейнера, и я не могу получить доступ к опубликованным тестам, пока не запустил контейнер.Я хочу, чтобы контейнер Docker был запущен и развернут после прохождения тестов.Это кажется простым делом, но я не могу придумать, как это сделать.Я что-то неправильно понимаю?Спасибо.

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:


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'
                }
            }
        }
}


Ответы [ 2 ]

2 голосов
/ 28 марта 2019

Вы можете создать временный контейнер непосредственно перед junit, чтобы извлечь файлы результатов теста и скопировать результаты теста в вашу рабочую область.И, наконец, удалите его

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'

Вы также можете посмотреть документацию do docker-pipe , которая предоставляет некоторую абстракцию для создания образов Docker

0 голосов
/ 28 мая 2019

Вы можете использовать тот факт, что домашний репозиторий контейнера Docker является общим томом с локальной рабочей областью jenkins .

Простейший конвейерный скрипт:

newApp.inside('-e NODE_ENV=test') { sh 'npm install --dev' sh 'gulp test:unit' } junit 'reports/*.xml'

Немного сложный пример с некоторой сопутствующей работой на отдельных этапах (обратите внимание, что образ сборки maven использует кэш .m2 в качестве пользователя без полномочий root):

    try {
    buildEnvImg.inside("-v /jenkins/.m2:/var/maven/.m2 -e MAVEN_CONFIG=/var/maven/.m2 -v /jenkins/.cache:/var/maven/.cache -v /var/run/docker.sock:/var/run/docker.sock") {
        stage('Compile') {
            sh 'mvn -Duser.home=/var/maven -B -DskipTests clean compile'
        }
        stage('Build jar') {
            sh 'mvn -Duser.home=/var/maven -B -DskipTests package'
        }
        stage('Build docker') {
            sh 'mvn -Duser.home=/var/maven -B -DskipTests jib:dockerBuild'
        }
        stage('Test') {
            echo 'Going to execute mvn test, thus automated tests contained in project will be compiled and executed.'
            sh 'mvn -Duser.home=/var/maven -B test'
        }
    }
} finally {
    junit 'target/surefire-reports/*.xml'
}

Решение, извлеченное из Сборка Jenkins внутри док-контейнера с созданными отчетами .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...