From 0602b0c6f2c39910e36c540e5a84418d9f762803 Mon Sep 17 00:00:00 2001 From: dzaitsev Date: Sun, 4 May 2025 15:15:23 +0300 Subject: [PATCH] Revert "gdrive update1" This reverts commit a1f46799 --- build/jenkins/GDriveUpload | 184 +++++++++++++++++++++++++++++-------- 1 file changed, 146 insertions(+), 38 deletions(-) diff --git a/build/jenkins/GDriveUpload b/build/jenkins/GDriveUpload index 44c6288..99c65cd 100644 --- a/build/jenkins/GDriveUpload +++ b/build/jenkins/GDriveUpload @@ -1,45 +1,153 @@ -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 +pipeline { + agent { label 'Win10-BuildMachine' } - # If files were found - if (\$files.Count -gt 0) { - # Sort the files by date in descending order - \$filesSorted = \$files | Sort-Object -Descending + tools { + git 'Default' + } - # Keep only the 3 latest files - \$filesToDelete = \$filesSorted | Select-Object -Skip 3 + parameters { + string(name: 'GOOGLE_DRIVE_FOLDER', defaultValue: 'AzaionSuiteBuilds', description: 'The folder on Google Drive where the build will be uploaded.') + } - Write-Output "Files to delete (older than 3 latest):" - Write-Output \$filesToDelete + environment { + RCLONE_CONFIG = 'C:/Program Files/rclone/rclone.conf' // Ensure this points to the correct location + } - # 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 - Write-Output "Temporary file created: \$tempFile" - - # 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 - - # 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." + 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 + } + ''' } - """ + } + + 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() + + 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}" + + // Pass the variable into the environment for the next steps if needed + env.LATEST_ZIP_FILENAME = zipFileName + } + } + } + } + + 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 { + script { + // Writing PowerShell cleanup script to a temporary file + def cleanupScript = ''' + # 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" + + # Extract file names (without timestamps) + $fileNamesToDelete = $filesToDelete -replace '^\S+ ', '' + + # Create a temporary file to store the list of files to delete + $tempFile = [System.IO.Path]::GetTempFileName() + $fileNamesToDelete | 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." + } + ''' + + // Write the PowerShell cleanup script to a temporary file + def tempScriptFile = "cleanup_script.ps1" + writeFile file: tempScriptFile, text: cleanupScript + + // Run the PowerShell script + powershell script: tempScriptFile + + // Clean up the temporary PowerShell script file + deleteFile tempScriptFile + } + } + } + } + + 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.' + } } }