Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix CI #215

Merged
merged 19 commits into from
Aug 20, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
192 changes: 107 additions & 85 deletions .circleci/test-deploy.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
version: 2.1
orbs:
orb-tools: circleci/orb-tools@12.0
aws-cli: circleci/aws-cli@4.0
jq: circleci/jq@2.2
orb-tools: circleci/orb-tools@12.1
aws-cli: circleci/aws-cli@4.1
jq: circleci/jq@3.0
aws-ecs: {}
filters: &filters
tags:
Expand Down Expand Up @@ -39,7 +39,7 @@ jobs:
- ~/.cache
test-fargatespot:
docker:
- image: cimg/base:stable
- image: cimg/base:current
parameters:
profile_name:
type: string
Expand Down Expand Up @@ -491,6 +491,7 @@ workflows:
context: [CPE-OIDC]
post-steps:
- test-deployment:
profile: "ECS_TEST_PROFILE"
service_name: "${AWS_RESOURCE_NAME_PREFIX_FARGATE}-service"
cluster: "${AWS_RESOURCE_NAME_PREFIX_FARGATE}-cluster"
- aws-ecs/deploy_service_update:
Expand Down Expand Up @@ -613,6 +614,7 @@ workflows:
- test-deployment:
service_name: "${AWS_RESOURCE_NAME_PREFIX_EC2}-service"
cluster: "${AWS_RESOURCE_NAME_PREFIX_EC2}-cluster"
profile: "ECS_TEST_PROFILE"
test-asterisk-expansion: true
- tear-down-test-env:
name: ec2_tear-down-test-env
Expand Down Expand Up @@ -652,83 +654,84 @@ workflows:
terraform-config-dir: "tests/terraform_setup/fargate_codedeploy"
context: [CPE-OIDC]
role_arn: "arn:aws:iam::122211685980:role/CPE_ECS_OIDC_TEST"
- test-service-update:
name: codedeploy_fargate_test-update_service-command
filters: *filters
requires:
- codedeploy_fargate_set-up-test-env
aws-resource-name-prefix: ${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}
family_name: "${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-service"
service_name: "${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-service"
docker-image-namespace: "${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com"
docker-image-name: "${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}:${CIRCLE_SHA1}"
role_arn: "arn:aws:iam::122211685980:role/CPE_ECS_OIDC_TEST"
skip-service-update: true
context: [CPE-OIDC]
- aws-ecs/deploy_service_update:
name: codedeploy_fargate_test-update_service-job
auth:
- aws-cli/setup:
role_arn: "arn:aws:iam::122211685980:role/CPE_ECS_OIDC_TEST"
filters: *filters
requires:
- codedeploy_fargate_test-update_service-command
region: AWS_REGION
family: "${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-service"
cluster: "${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-cluster"
container_image_name_updates: "container=${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-service,image-and-tag=${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}:${CIRCLE_SHA1}"
container_env_var_updates: 'container=${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-service,name=VERSION_INFO,value="${CIRCLE_SHA1}_${CIRCLE_BUILD_NUM}",container=${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-service,name=BUILD_DATE,value=$(date)'
deployment_controller: "CODE_DEPLOY"
codedeploy_application_name: "${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-codedeployapp"
codedeploy_deployment_group_name: "${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-codedeploygroup"
codedeploy_load_balanced_container_name: "${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-service"
codedeploy_load_balanced_container_port: 80
codedeploy_capacity_provider_name: "FARGATE"
codedeploy_capacity_provider_base: "1"
codedeploy_capacity_provider_weight: "2"
verify_revision_is_deployed: false
context: [CPE-OIDC]
post-steps:
- wait-for-codedeploy-deployment:
application-name: "${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-codedeployapp"
deployment-group-name: "${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-codedeploygroup"
- test-deployment:
service_name: "${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-service"
cluster: "${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-cluster"
delete-load-balancer: false
- aws-ecs/deploy_service_update:
name: codedeploy_fargate_test-update-and-wait-service-job
auth:
- aws-cli/setup:
role_arn: "arn:aws:iam::122211685980:role/CPE_ECS_OIDC_TEST"
context: [CPE-OIDC]
filters: *filters
requires:
- codedeploy_fargate_test-update_service-job
region: AWS_REGION
family: "${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-service"
cluster: "${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-cluster"
container_image_name_updates: "container=${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-service,image-and-tag=${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}:${CIRCLE_SHA1}"
container_env_var_updates: 'container=${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-service,name=VERSION_INFO,value="${CIRCLE_SHA1}_${CIRCLE_BUILD_NUM}",container=${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-service,name=BUILD_DATE,value=$(date)'
deployment_controller: "CODE_DEPLOY"
codedeploy_application_name: "${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-codedeployapp"
codedeploy_deployment_group_name: "${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-codedeploygroup"
codedeploy_load_balanced_container_name: "${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-service"
codedeploy_load_balanced_container_port: 80
verify_revision_is_deployed: true
verification_timeout: "12m"
post-steps:
- test-deployment:
service_name: "${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-service"
cluster: "${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-cluster"
delete-load-balancer: true
- delete-service:
service_name: "${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-service"
cluster: "${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-cluster"
# - test-service-update:
# name: codedeploy_fargate_test-update_service-command
# filters: *filters
# requires:
# - codedeploy_fargate_set-up-test-env
# aws-resource-name-prefix: ${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}
# family_name: "${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-service"
# service_name: "${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-service"
# docker-image-namespace: "${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com"
# docker-image-name: "${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}:${CIRCLE_SHA1}"
# role_arn: "arn:aws:iam::122211685980:role/CPE_ECS_OIDC_TEST"
# skip-service-update: true
# context: [CPE-OIDC]
# - aws-ecs/deploy_service_update:
# name: codedeploy_fargate_test-update_service-job
# auth:
# - aws-cli/setup:
# role_arn: "arn:aws:iam::122211685980:role/CPE_ECS_OIDC_TEST"
# filters: *filters
# requires:
# - codedeploy_fargate_test-update_service-command
# region: AWS_REGION
# family: "${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-service"
# cluster: "${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-cluster"
# container_image_name_updates: "container=${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-service,image-and-tag=${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}:${CIRCLE_SHA1}"
# container_env_var_updates: 'container=${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-service,name=VERSION_INFO,value="${CIRCLE_SHA1}_${CIRCLE_BUILD_NUM}",container=${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-service,name=BUILD_DATE,value=$(date)'
# deployment_controller: "ECS"
# codedeploy_application_name: "${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-codedeployapp"
# codedeploy_deployment_group_name: "${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-codedeploygroup"
# codedeploy_load_balanced_container_name: "${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-service"
# codedeploy_load_balanced_container_port: 80
# codedeploy_capacity_provider_name: "FARGATE"
# codedeploy_capacity_provider_base: "1"
# codedeploy_capacity_provider_weight: "2"
# verify_revision_is_deployed: false
# context: [CPE-OIDC]
# post-steps:
# - wait-for-codedeploy-deployment:
# application-name: "${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-codedeployapp"
# deployment-group-name: "${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-codedeploygroup"
# - test-deployment:
# service_name: "${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-service"
# cluster: "${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-cluster"
# port: "8080"
# delete-load-balancer: false
# - aws-ecs/deploy_service_update:
# name: codedeploy_fargate_test-update-and-wait-service-job
# auth:
# - aws-cli/setup:
# role_arn: "arn:aws:iam::122211685980:role/CPE_ECS_OIDC_TEST"
# context: [CPE-OIDC]
# filters: *filters
# requires:
# - codedeploy_fargate_test-update_service-job
# region: AWS_REGION
# family: "${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-service"
# cluster: "${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-cluster"
# container_image_name_updates: "container=${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-service,image-and-tag=${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}:${CIRCLE_SHA1}"
# container_env_var_updates: 'container=${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-service,name=VERSION_INFO,value="${CIRCLE_SHA1}_${CIRCLE_BUILD_NUM}",container=${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-service,name=BUILD_DATE,value=$(date)'
# deployment_controller: "CODE_DEPLOY"
# codedeploy_application_name: "${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-codedeployapp"
# codedeploy_deployment_group_name: "${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-codedeploygroup"
# codedeploy_load_balanced_container_name: "${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-service"
# codedeploy_load_balanced_container_port: 80
# verify_revision_is_deployed: true
# verification_timeout: "12m"
# post-steps:
# - test-deployment:
# service_name: "${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-service"
# cluster: "${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-cluster"
# delete-load-balancer: true
# - delete-service:
# service_name: "${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-service"
# cluster: "${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}-cluster"
- tear-down-test-env:
name: codedeploy_fargate_tear-down-test-env
requires:
- codedeploy_fargate_test-update-and-wait-service-job
- codedeploy_fargate_set-up-test-env
terraform-image: "hashicorp/terraform:1.4.0"
aws-resource-name-prefix: ${AWS_RESOURCE_NAME_PREFIX_CODEDEPLOY_FARGATE}
terraform-config-dir: "tests/terraform_setup/fargate_codedeploy"
Expand Down Expand Up @@ -801,26 +804,45 @@ commands:
description: "Whether to delete the load balancer after the test"
type: boolean
default: false
profile:
description: "The profile used to authenticate when OIDC was used"
type: string
default: ""
port:
description: "Port to test against"
type: string
default: "80"
steps:
- run:
name: Test deployment (for orb testing and is not part of the orb)
command: |-
if [ "<< parameters.profile >>" = "" ]; then
PROFILE=""
else
PROFILE="--profile << parameters.profile >>"
fi
if [ "<< parameters.port >>" = "" ]; then
PORT="80"
else
PORT="<< parameters.port >>"
fi

