[CI/CD] Jenkins Pipeline 정리

김진회·2023년 4월 13일
0

CI/CD

목록 보기
6/7

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. 협업, 소통, 사용자중심

13개의 댓글

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 는 창의적인 비트 생성 게임으로, 사용자가 독특한 사운드를 조합하여 음악을 만들 수 있는 재미있는 플랫폼입니다.

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

이 글은 CI/CD 파이프라인과 Jenkins 파이프라인 구성 방법을 설명합니다. 선언형 파이프라인을 중심으로 다양한 구성 요소와 문법을 간단하게 소개하며, 개발자들이 효율적으로 파이프라인을 구축할 수 있도록 돕습니다.
또한, Sprunki Online 는 창의적인 비트 생성 게임으로, 사용자가 독특한 사운드를 조합하여 음악을 만들 수 있는 재미있는 플랫폼입니다.

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

Thank you for sharing this wonderful resource! It's really helpful and informative.

By the way, I'd like to share another great resource that I frequently use https://allfreenovel.cc/. It's a free platform offering a vast collection of Korean, Japanese, and Chinese web novels. If you enjoy reading online novels, you might want to check it out. They update daily with new chapters and everything is completely free to read.

Thanks again for your valuable sharing!

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

Thank you for sharing this wonderful resource! It's really helpful and informative.

By the way, I'd like to share another great resource that I frequently use https://allfreenovel.cc/. It's a free platform offering a vast collection of Korean, Japanese, and Chinese web novels. If you enjoy reading online novels, you might want to check it out. They update daily with new chapters and everything is completely free to read.

Thanks again for your valuable sharing!

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

Your blog has a unique blend of insight and empathy that’s hard to come by. You write in a way that makes each reader feel seen and understood, addressing real questions and concerns with clarity and kindness. You’ve created a space where learning feels enjoyable, not intimidating. Each post is a thoughtful gift, breaking down complicated topics into digestible, engaging insights. I appreciate the time and effort you pour into this blog—it’s truly a remarkable resource that I’m grateful to follow. https://sprunki-parasite.org

답글 달기
comment-user-thumbnail
2024년 12월 1일

정말 훌륭한 게시글입니다! 파이프라인에 대한 설명이 명확하고 이해하기 쉽게 잘 정리되어 있어 많은 도움이 되었습니다. 복잡한 개념을 단계별로 풀어내신 점이 정말 인상적입니다. 더 많은 정보를 찾고 싶으신 분들은 game3rb.games도 추천드립니다. 멋진 글 감사합니다!

답글 달기
comment-user-thumbnail
2024년 12월 8일

Thank you for sharing this valuable resource! Speaking of fonts, I'd like to recommend Font Generator Page (https://fontgenerator.page/) - it's a fantastic tool I recently discovered. The interface is super intuitive, and it offers great customization options for creating unique font styles. If anyone needs to generate creative fonts for their projects, it's definitely worth checking out. It has helped me a lot with my design work!

답글 달기