pipeline { agent { label 'Win10-BuildMachine' } parameters { string(name: 'buildPath', defaultValue: 'C:/Jenkins/workspace/Azaion/suite', description: 'Path where the zip file is located') } environment { GOOGLE_DRIVE_FOLDER = 'AzaionSuiteBuilds' } stages { stage('Upload to Google Drive') { steps { script { echo "Looking for ZIP in: ${params.buildPath}" echo "Target Google Drive folder: ${env.GOOGLE_DRIVE_FOLDER}" dir("${params.buildPath}") { def zipFilename = readFile('created_zip.txt').trim() if (!fileExists(zipFilename)) { error "Zip file '${zipFilename}' not found in ${params.buildPath}" } // Check if file already exists on Google Drive def alreadyExists = powershell(script: """ \$result = rclone ls remote:\"${env.GOOGLE_DRIVE_FOLDER}\" | Select-String "${zipFilename}" if (\$result) { return 1 } else { return 0 } """, returnStatus: true) == 1 if (alreadyExists) { echo "Zip file '${zipFilename}' already exists on Google Drive. Skipping upload." } else { echo "Uploading '${zipFilename}' to Google Drive folder '${env.GOOGLE_DRIVE_FOLDER}'..." powershell """ rclone copy \"${zipFilename}\" remote:\"${env.GOOGLE_DRIVE_FOLDER}\" """ } // Retention logic – keep only latest 5 ZIPs echo "Cleaning up old ZIP files in Google Drive..." powershell """ \$files = rclone lsf --files-only --format "t" --max-age 365d remote:\"${env.GOOGLE_DRIVE_FOLDER}\" | Sort-Object | Where-Object { \$_ -like "*.zip" } if (\$files.Count -gt 5) { \$filesToDelete = \$files | Select-Object -First (\$files.Count - 5) foreach (\$file in \$filesToDelete) { rclone delete remote:\"${env.GOOGLE_DRIVE_FOLDER}/\$file\" } } """ } } } } } post { success { echo "Upload completed." } failure { echo "Upload failed." } } }