@Library('shared-lib') _ import java.text.SimpleDateFormat import tech.avroid.api.NextCloud import tech.avroid.api.Nexus properties([ buildDiscarder(logRotator(artifactNumToKeepStr: '10', numToKeepStr: '10')), disableConcurrentBuilds(), pipelineTriggers([ cron('H 9 * * *') ]) ]) nexusRepository = 'OMP-cloud' podTemplate(workspaceVolume: emptyDirWorkspaceVolume(memory: false), yaml: ''' apiVersion: v1 kind: Pod spec: containers: - name: linux image: harbor.avroid.tech/devops/base-build-image:1.0 tty: true resources: limits: cpu: 300m memory: 256Mi requests: cpu: 300m memory: 256Mi imagePullPolicy: Always imagePullSecrets: - name: harbor-registry-secret ''' ) { node(POD_LABEL) { try { stage('Synchronize NextCloud with Nexus') { container(name: 'linux') { NextCloud nextCloud = new NextCloud(this, env.JENKINS_OMP_NEXTCLOUD_URL, env.JENKINS_OMP_NEXTCLOUD_CREDENTIALS) Nexus nexus = new Nexus(this, env.JENKINS_NEXUS_URL, env.JENKINS_NEXUS_CREDENTIALS) def nextCloudDate def nexusDate // Путь до файла в нексусе, передаваемый в метод Nexus().upload для корректной работы с Nexus API (" " заменен на "%20") String nexusPath = "" // Путь до файла, передаваемый в метод fileInfo, для корректной работы c NextCloud API String customPath = "" // Путь до файла в нексусе без служебных символов String customNexusPath = "" // Дата последнего изменения файла в Нексус String nexusLastModified = "" // Дата последнего изменения файла в НекстКлауд String nextCloudLastModified = "" // Путь до файла на хосте String localPath = "" // Имя файла без пути String fileName = "" // Полный URL артефакта в нексус String nexusFileUrl = "" // Список файлов в репозитории нексуса String[] nexusFiles = nexus.search(nexusRepository) // Список файлов в Некст клауд List nextCloudFiles = nextCloud.search("ext-a.vodyanov/5.0.0") nextCloudFiles.each { nextCloudFile -> customPath = nextCloudFile.replace("remote.php/dav/files/", "") nexusPath = customPath.replace("/ext-a.vodyanov/", "") fileName = nexusPath.split("/").last() nexusPath = nexusPath.replace("/$fileName", "") customPath = customPath.replace("%20", " ") customNexusPath = customPath.replace("/ext-a.vodyanov/", "") nexusFileUrl = "$env.JENKINS_NEXUS_URL/repository/$nexusRepository/$customNexusPath" if (nexusFiles.contains("$nexusFileUrl")) { // Проверяем когда было последнее обновление файла на нексусе и некстклауде и сравниваем даты nextCloudLastModified = nextCloud.fileInfo(customPath).lastModified nexusLastModified = nexus.fileInfo(nexusRepository, "$nexusPath/$fileName").lastModified nextCloudDate = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss z").parse(nextCloudLastModified) nexusDate = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX").parse(nexusLastModified) if (nexusDate.time < nextCloudDate.time) { localPath = nextCloud.download(nextCloudFile) nexus.upload([ artifactPath: localPath, repository: nexusRepository, path: nexusPath ]) sh "rm '${localPath}'" } } else { localPath = nextCloud.download(nextCloudFile) nexus.upload([ artifactPath: localPath, repository: nexusRepository, path: nexusPath ]) sh "rm '${localPath}'" } } } } } catch(err) { echo 'ERROR: ' + err.getMessage() currentBuild.result = 'FAILURE' } } }