1. Jenkins 란? (Freestyle Project vs Pipeline Project)

Jenkins란

Jenkins란 소프트웨어 개발 시 지속적인 통합(Continuous integration)을 제공해 주는 도구.

더불어 지속적인 배포 환경까지 구축할 수 있는 도구.

Jenkins와 같은 CI 도구의 등장 전에는 일정 시간마다 스케쥴러 등을 활용하여 빌드를 실행하는 방식이 일반적.

개발자들이 당일 수정한 코드가 반영되는 되는 심야 시간대(유저의 사용이 적은 시간)에 이러한 빌드 타이머(스케쥴러)가 집중적으로 실행되었는데 이것을 Nightly-Build라고 함.

Jenkins는 코드의 통합 부터 빌드, 테스트(SonarQube 등), 배포 프로세스를 자동화하여 개발자의 시간 절약과 개발 생산성을 높임.

Git과 같은 형상관리 시스템과 연동하여 커밋을 감지하면(WebHook 등을 활용) 빌드가 작동되도록 설정도 할 수 있음.


장점

  1. 프로젝트 표준 컴파일 환경에서 컴파일 오류 검출
  2. 자동화 테스트 수행
  3. 정적 코드 분석(SonarQube 등 )에 의한 코딩 규약 순수 여부 체크
  4. 프로파일링 툴을 이용한 소스변경에 따른 성능 변화 감지
  5. 결합 테스트 환경에 대한 배포 작업

Jenkins의 CI/CD 동작 과정

  1. 개발자 Local에서 소스 코드 변경 후 Git, GitLab 등 레포지토리에 해당 코드 반영
  2. Jenkins는 스케줄러 or WebHook 등과 같은 방식을 활용하여 소스코드의 변경을 감지
  3. Jenkins에 작성된 내용을 기준으로 빌드 및 테스트 등을 통한 배포.

Jenkins Plugins(많이 사용되는 것들)

  • Credentials Plugin
    • Jenkins는 단지 서버이기 때문에 각종 리소스에 접근하기 위해서는 접근 정보(key)가 필요함.
    • Sonar token, Git(Lab) access Token, secret key, ssh 등
    • 접근 정보에 해당하는 값들을 저장하고 쉽게 활용할 수 있게 해 줌.
  • Git(Lab) Plugin
    • Jenkins에서 git(Lab)에서 코드를 가져와 빌드할 수 있게 해 줌.
  • Pipeline
    • 연속적인 작업들을 Jenkins에서 하나의 파이프라인(작업)으로 묶어서 관리할 수 있게 만드는 해줌.

Jenkins의 파이프라인

Jenkins Pipeline의 주요 항목

  • Pipeline
    • 빌드, 테스트, 배포 단계를 포함하는 전체 빌드 프로세스를 정의.
    • 선언형 파이프라인(Declarative Pipeline) 구문의 핵심 부분
    • Jenkinsfile의 시작 지점에 선언
  • Node
    • 스크립트형 파이프라인 구문의 핵심 부분
    • Jenkinsfile의 시작 지점에 선언
  • Stage
    • 전체 파이프라인 단계를 통해 수행되는 작업의 하위 작업을 정의
  • Step
    • 하나의 stage안에 작업을 정의하는 부분

선언형 파이프라인(Declarative Pipeline) 문법

Jenkinsfile을 작성하는 문법.

//Jenkinsfile
pipeline {
    agent any //Agent Sections
    stages { //Stages Sections
        stage('Example') { //Steps
            agent any
            steps {
                ...
            }
            post {  //Post Section
                failure{
                    error "Fail Cloned Repository"
                }
            }
        }

        stage('Build') {
            agent any
            steps{
              ...
            }
            post{
                failure{
                    error 'Fail Build'
                }
            }
        }
    }
}
  • Pipeline의 Sections의 구성 - Sections에 아래의 항목들이 포함된다.
    • Agent Section: 여러 slave를 두고 작업을 할 때 어떤 Jenkins 가 일을 할지 정의
    • Post Section: 각 스테이지가 끝난 후 후속 조치 기능을 정의 (ex.Success, Failure, always, cleanup)
    • Stages Section: 어떤 일을 처리할 것 인가에 대한 Stage 정의(ex. git clone, build, test, devlop)
    • Steps: 스테이지 안에서 실행할 작업을 정의
    • Declaratives: Parameter (파이프 라인 실행 시에 받을 파라미터): When (언제 실행되는지 정의)
    • : Triggers (어떤 형태로 트리거 되는지 정의)
    • : Environ ment (파이프라인 및 stage scope의 환경 변수 설정)

Jenkins Freestyle Project vs Pipeline Project

Jenkins에서 Pipeline은 한 지점에서 작업을 시작해 일렬로 혹은 여러 갈래(병렬처리)로 뻗어나갔다가 다시 한 곳으로 모이면서 마무리되는 작업의 흐름.

ex) scp를 통한 파일 전송, 서비스 서버에서 서비스 실행, 소나 큐브 실행 등 여러 갈래로 뻗어나감

Freestyle project 방식은 동작이 일렬로만 처리되는 Pipeline.

  • 구조를 자유롭게 핸들링하는데 한계가 있음(커스텀의 한계가 존재)
  • 예를 들어 한 프로젝트에서 2곳의 git repository에 접근하여야 되는 상황에서 Freestyle project은 접근 방법을 지원하지 않고 한 곳에서만 인증을 받아 clone 가능.
  • 러닝 커브가 낮고 참고자료가 많아 초심자에게 권장되는 방법임.

'Infra > Jenkins' 카테고리의 다른 글

3. Jenkins pipeline 구축 With Git AccessToken  (0) 2024.02.05
2. Jenkins 설치  (0) 2024.02.04