DO-95/omp_from_nextCloud_to_nexus (#3)

add sync both NextCloud and Nexus

Reviewed-on: https://git.avroid.tech/DevOps/jenkins-pipelines/pulls/3
Co-authored-by: aleksandr.vodyanov <aleksandr.vodyanov@avroid.tech>
Co-committed-by: aleksandr.vodyanov <aleksandr.vodyanov@avroid.tech>
This commit is contained in:
aleksandr.vodyanov
2023-11-03 11:11:33 +03:00
committed by Aleksandr Vodyanov
parent 5dcf1cd539
commit 7eeaa65b16
5 changed files with 148 additions and 13 deletions

View File

@@ -0,0 +1,105 @@
@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: hostPathWorkspaceVolume(hostPath: "/data"),
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) {
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}'"
}
}
}
}
}
}