개요
이번에는 이어서 GCR을 이용해 CD를 구현해보자 !
CD란 지속적 배포를 의미하며, Github 저장소에 있는 code를 변경했을 경우 자동으로 새롭게 배포된다. 소스코드를 수정하여 배포해야 하는 상황들이 다수 발생하게 된다면 CD 작업은 필수다.
CD 설계에서 Deploy 시 서비스가 다운될 수 있다는 점을 주의해야 한다. GCP는 블루 그린 전략 무중단 배포를 지원하기 때문에 다운타임에 대해 걱정하지 않아도 된다 ! 👏
이번에도 Cloud Run에서 서비스를 만들거다.
아래와 같이 서비스를 만든다. 나는 프로젝트 koala에서 서비스를 만들거다.
이번에는 [소스 저장소에서 지속적으로 새 버전 배포]를 선택하고, 아래와 같이 CD를 적용할 Github 저장소를 선택한다.
GCR은 도커 기반 배포시스템이라고 했다! 배포를 위한 브랜치와 Dockerfile 경로를 선택해준다.
이후 (아래와같이 배포를 성공하지는 않겠지만) 아래와 같이 서비스가 만들어진다.
지속적 배포 수정을 누른다.
트리거를 수정하여 cloud build 구성 파일을 스캔하도록 수정한다.
이후 cloudbuild.yaml 파일을 작성해주면 자동으로 스캔하여 docker로 빌드 배포를 GCR이 알아서 해준다 !
해당 URL과 갓 블로그 를 참고하였다.
이 cloudbuild.yaml 파일을 프로젝트 상위에 잘 작성해주면
아래와 같이 build가 성공한다 !
정말 너무너무 쉽다 !! 전에 Github actions + AWS EC2 구현 당시 그래도 한 3일 정도 투자했던 것 같은데 GCR은 개념도 쉽고 과정도 쉬워서 하루면 충분했던 것 같다 👍
트러블슈팅
위에 하란대로 했는데 계속 안되는 이슈가 발생했었다.. ㅠㅠ 아래는 2시간동안 헤맨 흔적이다..
그리고 다시 로그, 버전 등을 상세하게 살펴봤다. 트리거 이름을 알 수 없다고? -> 여기에서 트리거는 "코드 변경"이라는 이벤트에 반응해 자동으로 실행되는 작업을 의미한다.
위에서 cloudbuild.yaml 파일과 대조해보며 원인을 찾기 시작했다.
빌드 세부 정보에서 나오는 에러 사항은 아래와 같았다.
generic::invalid_argument: if 'build.service_account' is specified, the build must either (a) specify 'build.logs_bucket', (b) use the REGIONAL_USER_OWNED_BUCKET build.options.default_logs_bucket_behavior option, or (c) use either CLOUD_LOGGING_ONLY / NONE logging options
이게 docker 이미지 자체가 올라오지 못하는 것을 의미한다.
이 오류를 겪은 다른 사람들의 정보에 의하면 이미지 이름(예를 들면 'gcr.io/koala-409707/koala-attendance-server:$COMMIT_SHA' ) 이 너무 길게 설정되어 이런 이슈들이 생겼다고 한다.
그래서 프로젝트 명을 줄이기 위해 koala-server에서 koala로 바꾸고.. 이런 저런 작업을 했지만 길이 이슈는 아니었고
서비스 세부정보의 이미지 URL이 아래와 같이 내가 설정한 gcr.io/koala-409707/koala-attendance-server:$COMMIT_SHA 이 아니라 gcr.io/cloudrun/placeholder~로 시작하는 것으로 보였다.
설마설마.. 하며 cloudbuild.yaml 파일의 이미지 이름을 수정하였다.
그리고 빌드에 성공하였다 ! 급하게 해결한 거라 이미지 URL이 왜 저 형식으로 저장된지 꼼꼼히 확인해보진 못했지만 시간 날 때 이유에 대해 작성해 글을 수정해보도록 하겠다. (아마도?)
'BackEnd > DEVOPS' 카테고리의 다른 글
[CICD|AWS] 무중단배포, 다운타임을 없애자! Elastic Beanstalk (0) | 2024.06.20 |
---|---|
[ELK] 텍스트를 이용해 키워드 추출 (0) | 2024.01.09 |
[Serverless|Cloud RUN] Google Cloud Run으로 JAVA WAR 파일 배포하기 (2) | 2024.01.02 |
[DEVOPS] Linux 환경에서 ELK metricbeat를 사용한 시스템 모니터링 (0) | 2023.09.02 |
[Kafka] Kafka 이론 및 실습(Window10 Local 환경) (0) | 2023.08.11 |