1. AWS CI/CD(CodeCommit, CodeBuild, Codedeploy) with ECS
2. AWS CI/CD(CodeCommit) with ECS
3. AWS CI/CD(CodeBuild) with ECS
4. AWS CI/CD with ECS - ECS 만들기
5. AWS CI/CD with ECS - ECS Service 만들기
6. AWS CI/CD(Code Deploy&Code Pipeline) with ECS
Build spec 변경
- CodeCommit Console 접속 > 왼쪽 메뉴의 소스 > 리포지토리
- 리포지토리 리스트 > cicd-demo 선택
- buildspec.yaml 파일 아래와 같이 편집
version: 0.2
phases:
install:
runtime-versions:
java: corretto17
pre_build:
commands:
- echo Logging in to Amazon ECR...
- docker --version
- aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com
build:
commands:
- echo Build started on `date`
- echo Building the Docker image...
- cd spring-petclinic-main
- sudo chmod 777 mvnw
- echo $IMAGE_REPO_NAME
- echo $IMAGE_TAG
- ./mvnw package
- docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG .
- docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
post_build:
commands:
- echo Build completed on `date`
- echo Pushing the Docker image...
- docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
- printf '[{"name":"cicd-demo","imageUri":"%s"}]' $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG > $CODEBUILD_SRC_DIR/imagedefinitions.json
artifacts:
files:
- imagedefinitions.json
cache:
paths:
- '/root/.m2/**/*'
- 이미지의 이름과 주소를 imagedefinitions.json 파일에 쓰기 및 생성
- imagedefinitions.json 파일을 artifacts file에 추가
파이프라인 구성(Rolling Update)
- CodePipeline 콘솔에 접속 > 왼쪽 메뉴의 파이프라인 > 파이프라인 선택
- 메인 화면 > 파이프라인 생성 버튼 선택
파이프라인 설정 선택
- 파이프라인 이름 > cicd-demo 입력
- 서비스 역할 > 새 서비스 역할 선택
- 역할 이름 > codepipeline-cicd-demo-role > 다음 버튼 선택
소스 스테이지 추가
빌드 스테이지 추가
배포 스테이지 추가
파이프라인 완료!!!!
https://yunsangjun.github.io/cloud/2019/06/22/aws-cicd04.html
<에러 사항>
🧨ECR 에러 발생
ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve ecr registry auth: service call has been retried 3 time(s): RequestError: send request failed caused by:
해결: VPC ENDPOINT 설정
🧨code deploy에서 build 할때 에러 발생
Phase context status code: CLIENT_ERROR Message: no matching artifact paths found
해결
- printf '[{"name":"your_container_name1","imageUri":"%s"},{"name":"your_container_name2","imageUri":"%s"}]' $YOUR_REPOSITORY1_URI:$YOUR_IMAGE1_TAG $YOUR_REPOSITORY2_URI:$YOUR_IMAGE2_TAG > $CODEBUILD_SRC_DIR/imagedefinitions.json
artifacts:
files: imagedefinitions.json
위와 같이 작성해줌