From d547a4007eb672fa95ef9f330a05695761107068 Mon Sep 17 00:00:00 2001 From: dzaitsev Date: Sun, 4 May 2025 15:14:12 +0300 Subject: [PATCH] gdrive update1 --- build/jenkins/GDriveUpload | 161 ++++++++----------------------------- 1 file changed, 34 insertions(+), 127 deletions(-) diff --git a/build/jenkins/GDriveUpload b/build/jenkins/GDriveUpload index 449261c..44c6288 100644 --- a/build/jenkins/GDriveUpload +++ b/build/jenkins/GDriveUpload @@ -1,138 +1,45 @@ -pipeline { - agent { label 'Win10-BuildMachine' } +stage('Cleanup Older Files on Google Drive') { + steps { + echo "Cleaning up older files on Google Drive..." + powershell """ + # List all files in the Google Drive folder + Write-Output "Listing all files in the folder ${params.GOOGLE_DRIVE_FOLDER} on Google Drive..." + \$files = rclone lsf --files-only AzaionGoogleDrive:${params.GOOGLE_DRIVE_FOLDER} --format "tp" --max-depth 1 + Write-Output "Files found on Google Drive:" + Write-Output \$files - tools { - git 'Default' - } + # If files were found + if (\$files.Count -gt 0) { + # Sort the files by date in descending order + \$filesSorted = \$files | Sort-Object -Descending - parameters { - string(name: 'GOOGLE_DRIVE_FOLDER', defaultValue: 'AzaionSuiteBuilds', description: 'The folder on Google Drive where the build will be uploaded.') - } + # Keep only the 3 latest files + \$filesToDelete = \$filesSorted | Select-Object -Skip 3 - environment { - RCLONE_CONFIG = 'C:/Program Files/rclone/rclone.conf' // Ensure this points to the correct location - } + Write-Output "Files to delete (older than 3 latest):" + Write-Output \$filesToDelete - stages { - stage('Initialize Workspace') { - steps { - echo 'Initializing workspace on Windows agent...' - powershell ''' - $uploadDir = "temp_upload" - if (-Not (Test-Path $uploadDir)) { - New-Item -ItemType Directory -Path $uploadDir | Out-Null - } - ''' - } - } + # If there are files to delete, remove them + if (\$filesToDelete.Count -gt 0) { + Write-Output "Deleting files: \$filesToDelete" - stage('Find Latest Zip and Upload') { - steps { - script { - echo "Starting 'Find Latest Zip and Upload' stage." - dir("C:/Jenkins/workspace/AzaionSuite/suite") { - def output = powershell(returnStdout: true, script: ''' - $pattern = "AzaionSuite*-*-*.zip" - $zipFiles = Get-ChildItem -Filter $pattern | Sort-Object Name -Descending - if ($zipFiles.Count -eq 0) { - Write-Error "No ZIP files matching pattern '$pattern' were found." - exit 1 - } - $latestZip = $zipFiles[0].Name - Write-Output "::SET-ENV::LATEST_ZIP_FILENAME=$latestZip" - ''').trim() + # Create a temporary file to store the list of files to delete + \$tempFile = [System.IO.Path]::GetTempFileName() + \$filesToDelete | Out-File -FilePath \$tempFile -Encoding utf8 + Write-Output "Temporary file created: \$tempFile" - def match = output =~ /::SET-ENV::LATEST_ZIP_FILENAME=(.+)/ - if (!match) { - error("Could not find the latest zip filename in the PowerShell output using marker.") - } - def zipFileName = match[0][1] - echo "Latest zip file selected: ${zipFileName}" + # Use rclone to delete the files + Write-Output "Executing rclone delete..." + rclone delete AzaionGoogleDrive:${params.GOOGLE_DRIVE_FOLDER} --files-from \$tempFile --drive-chunk-size 64M --progress - // Pass the variable into the environment for the next steps if needed - env.LATEST_ZIP_FILENAME = zipFileName - } + # Clean up the temporary file + Remove-Item -Path \$tempFile + } else { + Write-Output "No files to delete." } + } else { + Write-Output "No files found on Google Drive to clean up." } - } - - stage('Upload to Google Drive using rclone') { - steps { - echo "Uploading ${env.LATEST_ZIP_FILENAME} to Google Drive..." - powershell """ - \$filePath = "C:/Jenkins/workspace/AzaionSuite/suite/${env.LATEST_ZIP_FILENAME}" - Write-Output "Preparing to upload: \$filePath" - - # Display the contents of the rclone configuration file to ensure it's being read correctly - Get-Content 'C:/Program Files/rclone/rclone.conf' - - # Explicitly set the rclone config path - \$env:RCLONE_CONFIG = 'C:/Program Files/rclone/rclone.conf' - - # Use rclone to upload the file to Google Drive - rclone copy "\$filePath" AzaionGoogleDrive:${params.GOOGLE_DRIVE_FOLDER} --progress --drive-chunk-size 64M - """ - } - } - - stage('Cleanup Older Files on Google Drive') { - steps { - echo "Cleaning up older files on Google Drive..." - powershell """ - # List all files in the Google Drive folder - Write-Output "Listing all files in the folder ${params.GOOGLE_DRIVE_FOLDER} on Google Drive..." - \$files = rclone lsf --files-only AzaionGoogleDrive:${params.GOOGLE_DRIVE_FOLDER} --format "tp" --max-depth 1 - Write-Output "Files found on Google Drive:" - Write-Output \$files - - # If files were found - if (\$files.Count -gt 0) { - # Sort the files by date in descending order - \$filesSorted = \$files | Sort-Object -Descending - - # Keep only the 3 latest files - \$filesToDelete = \$filesSorted | Select-Object -Skip 3 - - Write-Output "Files to delete (older than 3 latest):" - Write-Output \$filesToDelete - - # If there are files to delete, remove them - if (\$filesToDelete.Count -gt 0) { - Write-Output "Deleting files: \$filesToDelete" - - # Create a temporary file to store the list of files to delete - \$tempFile = [System.IO.Path]::GetTempFileName() - \$filesToDelete | Out-File -FilePath \$tempFile -Encoding utf8 - - # Use rclone to delete the files - rclone delete AzaionGoogleDrive:${params.GOOGLE_DRIVE_FOLDER} --files-from \$tempFile --drive-chunk-size 64M - - # Clean up the temporary file - Remove-Item -Path \$tempFile - } else { - Write-Output "No files to delete." - } - } else { - Write-Output "No files found on Google Drive to clean up." - } - """ - } - } - } - - post { - always { - echo 'Executing post-build cleanup...' - powershell ''' - $uploadDir = "temp_upload" - if (Test-Path $uploadDir) { - Remove-Item -Recurse -Force $uploadDir - } - ''' - } - - failure { - echo 'Pipeline failed. Check logs for details.' - } + """ } }