AWS의 code pipeline을 이용해 CI/CD를 구성할 때 작성하는 buildspec.xml 입니다.
nodejs 를 이용한 서버 배포 기준입니다. 다른 스펙도 크게 다르지 않을 것 같습니다.
version: 0.2
phases:
pre_build:
commands:
- echo Logging in to Amazon ECR...
- aws --version
- aws configure set aws_access_key_id "$AWS_ACCESS_KEY_ID" --profile default
- aws configure set aws_secret_access_key "$AWS_SECRET_ACCESS_KEY" --profile default
- aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin {$AWS_ECR_URI}
- REPOSITORY_URI={$AWS_ECR_URI}/{$ECR_REPOSITORY_NAME}
- COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)
- IMAGE_TAG=${COMMIT_HASH:=latest}
build:
commands:
- echo Build started on `date`
- echo Building the Docker image...
- docker build -t $REPOSITORY_URI:latest --build-arg NODE=production .
- docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG
post_build:
commands:
- echo Build completed on `date`
- echo Pushing the Docker images...
- docker push $REPOSITORY_URI:latest
- docker push $REPOSITORY_URI:$IMAGE_TAG
- echo Writing image definitions file...
- printf '[{"name":"web","imageUri":"%s"}]' $REPOSITORY_URI:$IMAGE_TAG > imagedefinitions.json ## 여기에서 name 이 클러스터 작업정의에 나오는 컨테이너의 이름과 같아야 합니다.
- cat imagedefinitions.json
artifacts:
files: imagedefinitions.json