우리 회사의 CI/CD 현황

CI/CD란

간략하게 이야기한다면 CI(Continuous Integration)은 어플리케이션의 소스 코드가 변경되어 커밋될 때 빌드와 테스트가 자동으로 이루어지는 것을 의미하고, Continuous Delivery는 CI를 통해 검증된 코드가 자동으로 공용 레포지토리에 병합되는 것을, Continuous Deployment는 Continuous Delivery를 통해 병합된 코드가 자동으로 프로덕션 환경에 배포되는 것을 의미한다.

CD 테스트 설정

지금까지의 배포는 크게 1) 어플리케이션 빌드, 2) 도커 이미지 생성, 3) 쿠버네티스에 배포 총 3가지 단계로 이루어졌다. 하지만 이제 배포 시 테스트를 진행을 추가하기로 하였으므로, CI 설정에서 테스트 단계를 새로 넣어주도록 하자.

  1. 어플리케이션 빌드
  2. 테스트 진행
  3. 도커 이미지 생성
  4. 쿠버네티스에 배포

Jenkins를 통한 CD 설정

우리 회사는 Jenkins를 사용해 CD 절차를 설정해 두었다. 젠킨스는 Jenkinsfile이라는 배포 파이프라인 스크립트 파일을 생성하여 배포 절차에 필요한 단계를 설정할 수 있다.

Jenkinsfilegroovy라는 언어 베이스로 작성된 배포 파이프라인 스크립트이다. 말 그대로 배포 프로세스가 따라가는 과정(파이프라인)이 작성된 코드가 들어가 있는 파일이다. 이 때 배포 과정에서 밟게 되는 과정들은 Stage라는 단위로 나뉘어지고, 각 스테이지는 Step이라는 개별 작업들이 모여 이루어진다. Jenkinsfile은 간단하게 어플리케이션 빌드 → 테스트 → 배포의 스테이지들로 구성되는 것이 기본이다(참고).

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                //
            }
        }
        stage('Test') {
            steps {
                //
            }
        }
        stage('Deploy') {
            steps {
                //
            }
        }
    }
}

우리는 build.sh라는 쉘 스크립트 파일에 각 배포 스테이지와 스텝에 해당하는 작업 스크립트들을 작성한 후, Jenkinsfile에서 배포 스테이지에 맞추어 해당 스크립트를 실행하는 방식으로 배포 스크립트가 구성되어 있다.

  1. 어플리케이션 빌드, 2) 테스트 진행, 3) 도커 이미지 생성, 4) 쿠버네티스에 배포 총 4가지 단계로 배포를 진행할 것이므로, Jenkinsfile에서 다음과 같이 빌드와 이미지 생성 사이에 새로운 스테이지를 추가한다.