[CI/CD] Jenkins Pipeline 정리

김진회·2023년 4월 13일
0

CI/CD

목록 보기
6/7
post-custom-banner

0. 개요

CI/CD 파이프라인은 신버전의 SW를 제공하기 위해 수행해야 할 일련의 단계로 통합 및 테스트 단계와 배포 단계의 모니터링 및 자동화를 도입하여 개발 프로세스를 개선한다. CI/CD 구성 툴로 대표적인 jenkins의 파이프 라인 구성은 크게 3가지가 있으며, 그 중 대표적인 Pipeline script(Webadmin) 방식을 중점으로 소개한다.


1. Jenkins Pipeline 구성 방식

  • Pipeline script (Webadmin)
    • 일반적인 방식으로 Jenkins Pipeline을 생성해 Shell Script를 직접 생성하고 빌드
  • Git SCM
    • Git에 JenkinsFile을 작성하고, 빌드 시작 시 파이프라인 프로젝트에서 호출 실행
  • Blue Ocean
    • UI기반으로 시각적으로 파이프라인을 구성하면, JenkinsFile이 자동으로 생성되어 실행

2. Pipeline 구성 요소

CI/CD 파이프라인의 단계는 각기 다른 테스크 하위 집합으로 이루어져 있으며 이를 파이프라인 단계(stage)라고 부른다. 일반적인 파이프라인 단계는 다음과 같다.

  • 빌드(Build)
    • 애플리케이션을 컴파일하는 단계
  • 테스트(Test)
    • 코드를 테스트하는 단계. 이 단계를 자동화하여 효율성을 높일 수 있다.
  • 릴리스(Release)
    • 애플리케이션을 레포지토리에 제공하는 단계
  • 배포(Deploy)
    • 코드를 프로덕션에 배포하는 단계
  • 검증 및 컴플라이언스(Validation & compliance)
    • 해당 조직의 필요에 따라 결정. Clair와 같은 이미지 보안 스캔 툴을 사용하여 알려진 취약점(CVE)과 비교하는 방법으로 이미지의 품질을 보장

2. Pipeline script 문법

  • Scripted Pipeline
    • 더 많은 절차적인 코드를 작성 가능하며 커스텀한 작업이 가능해 유연함
    • 기존 파이프라인 문법이라 친숙하고 이전 버전과 호환 가능
    • 엄격한 Groovy 언어 기반으로 제한된 구문 검사
    • 더 복잡하며 많은 프로그래밍이 필요하여 작성 난이도가 높은 편
    • 전통적인 젠킨스 모델과는 맞지 않음
  • Declarative Pipeline (선언형 파이프라인)
    • 비교적 쉽게 작성 가능
    • Groovy기반이긴 하지만 groovy 문법을 잘 몰라도 됨
    • 이전 버전과 호환이 안될 수 있음

※ 문법 구조 이미지

* Scripted 문법의 경우 별도의 Step 단계를 두고 있진 않고, 실행되는 흐름을 의미한다.
* Declarative 문법에서의 빨간 박스는 필수 요소이다.

많은 분들이 심플한 Declarative Pipeline을 사용하고,
본인 또한 이 방법을 사용하기에 이 포스트에서는 해당 문법만 정리하겠다.

3. Declarative Pipeline

* 젠킨스 문법의 자세한 설명은 Docs를 참고하자 👉 젠킨스 Docs

Main) pipeline*

선언형 파이프라인 전체를 pipeline 블록으로 정의한다.

1) agent*

파이프라인 혹은 스테이지를 실행하기 위해 사용할 노드를 지정한다.

파라미터설명예시
any사용가능한 어떤 agent에서도 실행될 수 있음agent any
none파이프라인을 실행하는 동안 어떤 global agent도 할당되지 않음agent none
label제공된 label을 이용해 파이프라인 실행agent {label 'exmaple'}
nodelabel과 유사. 추가적인 옵션 추가 가능agent {node{label'example'}}
docker도커 기반 파이프라인 제공예시 링크1
dockerfile도커파일 기반 파이프라인 제공Docs 링크2

2) environment

파이프라인 환경 변수를 지정하는 디렉티브이다.

pipeline {
    agent any
    environment { 
        CC = 'clang'
    }
    stages {
        stage('Example') {
            environment { 
                AN_ACCESS_KEY = credentials('my-predefined-secret-text') 
            }
            steps {
                sh 'printenv'
            }
        }
    }
}

