Простое (как я думал) задание.
- для установки старшего подчиненного контейнера Jenkins (в контейнере).
- сборка двоичных файлов внутри контейнера.
- чтобы настроить Jenkins для создания образа с этими двоичными файлами внутри.
- для запуска контейнера на основе моего изображения.
Прежде всего, хорошо, что подчиненный контейнер использует те же сопоставленные тома от master. Итак, у меня есть мои двоичные файлы в основной рабочей области на Master после завершения этапа подчиненного контейнера. Но я не знаю, почему (или почему нет) Дженкинс чистит рабочее пространство между этапами. я использую stage('cleanup old image/containers stage')
с отдельным рабочим пространством, чтобы предотвратить очистку основного рабочего пространства при запуске stage('Build image')
Как я могу сохранить рабочее пространство со сменой агента?
вот часть моего Jenkinsfile:
pipeline {
agent none
environment{
stages {
stage('build container up') { // ------ Start container and build binaries inside
agent {
docker {
image G_buildimage
args ' --expose 8080 --network proxy_nw -v G_dirdouble'
}
}
stages {
stage('Build') {}
stage('service up'){}
stage('test before deploy'){}
}
}
stage('clenap old image/containers stage') { // ------ Delete old versions (Without this stage main worckspace will be cleaned up)
agent {
node {
label 'master'
customWorkspace 'clenupworkspace'
}
}
environment {}
steps {}
stage('Build image') { // ------ build image with binaries from workspace
steps {
script {
docker.withRegistry('', 'dockerhub') {
def wimage = docker.build("${G_image}:${env.BUILD_ID}")
wimage.push()
wimage.push('latest')
}
}
}
}
stage('Run service container'){ // ------ run container from my image
agent {label 'master'}
environment {
steps {
dir ('containers'){
script{
docker.withRegistry('', 'dockerhub') {
def wimage = docker.image("${G_image}:latest")
docker.withServer('tcp://devhost:2376', 'dev.Docker') {
sh 'docker-compose pull && docker-compose up -d --force-recreate'
}
}
}
}
}
}
stage('test service container'){}
post {}
}