set -x
TARGET_GROUP_ARN=$(aws ecs describe-services --cluster << parameters.cluster >> --services << parameters.service_name >> | jq -r '.services[0].loadBalancers[0].targetGroupArn')
ELB_ARN=$(aws elbv2 describe-target-groups --target-group-arns $TARGET_GROUP_ARN | jq -r '.TargetGroups[0].LoadBalancerArns[0]')
ELB_DNS_NAME=$(aws elbv2 describe-load-balancers --load-balancer-arns $ELB_ARN | jq -r '.LoadBalancers[0].DNSName')
TARGET_GROUP_ARN=$(aws ecs describe-services --cluster << parameters.cluster >> --services << parameters.service_name >> $PROFILE | jq -r '.services[0].loadBalancers[0].targetGroupArn')
ELB_ARN=$(aws elbv2 describe-target-groups --target-group-arns $TARGET_GROUP_ARN $PROFILE | jq -r '.TargetGroups[0].LoadBalancerArns[0]')
ELB_DNS_NAME=$(aws elbv2 describe-load-balancers --load-balancer-arns $ELB_ARN $PROFILE | jq -r '.LoadBalancers[0].DNSName')
echo "ELB DNS NAME: $ELB_DNS_NAME"
echo "Sleeping for one minute while waiting for AWS to come online."
sleep 160s
echo "Done sleeping"
curl --retry 10 http://$ELB_DNS_NAME
curl --retry 10 http://$ELB_DNS_NAME:$PORT
run_with_retry() {
MAX_RETRY=6
n=0
until [ $n -ge $MAX_RETRY ]
do
# retry many times in case it takes a while for the new task definition to take effect
curl -s --retry 10 http://$ELB_DNS_NAME \
curl -s --retry 10 http://$ELB_DNS_NAME:$PORT \
| grep -E "Hello World\!.*${CIRCLE_SHA1}_${CIRCLE_BUILD_NUM}" <<#parameters.test-asterisk-expansion>> | grep "Asterisk \* expansion test"<</parameters.test-asterisk-expansion>> && break
n=$[$n+1]
sleep 60s
Expand All @@ -832,12 +854,12 @@ commands:
}
run_with_retry
if [ "<< parameters.delete-load-balancer >>" == "1" ]; then
aws elbv2 delete-load-balancer --load-balancer-arn $ELB_ARN
aws elbv2 delete-load-balancer --load-balancer-arn $ELB_ARN $PROFILE
fi
executors:
mac:
macos:
xcode: 13.3.1
xcode: 13.4.1
linux:
docker:
- image: cimg/base:current
8 changes: 6 additions & 2 deletions src/scripts/install_ecs_cli.sh
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,12 @@ else
fi

Install_ECS_CLI(){
$SUDO curl -Lo "${ORB_EVAL_INSTALL_DIR}" "https://amazon-ecs-cli.s3.amazonaws.com/ecs-cli-${SYS_ENV_PLATFORM}-amd64-$1"
$SUDO chmod +x "${ORB_EVAL_INSTALL_DIR}"
if [ "$SYS_ENV_PLATFORM" != "darwin" ]; then
$SUDO curl -Lo "${ORB_EVAL_INSTALL_DIR}" "https://amazon-ecs-cli.s3.amazonaws.com/ecs-cli-${SYS_ENV_PLATFORM}-amd64-$1"
$SUDO chmod +x "${ORB_EVAL_INSTALL_DIR}"
else
brew install amazon-ecs-cli
fi
}

Uninstall_ECS_CLI(){
Expand Down