3) tools

파이프라인을 빌드할 때 필요한 도구들을 참조할 수 있는 디렉티브이다.
agent none으로 설정했다면 tools를 활성화 시킬 노드나 에이전트가 없기 때문에 동작하지 않는다.

pipeline {
    agent any
    tools {
        maven 'apache-maven-3.0.1' 
    }
    stages {
        stage('Example') {
            steps {
                sh 'mvn --version'
            }
        }
    }
}

4) options

파이프라인 블록 안에서 한 번만 정의할 수 있음. 옵션을 선택적으로 포함한다.

pipeline {
    agent any
    options {
        timeout(time: 1, unit: 'HOURS') 
    }
    stages {
        stage('Example') {
            steps {
                echo 'Hello World'
            }
        }
    }
}

5) triggers

어떤 종류의 트리거가 파이프라인의 빌드를 시작시킬 수 있는지 지정한다.
ex. cron 표현식 { cron('H /4 * 1-5') }

pipeline {
    agent any
    triggers {
        cron('H */4 * * 1-5')
    }
    stages {
        stage('Example') {
            steps {
                echo 'Hello World'
            }
        }
    }
}

6) parameters

매개변수를 지정한다. 지정된 매개변수는 사용자 혹은 API 호출을 통해 입력된다. 호출 방식: params.매개변수명

pipeline {
    agent any
    parameters {
        string(name: 'PERSON', defaultValue: 'Mr Jenkins', description: 'Who should I say hello to?')
        text(name: 'BIOGRAPHY', defaultValue: '', description: 'Enter some information about the person')
        booleanParam(name: 'TOGGLE', defaultValue: true, description: 'Toggle this value')
        choice(name: 'CHOICE', choices: ['One', 'Two', 'Three'], description: 'Pick something')
        password(name: 'PASSWORD', defaultValue: 'SECRET', description: 'Enter a password')
    }
    stages {
        stage('Example') {
            steps {
                echo "Hello ${params.PERSON}"
                echo "Biography: ${params.BIOGRAPHY}"
                echo "Toggle: ${params.TOGGLE}"
                echo "Choice: ${params.CHOICE}"
                echo "Password: ${params.PASSWORD}"
            }
        }
    }
}

7) libraries

공유 라이브러리는 파이프라인에서 동작하게 하기 위해 빌드한 코드의 묶음으로 파이프라인 밖의 소스코드 저장소에서 저장된다. 이 공유 라이브러리를 불러와서 코드가 이를 호출하고 사용한다.

8) stages*

step들을 정의하는 디렉티브이다.

pipeline {
    agent any
    stages {
        stage('Example') {
            steps {
                echo 'Hello World'
            }
        }
    }
    post { //stage 뒤에 써도 된다.
        always { 
            echo 'I will always say Hello again!'
        }
    }
}

8-1) steps*

stage에서 동작할 작업을 정의한다.

8-2) post

파이프라인이나 stage에서 조건부로 사용할 수 있는 하나의 섹션이다.

  • always: 항상 실행
  • changed: 현재 빌드의 상태가 이번 빌드의 상태와 달라졌다면 실행
  • success: 현재 빌드가 성공했다면 실행
  • failure: 현재 빌드가 실패했다면 실행
  • unstable: 현재 빌드의 상태가 불안하다면 실행

4. 그 외

선언적 파이프라인에서 선언적으로 표현할 수 없는 일이 생기면 해결하기 어려운데 이를 간단하게 해결하는 방법은 아래와 같다.

  • 플러그인 확인
  • 공유 라이브러리 생성
  • 코드를 파이프라인 밖에 위치시키기
  • script 문장 👉 가장 간단한 방법

Reference

젠킨스 및 Scripted 파이프라인 소개
: https://wiki.kicco.com/space/JEN/33391927
젠킨스 및 요소
: https://www.redhat.com/ko/topics/devops/what-cicd-pipeline
젠킨스 환경 변수 (Global variable)
: https://jayy-h.tistory.com/43
젠킨스 Agent 및 그 외
: https://jayy-h.tistory.com/32
: https://jojoldu.tistory.com/356
Declarative 소개 및 그 외
: https://velog.io/@seunghyeon/Jenkins-선언적Declarative-파이프라인

