본문 바로가기
IT

gitlab ci/cd 개념 및 생각 정리

by uzzing' 2023. 1. 4.

gitlab ci/cd 로 변경하고자 알아본 바를 글로 남겨보고자 합니다.

CI/CD 란?

어플리케이션 개발 단계부터 배포까지 자동화를 통해서 더 효율적이고 빠르게 사용자에게 빈번히 배포할 수 있도록 하는 것을 말합니다.

ci는 Continuous Integration의 약자로 지속적인 통합을 의미하고, cd 는 지속적인 서비스 제공(Continuous Delivery) 또는 지속적인 배포(Continuous Deployment)를 의미합니다.

Continuous Integration: 지속적인 통합

오류 수정, 기능 개선 등을 통해 수정된 소스 코드가 main repository에 정기적으로 빌드, 테스트 되어 머지되는 것을 말합니다.

  • 코드 변경사항을 빈번히 머지한다.
  • merge, build, test 의 자동화

지속적인 통합이 제대로 이루어지면, 개발자들 간의 충돌 문제를 해결할 수 있어 개발 생산성이 향상됩니다.

머지되는 코드들은 자동으로 빌드, 테스트 되어 문제점을 빠르게 찾을 수 있고, 버그 수정에 용이합니다.

⇒ 코드 퀄리티 향상

Continuous Delivery: 지속적인 서비스 제공

최종적으로 사용자에게 배포하는 시점에서 수동적으로 배포하는 단계.

Continuous Deployment: 지속적인 배포

최종적으로 사용자에게 배포하는 시점에서 자동적으로 배포하는 단계.

릴리즈가 준비되자마자 사용자에게 배포할 수 있도록 모든 과정을 자동화로 만들어 배포하게 됩니다.

마지막에 배포하는 방법에 따라 Delivery, Deployment 로 달라질 수 있습니다.

 


정리

  • 정리해보면, ci는 소스 통합을 관리하고 cd 는 배포를 자유롭게 자동화를 통해 편리하게 할 수 있도록 하는 기능이다.
  • ci, cd 가 따로 사용되는 것이 아니라 하나의 일련의 과정이라 보통 ci/cd 라고 함께 사용하여 부른다.
  • ci/cd 를 제공하는 툴로는 Jenins, Buildkite, GitHub Action 등이 있다.
  • ci/cd를 사용하여 배포한다는 것은 모든 소스파일을 지속적으로 빌드, 반영을 한다는 것이다.

생각정리 (나의 경험)

기존에는 .class 파일 단위로 수정된 파일만 운영서버에 배포하는 방법을 사용했습니다. 그러나 ci/cd는 전체 소스를 전부 반영하여 코드를 관리하는 것이라는 것을 알았습니다. gitlab ci/cd 를 알아보면서 혼동스러웠던 부분을 기록하고자 합니다. 

 

기본 JavaBuilder 를 통해 CI에서 빌드하는 방법을 찾지 못하였다. 

gitlab-ci.yml 파일을 작성하면서, 많은 사이트들에서는 maven 프로젝트를 예시로 하여 maven 빌드를 통해 코드를 작성하는 것을 보았다. 그러나, 내가 관리하는 프로젝트는 이클립스에서 기본으로 제공하는 빌더를 사용하기 때문에 maven 빌드방식을 이용할 수 없었다. 그렇다고 기본으로 제공하는 JavaBuilder에 대해서 빌드하는 방식을 찾을 수 없었다.

 

Ant Builder 이용하기

빌드를 하기 위해서는 ant, maven 등의 빌더를 사용해야함을 깨달았고, 그중에서 ant 빌더는 build.xml 파일을 생성하여 설정만 잘 한다면 이를 이용해서 gitlab-ci.yml 파일을 작성할 수 있지 않을까 생각했다.

ant 빌드를 이용하여 gitlab-ci.yml 을 build 를 작성해볼것이다.

 

Deploy 테스트

또 한가지 잊고 있었던 사실로, 개발계 서버에 deploy를 하게 되면, 소스코드를 원복할 수 없으면 어떡하지라는 생각을 했다.

그런데 이거는 개발계 서버에 임시 폴더를 생성하여 경로를 다르게 설정하면 되는 부분이라서, deploy 테스트는 경로를 다르게 해서 업로드 하면 된다!

 

기타

참고로 gitlab-ci.yml 파일 작성이 어려워 하나씩 해결해나가고자

  • build
  • dev-deploy
  • master-deploy

build 부터 어떻게 작성하면 될지 고민을 했다. 하나씩 분석해나가니 확실히 의미 하나하나 분석하여 이해가 되긴 했다.

 

maven 빌드는 /class 폴더에 .class 파일을 결과물로 만드는 것 같은데, 폴더 전부가 배포될 것이다.

ant 빌드는 .war 파일 형식으로 결과물을 만들는데 모든 파일을 압축하여 이를 이용해서 배포에 사용한다고 보면 될 것 같다.

 

deploy 배포를 어떻게 하느냐에 따라 관점이 다르게 될 수 있는 듯하다.

ci/cd 는 전체 소스를 업로드하는 것이 목적인 듯 하다. 그러나 관리자에 따라, 일부 변경 소스들에 한해 반영하고자 한다면 설정할 수 있는 것 같다. 결국 말하고 싶은 것은 deploy 방식을 정해야 build 를 어떻게 진행할 것인지를 정할 수 있다는 것이다.

반응형

'IT' 카테고리의 다른 글

AWS란?  (0) 2023.01.06
Ant build 실행 시 Error  (0) 2023.01.05
[오픈소스SW 라이선스] BSD형 라이선스  (0) 2022.08.13
[오픈소스SW 라이선스] 라이선스 소개 2  (0) 2022.08.08
[오픈소스SW 라이선스] 라이선스 소개  (0) 2022.08.07

댓글