Skip to content

Commit 5ffc6a6

Browse files
committed
ECS CLI integration
1 parent c245abc commit 5ffc6a6

File tree

1 file changed

+135
-31
lines changed

1 file changed

+135
-31
lines changed

master_deploy.sh

Lines changed: 135 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ volcount=0
4040
template=""
4141
TEMPLATE_SKELETON_FILE="base_template_v2.json"
4242
APP_IMAGE_NAME=""
43+
DEPLOYCATEGORY=""
4344

4445
#variable specific to EBS
4546
DOCKERRUN="Dockerrun.aws.json"
@@ -140,7 +141,24 @@ ECS_push_ecr_image() {
140141
track_error $? "ECS ECR image push"
141142
log "Docker Image published."
142143
}
143-
144+
#===============
145+
ECSCLI_push_ecr_image() {
146+
ECS_REPONAME=$1
147+
IMAGE_NAME=$2
148+
if [ -z "$IMAGE_NAME" ];
149+
then
150+
log "Image has followed standard format"
151+
else
152+
log "Image does not follow stanard format. Modifying the image and updating the ECS_TAG"
153+
docker tag $IMAGE_NAME:$ECS_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$ECS_REPONAME:$CIRCLE_BUILD_NUM
154+
ECS_TAG=$CIRCLE_BUILD_NUM
155+
fi
156+
log "Pushing Docker Image..."
157+
eval $(aws ecr get-login --region $AWS_REGION --no-include-email)
158+
docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$ECS_REPONAME:$ECS_TAG
159+
track_error $? "ECS ECR image push"
160+
log "Docker Image published."
161+
}
144162
#================
145163
portmapping() {
146164
hostport=$1
@@ -667,7 +685,9 @@ do
667685
g)
668686
SHARED_PROPERTY_FILENAME=$OPTARG
669687
;;
670-
688+
m)
689+
DEPLOYCATEGORY=$OPTARG
690+
;;
671691
?)
672692
log "additional param required"
673693
usage
@@ -719,21 +739,34 @@ download_envfile
719739
if [ "$DEPLOYMENT_TYPE" == "ECS" ]
720740
then
721741
ECS_TAG=$TAG
722-
cp $HOME/buildscript/$TEMPLATE_SKELETON_FILE .
742+
if [ "$DEPLOYCATEGORY" == "CLI" ]
743+
then
744+
if [ -z $AWS_REPOSITORY ] || [ -z $AWS_ECS_CLUSTER ] || [ -z $AWS_ECS_SERVICE ] || [ -z $ECS_TAG ];
745+
then
746+
log "Deployment varibale are not updated. Please check tag option has provided. also ensure AWS_REPOSITORY, AWS_ECS_TASK_FAMILY,AWS_ECS_CONTAINER_NAME,AWS_ECS_PORTS,AWS_ECS_CLUSTER and AWS_ECS_SERVICE ariables are configured on secret manager"
747+
usage
748+
exit 1
749+
fi
750+
DEPLOYCATEGORYNAME="ECSCLI"
751+
else
752+
cp $HOME/buildscript/$TEMPLATE_SKELETON_FILE .
723753

724-
if [ -z $AWS_REPOSITORY ] || [ -z $AWS_ECS_CLUSTER ] || [ -z $AWS_ECS_SERVICE ] || [ -z $AWS_ECS_TASK_FAMILY ] || [ -z $AWS_ECS_CONTAINER_NAME ] || [ -z $AWS_ECS_PORTS ] || [ -z $ECS_TAG ];
725-
then
726-
log "Deployment varibale are not updated. Please check tag option has provided. also ensure AWS_REPOSITORY, AWS_ECS_TASK_FAMILY,AWS_ECS_CONTAINER_NAME,AWS_ECS_PORTS,AWS_ECS_CLUSTER and AWS_ECS_SERVICE ariables are configured on secret manager"
727-
usage
728-
exit 1
729-
fi
754+
if [ -z $AWS_REPOSITORY ] || [ -z $AWS_ECS_CLUSTER ] || [ -z $AWS_ECS_SERVICE ] || [ -z $AWS_ECS_TASK_FAMILY ] || [ -z $AWS_ECS_CONTAINER_NAME ] || [ -z $AWS_ECS_PORTS ] || [ -z $ECS_TAG ];
755+
then
756+
log "Deployment varibale are not updated. Please check tag option has provided. also ensure AWS_REPOSITORY, AWS_ECS_TASK_FAMILY,AWS_ECS_CONTAINER_NAME,AWS_ECS_PORTS,AWS_ECS_CLUSTER and AWS_ECS_SERVICE ariables are configured on secret manager"
757+
usage
758+
exit 1
759+
fi
760+
DEPLOYCATEGORYNAME="AWSCLI"
761+
fi
730762
log "AWS_REPOSITORY : $AWS_REPOSITORY"
731763
log "AWS_ECS_CLUSTER : $AWS_ECS_CLUSTER"
732764
log "AWS_ECS_SERVICE_NAMES : $AWS_ECS_SERVICE"
733765
log "AWS_ECS_TASK_FAMILY : $AWS_ECS_TASK_FAMILY"
734766
log "AWS_ECS_CONTAINER_NAME : $AWS_ECS_CONTAINER_NAME"
735767
log "AWS_ECS_PORTS : $AWS_ECS_PORTS"
736768
log "ECS_TAG : $ECS_TAG"
769+
log "DEPLOY TYPE : $DEPLOYCATEGORYNAME"
737770
fi
738771
#EBS parameter validation
739772
if [ "$DEPLOYMENT_TYPE" == "EBS" ]
@@ -811,29 +844,100 @@ input_parsing_validation $@
811844

