sharedLibsPath = "${env.WORKSPACE}/sharedLibs" backup_destination = '/var/jenkins_home/backups' backup_targetFile = 'dockerImage.tar' // 获取镜像URL generateFullImageUri = {Map DOCKER, String base_branch, String BUILD_NUMBER -> return "${DOCKER.registry}/${DOCKER.image}:${base_branch}-${BUILD_NUMBER}" } // 获取镜像名 generateImageName = {Map DOCKER, String base_branch, String BUILD_NUMBER -> return "${DOCKER.image}:${base_branch}-${BUILD_NUMBER}" } def generateImageName(String imageName, String base_branch, String BUILD_NUMBER) { return "${imageName}:${base_branch}-${BUILD_NUMBER}" } def generateDockerfile(Object SERVICE, String pathOfDockerfile='projdir') { def module = SERVICE.module == null ? '' : (SERVICE.module[-1] == '/' ? SERVICE.module : SERVICE.module + '/') echo "-----> Generating Dockerfile: ${pathOfDockerfile}/Dockerfile ..." sh """cat > ${pathOfDockerfile}/Dockerfile< Building docker image: ${imageUri} ..." dir(projDir) { docker.withRegistry("http://${DOCKER.registry}", "${DOCKER.push_credentialId}") { def imageName = generateImageName(DOCKER, base_branch, BUILD_NUMBER) def image = docker.build(imageName) image.push() sh "docker rmi ${imageName}" if(filter2Remove != null) sh "docker image prune --filter label=${filter2Remove} -f" } } return imageUri } def cleanDockerImage(String dockerImgName) { sh "docker rmi ${dockerImgName}" } // Jenkins pipeline stages def execute(CONFIG, base_branch, closures=[:]) { stage('source code check out') { println "loading ${sharedLibsPath}/gitUtil.groovy..." def gitUtils = load "${sharedLibsPath}/gitUtil.groovy" COMMIT_SHA = closures.GITCLONE == null ? gitUtils.clone(CONFIG.git, base_branch) : closures.GITCLONE() } stage("docker image build") { def projDir = 'projdir' if (closures.GENERATEDOCKERFILE != null) projDir = closures.GENERATEDOCKERFILE() else projDir = generateDockerfile(CONFIG.service) //default if (closures.BUILDIMAGE != null) imageUri = closures.BUILDIMAGE() else imageUri = buildDockerImage(CONFIG.service, CONFIG.docker, base_branch, projDir, 'stage=STATICRES-BUILD') } stage("run docker container") { if(closures.DOCKERRUN != null){ closures.DOCKERRUN() return } } } return this