У нас есть проект Maven Java, который мы хотим запустить в конвейерах Jenkins BlueOcean.
Я следовал этому учебнику . Конвейер работает для выполнения нашего кода. Yay!
Однако каждый раз, когда этап сборки нашего конвейера выполняется под новым запуском Jenkins, он перезагружает все артефакты maven. Это значительно увеличивает время сборки.
Я запускаю контейнер 'jenkins- docker' с:
docker container run --name jenkins-docker --rm --detach \
--privileged --network jenkins --network-alias docker \
--env DOCKER_TLS_CERTDIR=/certs \
--volume jenkins-docker-certs:/certs/client \
--volume jenkins-data:/var/jenkins_home \
--publish 2376:2376 docker:dind
А контейнер 'jenkins-blueocean' с:
docker container run --name jenkins-blueocean --rm --detach \
--network jenkins --env DOCKER_HOST=tcp://docker:2376 \
--env DOCKER_CERT_PATH=/certs/client --env DOCKER_TLS_VERIFY=1 \
--volume jenkins-data:/var/jenkins_home \
--volume jenkins-docker-certs:/certs/client:ro \
--publish 8080:8080 --publish 50000:50000 jenkinsci/blueocean
Тогда наш конвейер Jenkinsfile выглядит так:
pipeline {
agent {
docker {
image 'maven:3.6.3-jdk-8'
args '-v /root/.m2:/root/.m2'
}
}
stages {
stage('Build') {
steps {
sh 'mvn -B -DskipTests clean package'
}
}
stage('Test') {
steps {
sh 'mvn test'
}
post {
always {
junit 'target/surefire-reports/*.xml'
}
}
}
}
}
Здесь Jenkins запускает новый образ 'maven: 3.6.3-jdk-8' docker для запуска. Как я понимаю, он также отображает том для сохранения каталога .m2.
Поскольку мой экземпляр 'jenkins- docker' не закрывается при сборке, я хотел бы иметь этот каталог .m2 сохранялось. Тогда каждый последующий прогон может использовать кэш загруженных артефактов и не тратить 5 минут на их повторную загрузку.
Кто-нибудь может подсказать, что я делаю неправильно?
Заранее спасибо