updated maven profile in pom.xml #4
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Catalog - Build and Deploy to ECS | |
| on: | |
| push: | |
| branches: [ 'CF-test-ci/cd' ] | |
| workflow_dispatch: | |
| inputs: | |
| schema_version: | |
| description: 'Schema version (leave empty for latest from GitHub Packages)' | |
| required: false | |
| type: string | |
| catalog_version: | |
| description: 'Catalog version (leave empty for latest from GitHub Packages)' | |
| required: false | |
| type: string | |
| environment: | |
| description: 'Target environment' | |
| required: true | |
| default: 'test' | |
| type: choice | |
| options: | |
| - test | |
| - staging | |
| - prod | |
| env: | |
| ECR_REGISTRY: 583275065488.dkr.ecr.us-east-2.amazonaws.com | |
| ECR_REPOSITORY: catalog | |
| # TEST Environment | |
| TEST_ECS_CLUSTER: 'abdu7511-test-cloudfeeds-ecs-cluster' | |
| TEST_ECS_SERVICE: 'test-abdu7511-catalog' | |
| TEST_TASK_DEFINITION: 'test-abdu7511-catalog' | |
| TEST_CONTAINER_NAME: 'abdu7511-catalog' | |
| TEST_AWS_PROFILE: 'test' | |
| # STAGING Environment | |
| STAGING_ECS_CLUSTER: 'staging-staging-cloudfeeds-ecs-cluster' | |
| STAGING_ECS_SERVICE: 'staging-staging-catalog' | |
| STAGING_TASK_DEFINITION: 'staging-staging-catalog' | |
| STAGING_CONTAINER_NAME: 'staging-catalog' | |
| STAGING_AWS_PROFILE: 'staging' | |
| # PROD Environment | |
| PROD_ECS_CLUSTER: 'prod-cloudfeeds-ecs-cluster' | |
| PROD_ECS_SERVICE: 'prod-prod-catalog' | |
| PROD_TASK_DEFINITION: 'prod-prod-catalog' | |
| PROD_CONTAINER_NAME: 'prod-catalog' | |
| PROD_AWS_PROFILE: 'feeds' | |
| jobs: | |
| build-and-deploy: | |
| name: Build Docker & Deploy to ${{ inputs.environment }} | |
| runs-on: self-hosted | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Get versions from GitHub Packages | |
| id: get-versions | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| echo " Getting latest versions from GitHub Packages..." | |
| # Get Schema Version | |
| if [[ -n "${{ inputs.schema_version }}" ]]; then | |
| SCHEMA_VERSION="${{ inputs.schema_version }}" | |
| echo "Using provided schema version: ${SCHEMA_VERSION}" | |
| else | |
| SCHEMA_VERSION=$(curl -s -H "Authorization: token ${GITHUB_TOKEN}" \ | |
| "https://api.github.com/orgs/rackerlabs/packages/maven/com.rackspace.usage.usage-schema/versions" | \ | |
| jq -r '[.[] | select(.name | test("SNAPSHOT") | not)] | sort_by(.created_at) | reverse | .[0].name' 2>/dev/null || echo "1.138.6") | |
| echo "Using latest schema version from GitHub Packages: ${SCHEMA_VERSION}" | |
| fi | |
| # Get Catalog Version | |
| if [[ -n "${{ inputs.catalog_version }}" ]]; then | |
| CATALOG_VERSION="${{ inputs.catalog_version }}" | |
| echo "Using provided catalog version: ${CATALOG_VERSION}" | |
| else | |
| CATALOG_VERSION=$(curl -s -H "Authorization: token ${GITHUB_TOKEN}" \ | |
| "https://api.github.com/orgs/rackerlabs/packages/maven/com.rackspace.feeds.feedscatalog/versions" | \ | |
| jq -r '[.[] | select(.name | test("SNAPSHOT") | not)] | sort_by(.created_at) | reverse | .[0].name' 2>/dev/null || echo "1.138.7") | |
| echo "Using latest catalog version from GitHub Packages: ${CATALOG_VERSION}" | |
| fi | |
| echo "SCHEMA_VERSION=${SCHEMA_VERSION}" >> $GITHUB_OUTPUT | |
| echo "CATALOG_VERSION=${CATALOG_VERSION}" >> $GITHUB_OUTPUT | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "##Versions Selected" >> $GITHUB_STEP_SUMMARY | |
| echo "- **Schema**: \`${SCHEMA_VERSION}\`" >> $GITHUB_STEP_SUMMARY | |
| echo "- **Catalog**: \`${CATALOG_VERSION}\`" >> $GITHUB_STEP_SUMMARY | |
| echo "- **Environment**: \`${{ inputs.environment }}\`" >> $GITHUB_STEP_SUMMARY | |
| - name: Set environment-specific variables | |
| id: set-env-vars | |
| run: | | |
| ENV="${{ inputs.environment }}" | |
| echo "ENVIRONMENT=${ENV}" >> $GITHUB_ENV | |
| case "${ENV}" in | |
| test) | |
| echo "AWS_PROFILE=${{ env.TEST_AWS_PROFILE }}" >> $GITHUB_ENV | |
| echo "ECS_CLUSTER=${{ env.TEST_ECS_CLUSTER }}" >> $GITHUB_ENV | |
| echo "ECS_SERVICE=${{ env.TEST_ECS_SERVICE }}" >> $GITHUB_ENV | |
| echo "TASK_DEFINITION=${{ env.TEST_TASK_DEFINITION }}" >> $GITHUB_ENV | |
| echo "CONTAINER_NAME=${{ env.TEST_CONTAINER_NAME }}" >> $GITHUB_ENV | |
| ;; | |
| staging) | |
| echo "AWS_PROFILE=${{ env.STAGING_AWS_PROFILE }}" >> $GITHUB_ENV | |
| echo "ECS_CLUSTER=${{ env.STAGING_ECS_CLUSTER }}" >> $GITHUB_ENV | |
| echo "ECS_SERVICE=${{ env.STAGING_ECS_SERVICE }}" >> $GITHUB_ENV | |
| echo "TASK_DEFINITION=${{ env.STAGING_TASK_DEFINITION }}" >> $GITHUB_ENV | |
| echo "CONTAINER_NAME=${{ env.STAGING_CONTAINER_NAME }}" >> $GITHUB_ENV | |
| ;; | |
| prod) | |
| echo "AWS_PROFILE=${{ env.PROD_AWS_PROFILE }}" >> $GITHUB_ENV | |
| echo "ECS_CLUSTER=${{ env.PROD_ECS_CLUSTER }}" >> $GITHUB_ENV | |
| echo "ECS_SERVICE=${{ env.PROD_ECS_SERVICE }}" >> $GITHUB_ENV | |
| echo "TASK_DEFINITION=${{ env.PROD_TASK_DEFINITION }}" >> $GITHUB_ENV | |
| echo "CONTAINER_NAME=${{ env.PROD_CONTAINER_NAME }}" >> $GITHUB_ENV | |
| ;; | |
| esac | |
| - name: Display build parameters | |
| run: | | |
| echo "=========================================" | |
| echo "Catalog Build & Deploy" | |
| echo "=========================================" | |
| echo "Environment: ${{ env.ENVIRONMENT }}" | |
| echo "Schema Version: ${{ steps.get-versions.outputs.SCHEMA_VERSION }}" | |
| echo "Catalog Version: ${{ steps.get-versions.outputs.CATALOG_VERSION }}" | |
| echo "" | |
| echo "Using existing configuration:" | |
| echo " Java: $(java -version 2>&1 | head -n 1)" | |
| echo " Maven: $(mvn -version | head -n 1)" | |
| echo " Maven Settings: ~/.m2/settings.xml" | |
| echo "" | |
| echo "AWS Configuration:" | |
| echo " ECR Profile: tf_user" | |
| echo " ECS Profile: ${{ env.AWS_PROFILE }}" | |
| echo "" | |
| echo "ECS Configuration:" | |
| echo " Cluster: ${{ env.ECS_CLUSTER }}" | |
| echo " Service: ${{ env.ECS_SERVICE }}" | |
| echo " Container: ${{ env.CONTAINER_NAME }}" | |
| echo "=========================================" | |
| - name: Log in to Amazon ECR | |
| run: | | |
| echo " Logging into ECR using tf_user profile..." | |
| aws ecr get-login-password --region us-east-2 --profile tf_user | \ | |
| docker login --username AWS --password-stdin ${{ env.ECR_REGISTRY }} | |
| echo " ECR login successful" | |
| - name: Build Docker image | |
| env: | |
| TOKEN: ${{ secrets.TOKEN }} | |
| run: | | |
| export IMAGE_TAG=${{ env.ENVIRONMENT }}-$(date +%Y%m%d%H%M%S) | |
| echo "IMAGE_TAG=$IMAGE_TAG" >> $GITHUB_ENV | |
| export NEW_IMAGE_URI="${{ env.ECR_REGISTRY }}/${{ env.ECR_REPOSITORY }}:$IMAGE_TAG" | |
| echo "NEW_IMAGE_URI=$NEW_IMAGE_URI" >> $GITHUB_ENV | |
| echo " Building Docker image..." | |
| echo " Tag: $IMAGE_TAG" | |
| echo " Schema: ${{ steps.get-versions.outputs.SCHEMA_VERSION }}" | |
| echo " Catalog: ${{ steps.get-versions.outputs.CATALOG_VERSION }}" | |
| echo " Environment: ${{ env.ENVIRONMENT }}" | |
| docker build \ | |
| --build-arg SCHEMA_VERSION=${{ steps.get-versions.outputs.SCHEMA_VERSION }} \ | |
| --build-arg catalog_version=${{ steps.get-versions.outputs.CATALOG_VERSION }} \ | |
| --build-arg TOKEN=${TOKEN} \ | |
| --build-arg ENVIRONMENT=${{ env.ENVIRONMENT }} \ | |
| -f docker/Dockerfile \ | |
| -t catalog:$IMAGE_TAG . | |
| if [ $? -ne 0 ]; then | |
| echo " Docker build failed" | |
| exit 1 | |
| fi | |
| docker tag catalog:$IMAGE_TAG $NEW_IMAGE_URI | |
| echo " Docker image built: $NEW_IMAGE_URI" | |
| - name: Push Docker image to ECR | |
| run: | | |
| echo " Pushing image to ECR..." | |
| docker push $NEW_IMAGE_URI | |
| if [ $? -ne 0 ]; then | |
| echo " Docker push failed" | |
| exit 1 | |
| fi | |
| echo " Image pushed: $NEW_IMAGE_URI" | |
| - name: Update ECS task definition and deploy | |
| run: | | |
| echo " Updating ECS task definition..." | |
| echo " Using ECS profile: ${{ env.AWS_PROFILE }}" | |
| echo " Task Definition: ${{ env.TASK_DEFINITION }}" | |
| echo " Container: ${{ env.CONTAINER_NAME }}" | |
| # Get current task definition | |
| aws ecs describe-task-definition \ | |
| --task-definition ${{ env.TASK_DEFINITION }} \ | |
| --profile ${{ env.AWS_PROFILE }} \ | |
| --region us-east-2 \ | |
| --query 'taskDefinition | {containerDefinitions: containerDefinitions, family: family, taskRoleArn: taskRoleArn, executionRoleArn: executionRoleArn, networkMode: networkMode, volumes: volumes, placementConstraints: placementConstraints, requiresCompatibilities: requiresCompatibilities, cpu: cpu, memory: memory}' \ | |
| --output json > task-def-template.json | |
| if [ $? -ne 0 ]; then | |
| echo " Failed to get task definition" | |
| exit 1 | |
| fi | |
| # Update container image | |
| echo " Updating image for container: ${{ env.CONTAINER_NAME }}" | |
| sed -i.bak "/"name": "${{ env.CONTAINER_NAME }}"/,/}/s|\"image\": \".*\"|\"image\": \"$NEW_IMAGE_URI\"|" task-def-template.json | |
| # Verify the change | |
| echo " Verifying update..." | |
| grep -A 3 "${{ env.CONTAINER_NAME }}" task-def-template.json | grep "image" | |
| # Register new task definition | |
| echo " Registering new task definition..." | |
| NEW_TASK_DEF_ARN=$(aws ecs register-task-definition \ | |
| --cli-input-json file://task-def-template.json \ | |
| --profile ${{ env.AWS_PROFILE }} \ | |
| --region us-east-2 \ | |
| --query 'taskDefinition.taskDefinitionArn' \ | |
| --output text) | |
| if [ $? -ne 0 ]; then | |
| echo " Failed to register task definition" | |
| rm -f task-def-template.json task-def-template.json.bak | |
| exit 1 | |
| fi | |
| echo " New task definition: $NEW_TASK_DEF_ARN" | |
| rm -f task-def-template.json task-def-template.json.bak | |
| # Update ECS service | |
| echo " Updating ECS service..." | |
| echo " Cluster: ${{ env.ECS_CLUSTER }}" | |
| echo " Service: ${{ env.ECS_SERVICE }}" | |
| aws ecs update-service \ | |
| --cluster ${{ env.ECS_CLUSTER }} \ | |
| --service ${{ env.ECS_SERVICE }} \ | |
| --task-definition "$NEW_TASK_DEF_ARN" \ | |
| --profile ${{ env.AWS_PROFILE }} \ | |
| --region us-east-2 | |
| if [ $? -ne 0 ]; then | |
| echo " Failed to update ECS service" | |
| exit 1 | |
| fi | |
| echo " ECS service updated - deployment in progress" | |
| - name: Deployment summary | |
| if: always() | |
| run: | | |
| echo "## Catalog Deployment Summary" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "### Configuration" >> $GITHUB_STEP_SUMMARY | |
| echo "- **Environment**: \`${{ env.ENVIRONMENT }}\`" >> $GITHUB_STEP_SUMMARY | |
| echo "- **Schema Version**: \`${{ steps.get-versions.outputs.SCHEMA_VERSION }}\`" >> $GITHUB_STEP_SUMMARY | |
| echo "- **Catalog Version**: \`${{ steps.get-versions.outputs.CATALOG_VERSION }}\`" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "### Infrastructure" >> $GITHUB_STEP_SUMMARY | |
| echo "- **Docker Image**: \`$NEW_IMAGE_URI\`" >> $GITHUB_STEP_SUMMARY | |
| echo "- **ECR Profile**: \`tf_user\`" >> $GITHUB_STEP_SUMMARY | |
| echo "- **ECS Profile**: \`${{ env.AWS_PROFILE }}\` (cross-account)" >> $GITHUB_STEP_SUMMARY | |
| echo "- **ECS Cluster**: \`${{ env.ECS_CLUSTER }}\`" >> $GITHUB_STEP_SUMMARY | |
| echo "- **ECS Service**: \`${{ env.ECS_SERVICE }}\`" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| if [ "${{ job.status }}" == "success" ]; then | |
| echo "### Status: Deployment Successful" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "The Catalog service is being deployed to ECS." >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "**Monitor deployment:**" >> $GITHUB_STEP_SUMMARY | |
| echo "\`\`\`bash" >> $GITHUB_STEP_SUMMARY | |
| echo "aws ecs describe-services \\" >> $GITHUB_STEP_SUMMARY | |
| echo " --cluster ${{ env.ECS_CLUSTER }} \\" >> $GITHUB_STEP_SUMMARY | |
| echo " --services ${{ env.ECS_SERVICE }} \\" >> $GITHUB_STEP_SUMMARY | |
| echo " --profile ${{ env.AWS_PROFILE }} \\" >> $GITHUB_STEP_SUMMARY | |
| echo " --region us-east-2" >> $GITHUB_STEP_SUMMARY | |
| echo "\`\`\`" >> $GITHUB_STEP_SUMMARY | |
| else | |
| echo "### Status: Deployment Failed" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "Review the logs above for error details." >> $GITHUB_STEP_SUMMARY | |
| fi | |
| - name: Deployment result | |
| if: success() | |
| run: | | |
| echo "=========================================" | |
| echo " Catalog Deployment Successful" | |
| echo "=========================================" | |
| echo "Environment: ${{ env.ENVIRONMENT }}" | |
| echo "Catalog Version: ${{ steps.get-versions.outputs.CATALOG_VERSION }}" | |
| echo "Schema Version: ${{ steps.get-versions.outputs.SCHEMA_VERSION }}" | |
| echo "Image Tag: $IMAGE_TAG" | |
| echo "ECS Cluster: ${{ env.ECS_CLUSTER }}" | |
| echo "ECS Service: ${{ env.ECS_SERVICE }}" | |
| echo "" | |
| echo "Deployment is in progress. Monitor ECS console for status." | |
| echo "=========================================" | |
| - name: Deployment failed | |
| if: failure() | |
| run: | | |
| echo "=========================================" | |
| echo " Catalog Deployment Failed" | |
| echo "=========================================" | |
| echo "Environment: ${{ env.ENVIRONMENT }}" | |
| echo "Check the logs above for error details" | |
| echo "=========================================" |