gitlab ci/cd 도입하기 - 필요성

junto·2024년 5월 25일
0

devops

목록 보기
1/9
post-thumbnail

CI/CD 필요성

이전 프로젝트 대화내용 💤

  • 각자 dev 브랜치에서 작업 브랜치를 만들어 작업을 하고 최소 주에 한 번 dev 브랜치에 반영하기로 하였다. push 하기 전 원격 저장소 변경 사항 반영하고, 빌드 성공 후에 push하기로 했으니 문제가 거의 생기지 않겠구나라는 순진한 생각을 가지고 있었다.

결론은 강제가 아니니 잘 지켜지지 않았고 정한 마감 시간이 되서야 우루루 코드 작업 사항이 반영되는 웃픈 현실:)

1. 충돌 처리 문제

2. 빌드 실패 문제

3. 반복적인 배포 작업

  • 코드를 자주 합치지 않으니, 충돌이 나면 일단 두렵다. 코드 작성 스타일이 달라 간단한 기능임에도 다른 사람이 작성한 코드를 분석하는 데 시간이 꽤나 걸린다.
  • 빌드가 실패하면 공동 코드에 반영하지 못하게 강제할 수 없었기 때문에 빌드할 때 발생하는 충돌을 서버에 배포하는 사람이 처리해야 했다. (휴먼 빌드머신)
  • 변경 사항을 서버에 반영하기 위해 위의 배포 명령어를 반복적으로 입력해야 했다. (휴먼 배포머신)
  • 이처럼 CI/CD를 도입할 이유가 분명해졌다.

어떤 CI/CD 툴을 적용해야 할까?

  • 사용할 수 있는 툴은 크게 github ci, gitlab ci, jenkins 정도로 볼 수 있었다. 사전조사해본 결과 jenkins가 만들어진지 가장 오래되어 지원하는 기능도 많고 수평적 확장에도 뛰어나고 대규모 파이프라인에서 성능도 우수하다는 것을 알았다. 그런데 기능이 많은 만큼 다른 툴보다 더 복잡해 보였다.

  • 토이프로젝트는 gitlab에서 진행되고 있었고, 어떤 툴이든 위의 3가지 문제를 해결할 수 있었다. 다만, 젠킨스 같은 경우 빌드 서버가 필요하고 빌드 서버에서 이를 설치해야 한다. gitlab-ci는 무료 사용자에게도 빌드 서버(현재 기준 한달에 400분)를 빌려준다. 그래서 .gitlab-ci.yml 작성해서 빌드를 해보았고, 그리 어렵지 않았기 때문에 gitlab 파이프라인을 사용해보기로 결정했다.

1. Gitlab에서 제공해주는 gitlab runner 사용하기

  • gitlab runner는 파이프라인 작업을 하는 가상 서버라고 생각하면 된다.
  • gitlab repository -> settings -> CI/CD -> Runners에 들어가면 사용가능한 러너 목록을 볼 수 있다.

  • gitlab에서 제공해주는 runner를 사용하게 되면 해당 러너를 사용할 때마다 새로운 VM을 받는다고 생각해야 한다. 즉, 빌드에 gradle이 필요하다면 빌드할 때마다 gradle을 설치하는 의존성 설치 작업이 필요하다.
  • .gitlab-ci.yml에서 제공하는 가상 서버의 운영체제를 확인하고 그에 맞는 패키지 관리자를 통해 필요한 의존성을 추가하면 된다.
cat /etc/os-release
stages:	# 파이프라인 단계를 지정, compile -> test 
  - compile
  - test

compile:
  stage: compile
  before_script: 
  	- # gradle 설치하기 위한 의존성 추가 & gradle 설치
  script:
    - gradle build --exclude-task test
  tags:
    - compile

test:
  stage: test
  before_script: 
    - # gradle 설치하기 위한 의존성 추가 & gradle 설치
  script:
    - gradle build test
  • 마찬가지로 도커 이미지 빌드하는 작업(build pipeline)에서는 도커 이미지가 필요하기 때문에 도커를 설치하는 스크립트를 작성해야 한다.
  • 매 스테이지가 실행될 때마다 필요한 의존성을 설치해야 하는 시간이 오래 걸린다. compile과 test를 진행할 때 대략 5분정도 걸렸다. 내 개인 서버에 gitlab-runner를 설치하고 위와 동일한 과정을 진행했을 때는 필요한 의존성을 미리 설치해두었기에 1분 이내에 파이프라인 테스트가 완료되었다.

2. 개인 서버에 gitlab runner 등록하기

  • 파이프라인에 필요한 종속성들을 빌드 서버에 미리 설치한다. (gradle, docker)
  • gitlab repository -> settings -> CI/CD -> Runners에서 gitlab runner를 등록하기 위한 URL과 register token을 제공한다.
  • https://docs.gitlab.com/runner/install/ 여기에서 운영체제에 맞게 gitlab runner를 배포 서버에 설치하고, gitlab-runner register를 통해 프로젝트에 사용할 러너를 등록할 수 있다.
  • gitlab-runner는 개인 서버에 gitlab-runner 계정으로 실행되기에 필요한 의존성 명령어를 사용할 수 있게 $PATH을 지정해주어야 한다. 예를 들어, gradle 명령어를 사용할 수 있게 아래처럼 $PATH에 추가할 수 있다.
export PATH="/home/ubuntu/.sdkman/candidates/gradle/current/bin:$PATH"

실제로 파이프라인을 작성하는 과정은 다음 포스팅을 참고!

profile
꾸준하게

0개의 댓글

관련 채용 정보