CI/CD와 Jenkins

Daniel Seo·2021년 3월 31일
0

Jenkins 에 대한 이해

  • CI/CD 파이프라인의 기본 개념
  • 기본적인 운영환경 (DEV, QA, PROD)이 어떻게 구성되고 운영되는지에 대한 이해
  • Jenkins의 기본 개념
  • Jenkins 를 통해 기본적인 배포 파이프라인 구축
  • 실제 AWS 기반의 클라우드 환경에서 Jenkins 를 활용하는 방법

위와 같은 내용들을 순차적으로 글로써 적어보고자 합니다.

CI/CD 란?

CI (Continuous Integration)

Continuous Integration..? 무엇을 통합한다는 뜻일까요? 바로 '코드'를 통합한다는 뜻인데 여기서 '코드'란 여러 개발자들의 코드베이스를 말합니다. 여러 개발자들이 계속해서 생산해내고 있는 코드들을 통합해주는 것을 CI라고 부르는 것이죠.

CD (Continuous Delivery)

그렇다면 CD 에서의 'delivery'는 무엇을 뜻할까요? 계속해서 무언가를 배달한다는 것인데...

여기서의 배달은 사용자에게 제품 또는 서비스를 지속적으로 배달하는데서의 배달을 의미합니다. 개발자들이 생산해내는 코드를 통합해 항상 배포가능한 상태를 유지하는 것을 의미하죠.

또는 CD 를 'Continuous Deployment' 라고도 합니다. 코드베이스를 사용자가 사용가능한 환경에서 배포하는 것을 자동화하는 것을 의미하기도 합니다.

정리를 하자면, CI/CD라는 것은 각각의 개발자들이 개발을 하는 개발 환경을 사용자가 사용 가능한 서비스로 전달하는 모든 과정을 지속 가능한 형태로 또 가능하다면 자동으로 개발자와 사용자 사이의 격차를 없애는 것이라고 할 수 있습니다. 이러한 과정에는 코드를 빌드, 테스트, 배포하는 활동들을 포함합니다.

CI/CD의 필요성

[내용필요]

Jenkins 의 등장

Jenkins 하면 떠오르는 이 아저씨... 한번쯤은 보셨을 겁니다. 집사의 모습을 하고 있는데, 다 이유가 있습니다. 우리가 소프트웨어 개발을 하는데 있어서 주요한 개발 외에 여러가지 잡다한 일들을 바로 이 Jenkins 가 담당해서 하는 것이죠.

Jenkins는 기본적으로 Java Runtime 위에서 동작하는 자동화 서버로, 빌드, 테스트, 배포 등 모든 것을 자동화 해주는 자동화 서버입니다.

Jenkins의 기본개념

  • Java Runtime Environment에서 동작
  • 다양한 플로그인들을 활용해 자동화 작업을 처리할 수 있음.
  • 일련의 자동화 작업의 순서들의 집합인 Pipeline을 통해 CI/CD 파이프라인을 구축할 수 있음.

Jenkins의 플러그인

Jenkins의 플러그인은 정말 많습니다. 대표적인 플러그인들은 아래와 같습니다.

  • Credentials Plugin : 배포에 필요한 각종 리소스 (클라우드 리소스, ssh credentials, AWS Token 등)를 관리해주는 플러그인
  • Git Plugin : Git 에 있는 코드들을 가져다 빌드하는 등
  • Pipeline : Jenkins의 핵심기능인 Pipeline을 관리할 수 있게 해주는 플러그인
  • Docker Plugin and Pipeline

처음에는 그냥 추천해주는 것을 설치하면 왠만한 파이프라인을 구성할 수 있게 됩니다.

Pipeline?

파이프라인이란 CI/CD 파이프라인을 젠킨스에 구현하기 위한 일련의 플러그인들의 집합이자 구성을 의미합니다. 즉, 여러 플러그인들을 이 파이프라인에서 용도에 맞게 사용하고 정의함으로써 파이프라인을 통해 서비스가 배포되는 것이지요.

Pipeline Syntax

파이프라인에는 여러 섹션들이 있는데요,

  • Agent section
  • Post section
  • Stages section
  • Steps section

위와 같이 크게 4개의 섹션들로 구성이 되어 있습니다.

Agent section

Agent section은 여러 Jenkins instance 중 어떤 jenkins에게 일을 시킬 것인지 결정하는 부분입니다. 여러 Slave node를 두고 일을 시킬 수도 있고, jenkins 노드 관리에서 새로 노드를 띄우거나 혹은 docker 이미지등을 통해 처리할 수도 있습니다.

Post section

Post section에서는 스테이지가 끝난 이후의 결과에 따라서 후속 조치를 취할 수 있습니다. 각 단계가 끝날때마다 성공했으면, 혹은 실패했으면 어떤 일을 해라. 이런식으로 말이죠.

post {
	// If maven was able to run the tests, even if some of the test failed, record the test results and archive the jar file.
    success: 
    	echo 'success'
     }

위와 같이 성공했을 때 콘솔로 무엇을 찍는다던지, 슬랙채널에 메시지를 전송하던지 등의 역할을 할 수 있습니다.

Stages section

Stages section 에서는 어떤 일들을 처리할 것인지 일련의 stage를 정의합니다. 실제로 빌드에 대한 스크립트 내용을 이쪽에 기술하여 순차적으로 빌드가 진행되게끔 하는 메인 파트라고 보시면 됩니다.

Steps section

Steps Section은 한 스테이지 안에서의 단계로 일련의 스텝들을 보여주는 파트입니다.

Declaratives

Declaratives 란 위 여러 섹션들 외에도 환경변수, 파라미터 등 변수 혹은 어떤 조건과 같은 것들을 묶어서 표현하는 개념이라고 생각하시면 됩니다. 아래와 같은 declarative를 보면,

  • Environment : 어떤 파이프라인이나 stage scope의 환경 변수 설정
  • Parameter : 파이프라인 실행시에 파라미터를 받음
  • Triggers : 어떤 형태로 트리거가 되는지
  • When : 언제 실행되는지

등 여러 declaratives가 있습니다.

다음 글에서는 실제로 젠킨스를 서버에 설치하고 간단한 프로젝트의 CI/CD를 구축해보겠습니다.

profile
배움을 나누는 개발자입니다

0개의 댓글