IT/Infra&Cloud

실습편 - GCP Cloud Build로 CI/CD 구축하기

Hayley Shim 2023. 10. 28. 17:34

GCP Cloud Build를 이용하여 CI/CD 구축하기

요즘 CI/CD 파이프라인을 구축하는 것이 당연시되고있다. 지속적인 서비스 개선을 위해 반드시 필요한 개발 환경이다.

CI(Continous Integration) : 개발자들의 코드를 지속적으로 통합해주며 버그를 신속하게 찾고, SW 품질을 개선하고, 새로운 업데이트의 검증 및 릴리즈 시간을 단축시킬 수 있다.

CD(Continous Deployment) : 관계부서(기획,디자인,마케팅 등)에 지속적으로 서비스를 제공 또는 배포해줄 수 있다. 이는 고객의 프로덕션 환경까지 릴리즈 되는 것을 말한다.

Jenkins, Travis CI, Github Function 등 기존에 많은 툴들이 있지만 GCP 서비스 중 Cloud Build를 활용하여 간편히 CI/CD 환경을 구축해봤다.

1.간단한 앱 및 Dockerfile 준비

- 서비스에 배포할 간단한 서비스 앱을 만든다.

- 테스트 : python flask 앱 작성

- 작성한 앱을 컨테이너로 말아줄 Dockerfile을 작성한다.

2.cloudbuild-ci.yaml 작성

CI 작업을 위해 cloudbuild-ci.yaml 파일을 작성해준다.

3.cloudbuild-cd.yaml 작성

배포할 수 있는 GCP 리소스는 아래와 같다. 우선 컨테이너 이미지를 가지고 간단히 배포해볼 수 있는 Cloud Run 서비스를 사용했다.

- GKE 배포

- Cloud Run 배포

- App Engine 배포

- Cloud Functions 배포

- Firebase 배포

위 소스 코드는 다음 깃헙 레포를 참고하자 : GCP CICD

4.Github Push

$ git add .                                                      
$ git commit -m "cicd test"                     
$ git push origin main

 

5.cloud build와 Github 저장소 연결

6.cloud build 트리거 만들기

7.cloud build 설정

8.CI 테스트

main 브랜치에서 test 브랜치를 만든 뒤, 앱 서비스의 코드 일부를 수정한 후 test 브랜치에서 push 한다.

github에서 test->main으로 PR을 날린다.

$ git checkout -b test 

 

$ git add .                                                      
$ git commit -m "cicd test"                     
$ git push origin test

9.CI Error 발생

빌드하는 과정에서 에러가 발생했다.

Cloud Build 기록에서 해당 빌드 ID에서 로그를 확인해준다

이 경우,python black의 버전 에러였다.참고 : ImportError: cannot import name '_unicodefun' from 'click'

에러가 없으면 정상적으로 build가 완료된 것을 확인할 수 있다.

10.CD 테스트

PR을 merge해주고 CD를 진행한다.

11. 웹 페이지 정상 접속 확인

배포한 서비스에 정상적으로 접속할 수 있다.

CI/CD 환경 구축을 통해 코드 통합과 배포를 간편히 할 수 있었다.


[Reference]

GCP Cloud Build 이용한 CI/CD 구축

 

GCP - cloud build 이용하여 ci/cd 구축하기

구글 서비스의 documentation 은 참 잘 되어있다고 느끼면서도.. 참 어렵게 만들었다는 생각이 늘 든다. 그대로 따라하다보면 뭔가 잘 안되는 것도 있고, 이 페이지 참고하라.. 저 페이지 참고하라..

dailyheumsi.tistory.com

 

 

blog migration project

written in 2022.4.2

https://hayleyshim.github.io/blog/gcp12