Files
jenkins-pipelines/pipelines/OMP/nextcloud_sync.groovy
aleksandr.vodyanov 8098ef59be bugfix: add cleanws in pipelines (!20)
Reviewed-on: https://git.avroid.tech/DevOps/jenkins-pipelines/pulls/20
Co-authored-by: aleksandr.vodyanov <aleksandr.vodyanov@avroid.tech>
Co-committed-by: aleksandr.vodyanov <aleksandr.vodyanov@avroid.tech>
2024-02-27 17:56:26 +03:00

114 lines
5.3 KiB
Groovy
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
@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) {
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'
} finally {
cleanWs()
}
}
}