요즘 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]