Skip to content

Commit 65e6d1e

Browse files
author
Taniya Mathur
committed
feat: enhance pipeline cleanup and notifications
Add comprehensive resource cleanup with throttling fixes and improved CodeBuild log capture in GitLab CI notifications
1 parent cee8c67 commit 65e6d1e

File tree

2 files changed

+18
-11
lines changed

2 files changed

+18
-11
lines changed

.gitlab-ci.yml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,13 +153,16 @@ integration_tests:
153153
echo "" >> pipeline_summary.txt
154154
155155
# Get CodeBuild ID from the pipeline execution
156-
BUILD_ID=$(aws codepipeline list-action-executions --pipeline-name ${IDP_PIPELINE_NAME:-idp-sdlc-deploy-pipeline} --filter pipelineExecutionId=$EXECUTION_ID --query 'actionExecutionDetails[?actionName==`Deploy`].output.executionResult.externalExecutionId' --output text 2>/dev/null || echo "")
156+
BUILD_ID=$(aws codepipeline list-action-executions --pipeline-name ${IDP_PIPELINE_NAME:-idp-sdlc-deploy-pipeline} --filter pipelineExecutionId=$EXECUTION_ID --query 'actionExecutionDetails[?actionName==`BuildAction`].output.executionResult.externalExecutionId' --output text 2>/dev/null || echo "")
157157
158158
if [ "$BUILD_ID" != "" ] && [ "$BUILD_ID" != "None" ]; then
159159
echo "CodeBuild ID: $BUILD_ID" >> pipeline_summary.txt
160+
# Extract just the build ID part (after the colon)
161+
LOG_STREAM_NAME="${BUILD_ID#*:}"
162+
echo "Log Stream: $LOG_STREAM_NAME" >> pipeline_summary.txt
160163
echo "" >> pipeline_summary.txt
161164
echo "=== CODEBUILD LOGS ===" >> pipeline_summary.txt
162-
aws logs get-log-events --log-group-name "/aws/codebuild/${IDP_PIPELINE_NAME:-idp-sdlc-deploy-pipeline}" --log-stream-name "$BUILD_ID" --limit 100 --query 'events[].message' --output text 2>/dev/null >> pipeline_summary.txt || echo "Could not retrieve CodeBuild logs" >> pipeline_summary.txt
165+
aws logs get-log-events --log-group-name "/aws/codebuild/app-sdlc" --log-stream-name "$LOG_STREAM_NAME" --limit 100 --query 'events[].message' --output text 2>/dev/null >> pipeline_summary.txt || echo "Could not retrieve CodeBuild logs" >> pipeline_summary.txt
163166
else
164167
echo "Could not find CodeBuild execution" >> pipeline_summary.txt
165168
fi

scripts/codebuild_deployment.py

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -235,21 +235,25 @@ def cleanup_stack(stack_name, pattern_name):
235235
# Always clean up orphaned resources after deletion attempt
236236
print(f"[{pattern_name}] Cleaning up orphaned resources...")
237237

238+
# Set AWS retry configuration to handle throttling
239+
os.environ['AWS_MAX_ATTEMPTS'] = '10'
240+
os.environ['AWS_RETRY_MODE'] = 'adaptive'
241+
238242
# ECR repositories
239243
stack_name_lower = stack_name.lower()
240244
run_command(f"aws ecr describe-repositories --query 'repositories[?contains(repositoryName, `{stack_name_lower}`)].repositoryName' --output text | xargs -r -n1 aws ecr delete-repository --repository-name --force", check=False)
241245

242-
# CloudWatch log groups
243-
run_command(f"aws logs describe-log-groups --log-group-name-prefix '/aws/vendedlogs/states/{stack_name}' --query 'logGroups[].logGroupName' --output text | xargs -r -n1 aws logs delete-log-group --log-group-name", check=False)
244-
run_command(f"aws logs describe-log-groups --log-group-name-prefix '/aws/lambda/{stack_name}' --query 'logGroups[].logGroupName' --output text | xargs -r -n1 aws logs delete-log-group --log-group-name", check=False)
245-
run_command(f"aws logs describe-log-groups --log-group-name-prefix '/{stack_name}' --query 'logGroups[].logGroupName' --output text | xargs -r -n1 aws logs delete-log-group --log-group-name", check=False)
246-
run_command(f"aws logs describe-log-groups --log-group-name-prefix '/aws/codebuild/{stack_name}' --query 'logGroups[].logGroupName' --output text | xargs -r -n1 aws logs delete-log-group --log-group-name", check=False)
247-
# AppSync logs (get API ID first, then delete log group)
248-
run_command(f"aws appsync list-graphql-apis --query 'graphqlApis[?contains(name, `{stack_name}`)].apiId' --output text | xargs -r -I {{}} aws logs delete-log-group --log-group-name '/aws/appsync/apis/{{}}'", check=False)
246+
# S3 buckets (empty and delete orphaned buckets)
247+
run_command(f"aws s3api list-buckets --query 'Buckets[?contains(Name, `{stack_name}`)].Name' --output text | xargs -r -n1 -I {{}} sh -c 'aws s3 rm s3://{{}} --recursive && aws s3api delete-bucket --bucket {{}}'", check=False)
248+
249+
# CloudWatch log groups (single comprehensive search)
249250
run_command(f"aws logs describe-log-groups --query 'logGroups[?contains(logGroupName, `{stack_name}`)].logGroupName' --output text | xargs -r -n1 aws logs delete-log-group --log-group-name", check=False)
250251

251-
# Clean up CloudWatch Logs Resource Policy entries for deleted log groups
252-
run_command(f"aws logs describe-resource-policies --query 'resourcePolicies[0].policyName' --output text | xargs -r aws logs delete-resource-policy --policy-name", check=False)
252+
# AppSync logs (requires separate handling due to random API IDs)
253+
run_command(f"aws appsync list-graphql-apis --query 'graphqlApis[?contains(name, `{stack_name}`)].apiId' --output text | xargs -r -I {{}} aws logs delete-log-group --log-group-name '/aws/appsync/apis/{{}}'", check=False)
254+
255+
# Clean up CloudWatch Logs Resource Policy (ignore errors if policy doesn't exist)
256+
run_command(f"aws logs describe-resource-policies --query 'resourcePolicies[0].policyName' --output text | xargs -r aws logs delete-resource-policy --policy-name || true", check=False)
253257

254258
print(f"[{pattern_name}] ✅ Cleanup completed")
255259
except Exception as e:

0 commit comments

Comments
 (0)