본문 바로가기

Jenkins

Jenkins) Jenkins에 대해서 알아보자

Jenkins는 CI/CD 파이프라인을 구축하고 관리하는데 사용됩니다.

위에 그림을 보면, jenkins는 개발자가 코드를 버전관리 툴에 업로드 하거나, 주기적으로(trigger) 빌드부터 테스팅, 배포까지 과정을 자동화하는 도구입니다.

 

CI/CD란?

CI는 Continuous Integration의 약자, 지속적 통합을 의미합니다.

변경 사항을 지속적으로 감지하고 빌드 및 테스트를 자동적으로 진행합니다. 이 과정에서 코드가 통합되는 것이 CI입니다.

 

CD는 Continuous Delivery의 약자, 지속적 배포라는 의미를 가지고 있습니다.

개발자가 코드를 수정하거나 주기적으로 자동으로 빌드, 테스트, 배포를 수행할 수 있게 도와줍니다. Jenkins를 사용하여 자동화를 함으로써 효율적으로 개발 또는 코드 관리할 수 있게 됩니다. 통합이 끝난 후 자동으로 테스트 환경 또는 프로덕션 환경에 배포하는 과정을 CD라고 합니다.

 

플러그인 (버전 관리 도구, 컨테이너 관리 도구, 빌드 시스템 도구...)

Jenkins는 다양한 플러그인을 지원함으로써 다양한 환경 속에서 지속적 통합 또는 배포가 가능합니다. 예를 들어 Git(플러그인)에 코드를 푸시하면 변경사항을 확인하고 Gradle(플러그인) 빌드 도구를 사용하여 지속적으로 통합이 가능합니다.

 

파이프라인

Jenkins에게 파이프라인은 동작 메뉴얼 같습니다. 개발자가 코드를 작성하여 어떤 방식으로 자동화 절차를 생성할지 정의할 수 있습니다. 

 

간단하게 구조를 파악할 수 있는 Jenkins 코드(Declarative pipeline)를 살펴보면서 어떤 개념들이 있는지 살펴보겠습니다.

pipeline {
    agent any

    environment {
        //소스 코드 경로, 빌드 시스템 파일 경로 지정(환경 변수 정의)
        //빌드 플래그 설정
    }

    stages {
        stage('TaskName') {
            steps {
                //'TaskName'을 수행하기 위한 작업
        }
        //...
    }
    stages {
        stage('TaskName1') {
        	environment {
        		//TaskName1에만 적용되는 환경 변수 정의
    		}
            steps {
                //'TaskName'을 수행하기 위한 작업
        }
        //...
    }
	//...
    
    post {
        success {
            // 빌드 성공 시 Slack이나 이메일 알림 전송 등
        }
        failure {
            // 빌드 실패 시 알림 전송
        }
    }
}

pipeline block

파이프라인 관련 코드들은 파이프라인 블록에 포함( pipeline{ } )되어 있어야합니다. 

agent

  • agent 블록은 파이프라인에서 작업이 실행될 실행 환경을 지정하는 데 사용
  • agent는 작업(빌드, 테스트, 배포)을 수행하는 물리적 또는 가상 머신

agent 주요 옵션

agent any     : 모든 agent에서 파이프 라인을 실행할 수 있게 하는 옵션

agent none   : 모든 stage에서 작업을 실행할 실행 환경을 지정하지 옵션

agent {label 'my-defined-label'} : 특정 label을 가진 agent만 파이프라인 실행, agent none과 함께 사용됨

pipeline {
    agent none // 에이전트를 사용하지 않음

    stages {
        stage('Build') {
            agent { label 'linux' } // 'linux' 레이블을 가진 에이전트에서만 실행
            steps {
                echo 'Building on Linux...'
                sh './build.sh'
            }
        }
    }
}

stage

  • 빌드 및 배포 프로세스를 논리적 단계로 나누는 요소
  • 각 stage라는 키워드 내에 stage 특정 작업을 수행하기 위한 작업을 수행
  • stage로 작업을 분류함으로서 stage 별 병렬 실행이 가능
  •  특정 조건에 만족할 시 특정 stage를 선택 실행이 가능

environment

  • environment 블록 내에서는 환경 변수를 정의
  • 변수에 소스 파일의 경로, gradle 파일 경로, 빌드 플래그 등을 할당 가능
  • 특정 stage에서만 환경 변수 정의가 되는 것도 가능

간단하게 Jenkinsfile에 대해서 살펴봤습니다. 다음 게시물에는 간단한 프로젝트젝트를 github에 업로드하고 실제 jenkins가 동작할 수 있는 환경을 구축하고 동작시켜보는 글을 작성 해보겠습니다. 

참고

https://docs.cloudbees.com/docs/cloudbees-ci/latest/pipeline-syntax-reference-guide/declarative-pipeline

 

Using Declarative Pipeline syntax

Declarative Pipeline is a relatively recent addition to Jenkins Pipeline [1] which presents a more simplified and opinionated syntax on top of the Pipeline sub-systems.

docs.cloudbees.com

https://phoenixnap.com/kb/what-is-jenkins

 

What Is Jenkins in CI/CD - Everything You Need To Know

Learn what Jenkins is in the CI/CD pipeline and the basic terminology needed to understand working with Jenkins.

phoenixnap.com