diff --git a/Jenkinsfile b/Jenkinsfile index 15b5eb4..de0ebae 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -64,8 +64,8 @@ pipeline { withCredentials([[$class: 'AmazonWebServicesCredentialsBinding', credentialsId: env.AWS_CRED_ID]]) { echo "🔄 Checking/Bootstrapping Terraform backend..." dir(tfBackendDir) { - try { - sh """ + def exitCode = sh( + script: """ terraform init \\ -var="aws_region=${TF_VAR_aws_region}" \\ -var="backend_bucket_name=${TF_BACKEND_BUCKET}" \\ @@ -74,15 +74,27 @@ pipeline { -var="aws_region=${TF_VAR_aws_region}" \\ -var="backend_bucket_name=${TF_BACKEND_BUCKET}" \\ -var="lock_table_name=${TF_DDB_TABLE}" - """ + """, + returnStatus: true + ) + + if (exitCode == 0) { echo "✅ Terraform backend created successfully" - } catch (Exception e) { - if (e.getMessage().contains("BucketAlreadyOwnedByYou") || - e.getMessage().contains("Table already exists")) { + } else { + echo "⚠️ Terraform apply failed, checking if resources already exist..." + def bucketCheck = sh( + script: "aws s3api head-bucket --bucket ${TF_BACKEND_BUCKET} --region ${TF_VAR_aws_region} 2>/dev/null && echo 'exists' || echo 'missing'", + returnStdout: true + ).trim() + def tableCheck = sh( + script: "aws dynamodb describe-table --table-name ${TF_DDB_TABLE} --region ${TF_VAR_aws_region} 2>/dev/null && echo 'exists' || echo 'missing'", + returnStdout: true + ).trim() + + if (bucketCheck == "exists" && tableCheck == "exists") { echo "✅ Terraform backend already exists - continuing..." } else { - echo "❌ Unexpected error during backend bootstrap: ${e.getMessage()}" - throw e + error("❌ Backend bootstrap failed and resources don't exist. Manual intervention required.") } } }