profile
SSAFY 7기. HMG. 협업, 소통, 사용자중심
post-custom-banner

7개의 댓글

comment-user-thumbnail
2024년 6월 19일

Declarative Pipeline은 Scripted Pipeline과 비교하여 that's not my neighbor 상대적으로 간단하게 작성할 수 있는 장점이 있습니다.

1개의 답글
comment-user-thumbnail
2024년 8월 3일

Pass4early provides a comprehensive suite of study resources designed to help you pass your exams with confidence. With expertly crafted questions, up-to-date content, and a proven track record of success, Pass4early is your key to achieving certification success. Invest in Pass4early resources today and take the next step toward reaching your professional goals. https://www.linkedin.com/pulse/pass-any-certification-dumpsexpert-ultimate-guide-mubeen-atif-cpfof/
https://www.linkedin.com/pulse/reliable-unique-braindumps-your-ultimate-guide-exam-dumpsexpert-kje3f/
https://portal.uaptc.edu/ICS/Campus_Life/Campus_Groups/Student_Life/Discussion.jnz?portlet=Forums&screen=PostView&screenType=change&id=7619fe90-39d3-4fd4-9b3e-181cae09b8ba
https://portal.uaptc.edu/ICS/Campus_Life/Campus_Groups/Student_Life/Discussion.jnz?portlet=Forums&screen=PostView&screenType=change&id=0b3cbddb-59ed-4a04-8eae-f316e7ee3b26
https://myheritage.heritage.edu/ICS/Academics/RDG/RDG__502/1920_SU-RDG__502-10/Forums.jnz?portlet=Forums&screen=PostView&screenType=change&id=500de7a8-dffb-4210-a206-3e490c01a524
https://medium.com/@homeheating_7969/dumpsexperts-testing-engine-your-ultimate-exam-preparation-tool-5d332e9c42c1
https://medium.com/@homeheating_7969/dumpsexpert-braindumps-pdf-your-essential-guide-to-certification-success-3384e6cba4ee
https://medium.com/@homeheating_7969/practice-tests-from-dumpsexpert-your-pathway-to-certification-success-0c73b77ce4b5
https://medium.com/@homeheating_7969/100-money-back-guarantee-from-dumpsexpert-terms-apply-c96f7e1ab911
https://siit.co/guestposts/amazing-dumps-for-marvelous-results-elevate-your-certification-success/
https://www.patreon.com/Pass4early
https://www.behance.net/pass4early/
https://www.pinterest.com/Pass4early/
https://dribbble.com/Pass4early/about
https://pass4early.livejournal.com/profile/
https://www.slideshare.net/zhj19140
https://disqus.com/by/disqus_jtIRBPL5zW/about/
https://www.scribd.com/user/771627464/zhj19140
https://www.4shared.com/u/ppGnKEvs/zhj19140.html
https://issuu.com/pass4early

답글 달기
comment-user-thumbnail
2024년 10월 6일

The accumulated onto your blog site despite the fact paying off acceptance just many tid little submits. Gratifying strategy for honest, I will be bookmarking before you start acquire merchandise realization spgs right in place. https://blockblast.net/

답글 달기
comment-user-thumbnail
2024년 10월 7일

Very good written article. It will be supportive to anyone who utilizes it, including me. Keep doing what you are doing – can’r wait to read more posts. online popcorn game

답글 달기
comment-user-thumbnail
2024년 10월 19일

Yes, you make a valid point. I have been using an AI Name Generator recently, and it works quite well. You might want to give it a try.

답글 달기
comment-user-thumbnail
2024년 11월 5일

이 글은 CI/CD 파이프라인에 대한 내용을 다루고 있습니다. CI/CD는 소프트웨어 개발 과정에서 통합 및 배포를 자동화하여 효율성을 높이는 방법론입니다. 특히, Jenkins의 파이프라인 구성 방식에 대해 설명하며, 선언형 문법과 스크립트 문법의 차이점도 강조하고 있습니다. 다양한 단계와 설정을 통해 개발자들이 쉽게 파이프라인을 구축할 수 있도록 돕고 있습니다.
또한, Sprunki Incredibox 는 창의적인 비트 생성 게임으로, 사용자가 독특한 사운드를 조합하여 음악을 만들 수 있는 재미있는 플랫폼입니다.

답글 달기