Skip to content

updated maven profile in pom.xml #4

updated maven profile in pom.xml

updated maven profile in pom.xml #4

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 "========================================="