812845
if [ "$DEPLOYMENT_TYPE" == "ECS" ]
813846
then
814-
validate_update_loggroup
815-
ECS_push_ecr_image
816-
ECS_template_create_register
817-
echo "value of AWS_ECS_SERVICE " $AWS_ECS_SERVICE
818-
AWS_ECS_SERVICE_NAMES=$(echo ${AWS_ECS_SERVICE} | sed 's/,/ /g')
819-
#AWS_ECS_SERVICE_NAMES=$(echo ${AWS_ECS_SERVICE} | sed 's/,/ /g' | sed 'N;s/\n//')
820-
echo "value of AWS_ECS_SERVICE_NAMES " $AWS_ECS_SERVICE_NAMES
821-
IFS=' ' read -a AWS_ECS_SERVICES <<< $AWS_ECS_SERVICE_NAMES
822-
if [ ${#AWS_ECS_SERVICES[@]} -gt 0 ]; then
823-
echo "${#AWS_ECS_SERVICES[@]} service are going to be updated"
824-
for AWS_ECS_SERVICE_NAME in "${AWS_ECS_SERVICES[@]}"
825-
do
826-
echo "updating ECS Cluster Service - $AWS_ECS_SERVICE_NAME"
827-
ECS_deploy_cluster "$AWS_ECS_SERVICE_NAME"
828-
check_service_status "$AWS_ECS_SERVICE_NAME"
829-
#echo $REVISION
830-
done
831-
else
832-
echo "Kindly check the service name in Parameter"
833-
usage
834-
exit 1
847+
if [ "$DEPLOYCATEGORY" == "CLI" ]
848+
then
849+
eval $(aws ecr get-login --region $AWS_REGION --no-include-email)
850+
#Moving image to repository
851+
if [ -z $APP_IMAGE_NAME ];
852+
then
853+
echo "value of AWS_REPOSITORY " $AWS_REPOSITORY
854+
AWS_REPOSITORY_NAMES=$(echo ${AWS_REPOSITORY} | sed 's/,/ /g')
855+
echo "value of AWS_REPOSITORY_NAMES " $AWS_REPOSITORY_NAMES
856+
IFS=' ' read -a AWS_REPOSITORY_NAMES_ARRAY <<< $AWS_REPOSITORY_NAMES
857+
if [ ${#AWS_REPOSITORY_NAMES_ARRAY[@]} -gt 0 ]; then
858+
echo "${#AWS_REPOSITORY_NAMES_ARRAY[@]} repo push initalisation"
859+
for AWS_ECS_REPO_NAME in "${AWS_REPOSITORY_NAMES_ARRAY[@]}"
860+
do
861+
echo "updating reposioty - $AWS_ECS_REPO_NAME"
862+
ECSCLI_push_ecr_image $AWS_ECS_REPO_NAME
863+
#echo $REVISION
864+
done
865+
else
866+
echo "Kindly check the Repository name has Parameter"
867+
usage
868+
exit 1
869+
fi
870+
else
871+
#if appp images details are provided
872+
873+
echo "value of AWS_REPOSITORY " $AWS_REPOSITORY
874+
AWS_REPOSITORY_NAMES=$(echo ${AWS_REPOSITORY} | sed 's/,/ /g')
875+
echo "value of AWS_REPOSITORY_NAMES " $AWS_REPOSITORY_NAMES
876+
echo "value of image name provided " $APP_IMAGE_NAME
877+
APP_IMAGE_NAMES=$(echo ${APP_IMAGE_NAME} | sed 's/,/ /g')
878+
IFS=' ' read -a AWS_REPOSITORY_NAMES_ARRAY <<< $AWS_REPOSITORY_NAMES
879+
IFS=' ' read -a APP_IMAGE_NAMES_ARRAY <<< $APP_IMAGE_NAMES
880+
echo "AWS REPO COUNT NEED TO BE UPDATE ${#AWS_REPOSITORY_NAMES_ARRAY[@]} , APP image count provided in option ${#APP_IMAGE_NAMES_ARRAY[@]} "
881+
if [ "${#AWS_REPOSITORY_NAMES_ARRAY[@]}" = "${#APP_IMAGE_NAMES_ARRAY[@]}" ];
882+
then
883+
ecstempcount=0
884+
while [ $ecstempcount -lt ${#AWS_REPOSITORY_NAMES_ARRAY[@]} ]
885+
do
886+
echo "${AWS_REPOSITORY_NAMES_ARRAY[$count]} , ${APP_IMAGE_NAMES_ARRAY[$count]}"
887+
ECSCLI_push_ecr_image "${AWS_REPOSITORY_NAMES_ARRAY[$count]}" "${APP_IMAGE_NAMES_ARRAY[$count]}"
888+
ecstempcount=`expr $ecstempcount + 1`
889+
done
890+
else
891+
echo "Kindly check the image name in Parameter"
892+
usage
893+
exit 1
894+
fi
895+
fi
896+
# Configurong cluster
897+
ecs-cli configure --region us-east-1 --cluster $AWS_ECS_CLUSTER
898+
# updating service
899+
echo "value of AWS_ECS_SERVICE " $AWS_ECS_SERVICE
900+
AWS_ECS_SERVICE_NAMES=$(echo ${AWS_ECS_SERVICE} | sed 's/,/ /g')
901+
#AWS_ECS_SERVICE_NAMES=$(echo ${AWS_ECS_SERVICE} | sed 's/,/ /g' | sed 'N;s/\n//')
902+
echo "value of AWS_ECS_SERVICE_NAMES " $AWS_ECS_SERVICE_NAMES
903+
IFS=' ' read -a AWS_ECS_SERVICES <<< $AWS_ECS_SERVICE_NAMES
904+
if [ ${#AWS_ECS_SERVICES[@]} -gt 0 ]; then
905+
echo "${#AWS_ECS_SERVICES[@]} service are going to be updated"
906+
for AWS_ECS_SERVICE_NAME in "${AWS_ECS_SERVICES[@]}"
907+
do
908+
echo "updating ECS Cluster Service - $AWS_ECS_SERVICE_NAME"
909+
ecs-cli compose --project-name "$AWS_ECS_SERVICE_NAME" service up
910+
#echo $REVISION
911+
done
912+
else
913+
echo "Kindly check the service name in Parameter"
914+
usage
915+
exit 1
916+
fi
917+
else
918+
validate_update_loggroup
919+
ECS_push_ecr_image
920+
ECS_template_create_register
921+
echo "value of AWS_ECS_SERVICE " $AWS_ECS_SERVICE
922+
AWS_ECS_SERVICE_NAMES=$(echo ${AWS_ECS_SERVICE} | sed 's/,/ /g')
923+
#AWS_ECS_SERVICE_NAMES=$(echo ${AWS_ECS_SERVICE} | sed 's/,/ /g' | sed 'N;s/\n//')
924+
echo "value of AWS_ECS_SERVICE_NAMES " $AWS_ECS_SERVICE_NAMES
925+
IFS=' ' read -a AWS_ECS_SERVICES <<< $AWS_ECS_SERVICE_NAMES
926+
if [ ${#AWS_ECS_SERVICES[@]} -gt 0 ]; then
927+
echo "${#AWS_ECS_SERVICES[@]} service are going to be updated"
928+
for AWS_ECS_SERVICE_NAME in "${AWS_ECS_SERVICES[@]}"
929+
do
930+
echo "updating ECS Cluster Service - $AWS_ECS_SERVICE_NAME"
931+
ECS_deploy_cluster "$AWS_ECS_SERVICE_NAME"
932+
check_service_status "$AWS_ECS_SERVICE_NAME"
933+
#echo $REVISION
934+
done
935+
else
936+
echo "Kindly check the service name in Parameter"
937+
usage
938+
exit 1
939+
fi
835940
fi
836-
837941
fi
838942

839943

0 commit comments

Comments
 (0)