Articles Related
Specification
A buildspec.yml file informs AWS CodeBuild of all the actions that should be taken during a build execution for our application. We are able to divide the build execution in separate pre-defined phases for logical organization, and list the commands that will be executed on the provisioned build server performing a build execution job.
Example: buildspec.yml
version: 0.2
phases:
pre_build:
commands:
- echo Logging in to Amazon ECR...
# Retrieves docker credentials so that the subsequent docker push command is
# authorized. Authentication is performed automatically by the AWS CLI
# using the AWS credentials associated with the IAM role assigned to the
# instances in your AWS CodeBuild project.
- $(aws ecr get-login --no-include-email --region $AWS_DEFAULT_REGION)
build:
commands:
- echo Build started on `date`
- echo Building the Docker image...
- docker build -t mythicalmysfits/service:latest .
# Tag the built docker image using the appropriate Amazon ECR endpoint and relevant
# repository for our service container. This ensures that when the docker push
# command is executed later, it will be pushed to the appropriate repository.
- docker tag mythicalmysfits/service:latest $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/mythicalmysfits/service:latest
post_build:
commands:
- echo Build completed on `date`
- echo Pushing the Docker image..
# Push the image to ECR.
- docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/mythicalmysfits/service:latest
- echo Completed pushing Docker image. Deploying Docker image to AWS Fargate on `date`
# Create a artifacts file that contains the name and location of the image
# pushed to ECR. This will be used by AWS CodePipeline to automate
# deployment of this specific container to Amazon ECS.
- printf '[{"name":"MythicalMysfits-Service","imageUri":"%s"}]' $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/mythicalmysfits/service:latest > imagedefinitions.json
artifacts:
# Indicate that the created imagedefinitions.json file created on the previous
# line is to be referenceable as an artifact of the build execution job.
files: imagedefinitions.json