Skip to content
Draft
Changes from all commits
Commits
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
117 changes: 79 additions & 38 deletions buildspec.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
version: 0.2

env:
variables:
MISSION_NAME: hermes

phases:
pre_build:
commands:
Expand All @@ -15,55 +19,92 @@ phases:
- echo Linting with Black...
- black --check --diff lambda_function/
- echo ________________________________

- echo Linting with Flake...
- flake8 --count --max-line-length 100 lambda_function/
- echo ________________________________

build:
commands:
- REGION=us-east-1
- echo Login to Private ECR $REGION
- aws ecr get-login-password --region $REGION | docker login --username AWS --password-stdin 351967858401.dkr.ecr.$REGION.amazonaws.com
- echo ________________________________
- ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' --output text)
- |
set -eu

REGION=us-east-1
PUBLIC_ECR_NAMESPACE=public.ecr.aws/w5r9l1c8
LAMBDA_COMPONENT=artifacts
LAMBDA_PIPELINE=ARTIFACTS
MISSION_SLUG=$(printf '%s' "${MISSION_NAME}" | tr '_' '-')

if [ "${MISSION_NAME}" = "hermes" ]; then
ECR_REPO_NAME="sdc_aws_${LAMBDA_COMPONENT}_lambda"
BASE_IMAGE_NAME="swsoc-docker-lambda-base:latest"
REQUIREMENTS_FILE="hermes-requirements.txt"
ARCHITECTURE_PROJECT_NAME="build_sdc_aws_pipeline_architecture"
ARCHITECTURE_PROJECT_REGION="us-east-2"
else
ECR_REPO_NAME="${MISSION_NAME}_sdc_aws_${LAMBDA_COMPONENT}_lambda"
BASE_IMAGE_NAME="${MISSION_SLUG}-swsoc-docker-lambda-base:latest"
REQUIREMENTS_FILE="${MISSION_NAME}-requirements.txt"
ARCHITECTURE_PROJECT_NAME="build_${MISSION_NAME}_sdc_aws_pipeline_architecture"
ARCHITECTURE_PROJECT_REGION="${AWS_DEFAULT_REGION:-us-east-1}"
fi

if [ ! -f "lambda_function/${REQUIREMENTS_FILE}" ]; then
echo "Missing lambda_function/${REQUIREMENTS_FILE}; add it before building ${MISSION_NAME}."
exit 1
fi

ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' --output text)
echo Login to Private ECR "${REGION}"
aws ecr get-login-password --region "${REGION}" | docker login --username AWS --password-stdin "${ACCOUNT_ID}.dkr.ecr.${REGION}.amazonaws.com"
echo ________________________________

- |
BASE_IMAGE="public.ecr.aws/w5r9l1c8/swsoc-docker-lambda-base:latest"
if git describe --tags --exact-match > /dev/null 2>&1; then
echo "This is a tag push event"
ECR_REPO="$ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/sdc_aws_artifacts_lambda"
CDK_ENVIRONMENT=PRODUCTION
VERSION=`git describe --tags --exact-match`
elif [[ "${CDK_ENVIRONMENT}" == "PRODUCTION" ]]; then
echo "This is a production environment"
ECR_REPO="$ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/sdc_aws_artifacts_lambda"
CDK_ENVIRONMENT=PRODUCTION
VERSION=`date -u +"%Y%m%d%H%M%S"`
else
echo "This is a development environment"
ECR_REPO="$ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/dev-sdc_aws_artifacts_lambda"
BASE_IMAGE="public.ecr.aws/w5r9l1c8/dev-swsoc-docker-lambda-base:latest"
CDK_ENVIRONMENT=DEVELOPMENT
VERSION=`date -u +"%Y%m%d%H%M%S"`
fi
- echo ________________________________
- echo Build Docker Image
- docker build --build-arg BASE_IMAGE=$BASE_IMAGE -t $ECR_REPO:latest lambda_function/.
if git describe --tags --exact-match > /dev/null 2>&1; then
echo "This is a tag push event"
CDK_ENVIRONMENT=PRODUCTION
ECR_REPO="${ECR_REPO_NAME}"
BASE_IMAGE="${PUBLIC_ECR_NAMESPACE}/${BASE_IMAGE_NAME}"
VERSION=$(git describe --tags --exact-match)
elif [ "${CDK_ENVIRONMENT:-}" = "PRODUCTION" ]; then
echo "This is a production environment"
CDK_ENVIRONMENT=PRODUCTION
ECR_REPO="${ECR_REPO_NAME}"
BASE_IMAGE="${PUBLIC_ECR_NAMESPACE}/${BASE_IMAGE_NAME}"
VERSION=$(date -u +"%Y%m%d%H%M%S")
else
echo "This is a development environment"
CDK_ENVIRONMENT=DEVELOPMENT
ECR_REPO="dev-${ECR_REPO_NAME}"
BASE_IMAGE="${PUBLIC_ECR_NAMESPACE}/dev-${BASE_IMAGE_NAME}"
VERSION=$(date -u +"%Y%m%d%H%M%S")
fi

FULL_ECR_REPO="${ACCOUNT_ID}.dkr.ecr.${REGION}.amazonaws.com/${ECR_REPO}"
echo "Build Docker Image: ${FULL_ECR_REPO}:${VERSION}"
docker build \
--build-arg BASE_IMAGE="${BASE_IMAGE}" \
--build-arg REQUIREMENTS_FILE="${REQUIREMENTS_FILE}" \
-t "${FULL_ECR_REPO}:latest" \
lambda_function/.

- echo Tagging Docker Image...
- docker tag $ECR_REPO:latest $ECR_REPO:$VERSION
echo Tagging Docker Image...
docker tag "${FULL_ECR_REPO}:latest" "${FULL_ECR_REPO}:${VERSION}"

- echo Pushing the Docker image with Tags...
- docker push $ECR_REPO:latest
- docker push $ECR_REPO:$VERSION
- echo ________________________________
echo Pushing the Docker image with Tags...
docker push "${FULL_ECR_REPO}:latest"
docker push "${FULL_ECR_REPO}:${VERSION}"
echo ________________________________

- echo Updating Deployment
- echo ________________________________
- aws codebuild start-build --project-name arn:aws:codebuild:us-east-2:351967858401:project/build_sdc_aws_pipeline_architecture --environment-variables-override name=CDK_ENVIRONMENT,value=$CDK_ENVIRONMENT,type=PLAINTEXT
echo Updating Deployment
aws codebuild start-build \
--project-name "${ARCHITECTURE_PROJECT_NAME}" \
--region "${ARCHITECTURE_PROJECT_REGION}" \
--environment-variables-override \
name=CDK_ENVIRONMENT,value="${CDK_ENVIRONMENT}",type=PLAINTEXT \
name=MISSION_NAME,value="${MISSION_NAME}",type=PLAINTEXT \
name=LAMBDA_PIPELINE,value="${LAMBDA_PIPELINE}",type=PLAINTEXT \
name=TAG,value="${VERSION}",type=PLAINTEXT

post_build:
commands:
- echo Build Successful - Lambda Successfully Built and Pushed to ECR
- echo Build Successful - Lambda Successfully Built and Pushed to ECR