version: 0.2 env: variables: IMAGE_REPO_NAME: reinvent-trivia-backend phases: install: runtime-versions: nodejs: latest commands: - yum install -y jq - npm install -g npm@latest pre_build: commands: # Set up environment variables like image tag and repo - cd $CODEBUILD_SRC_DIR/trivia-backend - export IMAGE_TAG=build-`echo $CODEBUILD_BUILD_ID | awk -F":" '{print $2}'` - AWS_ACCOUNT_ID=`echo $CODEBUILD_BUILD_ARN | awk -F":" '{print $5}'` - ECR_REPO=$AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME - $(aws ecr get-login --no-include-email) # Consume base image from the pipeline - export BASE_IMAGE=`jq -r '.ImageURI' <$CODEBUILD_SRC_DIR_BaseImage/imageDetail.json` - sed -i "s|reinvent-trivia-backend-base:release|$BASE_IMAGE|g" Dockerfile build: commands: # Build and push Docker image - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG . - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $ECR_REPO:$IMAGE_TAG - docker push $ECR_REPO:$IMAGE_TAG # Save the Docker image digest - IMAGE_URI=`docker inspect --format='{{index .RepoDigests 0}}' $ECR_REPO:$IMAGE_TAG` - echo Built image $IMAGE_URI, pushed with tag $IMAGE_TAG - echo "{\"ImageURI\":\"$IMAGE_URI\"}" > imageDetail.json # Generate appspec and task definition files (filling in subnet IDs, security group IDs, etc) - cd infra/codedeploy-blue-green - mkdir build - npm ci - node produce-config.js -g test -s TriviaBackendTest -h TriviaBackendHooksTest - node produce-config.js -g prod -s TriviaBackendProd -h TriviaBackendHooksProd artifacts: secondary-artifacts: BuildArtifact: files: - trivia-backend/infra/codedeploy-blue-green/build/appspec-prod.json - trivia-backend/infra/codedeploy-blue-green/build/appspec-test.json - trivia-backend/infra/codedeploy-blue-green/build/task-definition-test.json - trivia-backend/infra/codedeploy-blue-green/build/task-definition-prod.json discard-paths: yes ImageDetails: files: - trivia-backend/imageDetail.json discard-paths: yes