본문 바로가기

Back-End/Jenkins

[Jenkins] Jenkins 를 통한 CI/CD 구축 (with Node.js)

728x90

젠킨스에서 CI/CD 구축을 위해서는 아이템을 생성해야 합니다. 아이템을 만드는 방법은 FreeStyle 과 Pipeline 이 있는데, 요즘에는 FreeStyle 보다 Pipeline 을 많이 사용하고 있다고 합니다.

 

[ Pipeline 장점 ]

  • 코드로 프로젝트 설정을 할 수 있어 FreeStyle 과 다르게 젠킨스 웹에 직접 접근하지 않아도 설정을 변경할 수 있다. (웹을 통한 설정 가능)
  • CI/CD 파이프라인 설정을 하나의 스크립트 파일(Jenkinsfile)로 프로그래밍을 통해 할 수 있다.
  • FreeStyle 과 다르게 하나의 스크립트 파일(Jenkinsfile)을 통해 흐름 제어를 할 수 있다.
  • 일반 코드처럼 버전 관리가 가능하다.

FreeStyle 은 간단한 빌드 및 배포를 할 경우 사용되고, Pipeline 은 스크립트 언어인 Groovy 문법을 이용해 좀 더 구체적으로 작업들의 순서와 흐름을 정의할 수 있습니다. 작업 별로 성공 / 실패 유무와 로그를 파악하기에도 유용합니다.

 

Jenkins Pipeline 구축하기

 

Jenkins Pipeline 구축에 앞서서 node.js 플러그인을 설치하겠습니다. Jenkins 관리 > Plugin 관리 > Available plugins 으로 들어가 nodejs 플러그인을 설치해줍니다.

nodejs 플러그인 설치

 

Jenkins 관리 > Global Tool Configuration > NodeJS 섹션에서 Add NodeJS 를 클릭하여 버전을 선택하고 저장 버튼을 눌러줍니다.

 

CI 구축하기

Jenkins 를 이용한 CI 과정은 다음과 같습니다.

  1. 개발자가 수정한 코드를 GitHub 에 Push 한다.
  2. GitHub 는 이를 감지하고 Jenkins 에 GitHub Webhook 을 보낸다.
  3. Jenkins 는 GitHub Webhook 을 JSON 파일로 받고 파싱한다.
  4. 파싱하여 변화된 branch 를 파악하고 이 branch 의 코드를 clone 한다.
  5. Jenkins 에서는 빌드과정, 컴파일 > 테스트 > 패키징 을 거쳐 빌드한다.

1)  아이템 생성

맥북 터미널에서 아래 명령어를 입력하여 젠킨스를 실행합니다.

$ brew services start jenkins-lts

 

127.0.0.1:8080 으로 접속하면 아래와 같이 Jenkins 에 접속이 됩니다. 로그인을 한 후, 새로운 item 을 클릭하면 아래와 같은 페이지가 나옵니다. 생성하고자 하는 아이템의 이름을 입력하고, Pipeline 을 선택하여 아이템을 생성합니다.

jenkins item 생성

 

2)  Pipeline 프로젝트 생성

New item 을 Pipeline 프로젝트로 생성했기 때문에 아래와 같이 General, Build Triggers, Advanced Project Options, Pipeline 메뉴가 나옵니다.

  • General : 지금 만든 아이템의 일반적인 설정
  • Build Triggers : 보통 Git의 레포지토리와 젠킨스를 많이 연동하는데, 레포지토리에서 코드를 수정한 후 Push 를 했을 때 젠킨스가 자동으로 알아채서 Item 을 자동으로 빌드하는 것과 관련된 설정
  • Advanced Project Options : 옵션
  • Pipeline : 파이프라인 구현

 

[ General 설정 ]

GitHub project 체크한 후, Project url 을 작성해줍니다.

[ Build Triggers 설정 ]

스크립트를 통해 작업들을 제어하기 때문에, GitHub 의 Push 를 통해 WebHook 으로 자동 빌드할 경우 hook trigger 만 체크해줍니다.

프로젝트 설정

 

3)  스크립트 작성

파이프라인 방법은 스크립트를 작성함으로써 설정하도록 되어 있는데, 스크립트를 설정하는 2가지 방법이 있습니다.

  • Pipeline Script(default) : 젠킨스 웹 내에서 스크립트를 작성하여 관리
  • Pipeline script from SCM : 프로젝트 내에서 Jenkinsfile 에 스크립트를 작성하여 관리 (소스코드로 스크립트 작성)

 

Pipeline Script 는 2가지 타입으로 작성이 가능합니다. 두 방법 모두 Groovy 문법 기반입니다.

  • Declarative Pipeline : 쉽게 작성이 가능하며 Groovy 문법 기반이지만 해당 문법을 몰라도 작성 가능. 최상단에 pipeline 이라고 되어 있음
  • Scripted Pipeline : Groovy 문법 기반이며 Declarative 보다 효과적이고 많은 기능을 포함해서 작성할 수 있지만 Declarative Pipeline 보다 어려움. 최상단에 node 지시어가 있음

 

아래와 같이 script 를 작성하고, 저장 버튼을 눌러줍니다.

pipeline {
    agent any
    
    tools {
        nodejs '19.0.1'
    }

    stages {
        stage('Git Clone') {
            steps {
                git branch: 'main', url: 'https://github.com/jejuEdu/jenfra.git'
            }
        }
        stage('BE-Build') {
            steps {
            	dir("./server") {
                    sh "npm install"
                    sh "npm run dev"
                }
            }
        }
    }
}

 

위의 스크립트에서는 Git Clone 단계에서 Git 에 올라가 있는 프로젝트의 main 브랜치를 클론합니다. 그 후 BE-Build 단계에서는 클론한 프로젝트의 'server' 디렉터리로 이동한 후 프로젝트 빌드를 진행해 CI 작업을 수행하도록 하였습니다.

이렇게 해서, CI 구축은 완료했습니다. 설정한 파이프라인을 실행해보도록 하겠습니다.

 

4)  파이프라인 실행

생성한 파이프라인으로 들어가 좌측의 메뉴바에서 지금 빌드를 하게 되면 아래와 같이 빌드 성공 유무와 함께 각 작업의 로그를 확인할 수 있습니다.

'지금 빌드' 클릭

 

 

728x90