Post

사이드 프로젝트를 위한 Jenkins 구축하기4 - 파이프라인 문법 알아보기

사이드 프로젝트를 위한 Jenkins 구축하기4 - 파이프라인 문법 알아보기

들어가며

이번 포스트는 책 내용을 참고하지 않고, AI & 구글 검색을 통해 수행하였습니다. 제 홈서버인 ubuntu를 기반으로 하고 있습니다

계기

  • 사이드 프로젝트에서 ci/cd를 젠킨스로 선정함
    • 세팅을 많이 해보지 않는 상태로 레퍼런스가 많고, 성능이 어느정도 검증된 것을 선택하는 것이 좋다고 판단함

젠킨스 파이프라인 문법 알아보기

주요 파이프라인 문법 유형

  • 파이프라인은 앞서 알아본 바와 같이 두 가지 유형이 있다
    • 선언적 파이프라인
    • 스크립트 파이프라인

선언적 파이프라인 문법 요소

1. 기본 구조 요소

  • pipeline: 모든 선언적 파이프라인의 최상위 블록
  • agent: 파이프라인 또는 특정 단계를 실행할 환경을 지정
  • stages: 모든 stage 블록의 컨테이너
  • stage: 각 개별 단계를 정의하는 블록
  • steps: 각 stage 내에서 실행할 작업들을 정의

    2. 섹션 요소

  • environment: 환경 변수 설정을 위한 섹션
  • options: 파이프라인 옵션 설정 (예: timeout, timestamps)
  • parameters: 파이프라인 매개변수 정의
  • triggers: 파이프라인 트리거 방식 정의
  • tools: 자동으로 설치하고 PATH에 추가할 도구 지정

    3. 조건부 및 제어 구문

  • when: 조건부 실행을 위한 지시어
  • parallel: 병렬 실행을 위한 지시어
  • post: 스테이지나 파이프라인 완료 후 실행할 작업 정의 (always, success, failure 등)

스크립트 파이프라인 문법 요소

1. 기본 구조 요소

  • node: 작업이 실행될 젠킨스 에이전트를 지정하는 블록
  • stage: 파이프라인의 개별 단계를 정의

    2. Groovy 프로그래밍 요소

  • 변수 선언: def variable = value 형식으로 변수 선언
  • 조건문: if-else, switch-case 등의 일반 Groovy 조건문
  • 반복문: for, while 등의 루프 구문
  • 함수 정의: 재사용 가능한 함수 생성
  • 예외 처리: try-catch-finally 블록을 사용한 오류 처리

    3. 고급 기능

  • 클로저(Closures): Groovy의 클로저 문법을 활용한 콜백 함수
  • 병렬 처리: parallel() 함수를 사용한 병렬 작업 실행
  • 동적 단계 생성: 런타임에 동적으로 파이프라인 단계를 생성

공통 문법 요소 (DSL)

1. 기본 단계(Steps)

  • sh: 쉘 명령어 실행
  • bat: Windows 배치 명령어 실행
  • echo: 메시지 출력
  • checkout: SCM에서 코드 체크아웃
  • dir: 특정 디렉토리에서 명령 실행

    2. 고급 단계

  • withCredentials: 보안 자격 증명을 사용하는 블록
  • withEnv: 특정 환경 변수를 설정하는 블록
  • timeout: 시간 제한 설정
  • retry: 실패 시 재시도
  • emailext: 이메일 알림 전송

공유 라이브러리 문법

  • @Library: 공유 라이브러리를 가져오는 어노테이션
  • vars/: 전역 변수 및 함수를 정의하는 디렉토리
  • src/: 클래스 및 더 복잡한 코드 구조를 위한 디렉토리
  • resources/: 비코드 리소스를 저장하는 디렉토리

개인적인 궁금증1

  • stage(‘Docker Build’)에서 ‘Docker Build’는 이미 정의되어 있는 값인가?
    • 이 값들은 사용자 정의값
    • 보편적인 파이프라인 스테이지 이름을 검색함

일반적인 젠킨스 파이프라인 스테이지 유형

| 스테이지 이름 | 목적 | 일반적인 명령어 예시 | |————|——|——————-| | Checkout | 소스 코드 저장소에서 코드를 가져옴 | checkout scm, git clone | | Initialize | 환경 변수 설정 및 초기화 작업 수행 | env.BUILD_VERSION = "1.0.${BUILD_NUMBER}" | | Build | 소스 코드 컴파일 및 빌드 | mvn clean package, gradle build, npm run build | | Unit Test | 단위 테스트 실행 | mvn test, npm test, pytest | | Integration Test | 통합 테스트 실행 | mvn integration-test, npm run test:integration | | Code Analysis | 코드 품질 및 보안 취약점 분석 | sonar-scanner, eslint, checkstyle | | Security Scan | 보안 취약점 스캔 | owasp dependency-check, snyk test | | Package | 애플리케이션 패키징 | mvn package, npm pack, jar -cvf | | Publish Artifacts | 빌드 결과물 저장 | archiveArtifacts artifacts: 'target/*.jar' | | Docker Build | Docker 이미지 생성 | docker build -t myapp:${BUILD_NUMBER} . | | Docker Push | Docker 이미지를 레지스트리에 업로드 | docker push myapp:${BUILD_NUMBER} | | Deploy to Dev | 개발 환경에 배포 | kubectl apply -f k8s/dev/, helm upgrade | | Deploy to Test | 테스트 환경에 배포 | kubectl apply -f k8s/test/ | | Deploy to Staging | 스테이징 환경에 배포 | kubectl apply -f k8s/staging/ | | Deploy to Production | 프로덕션 환경에 배포 | kubectl apply -f k8s/prod/ | | Smoke Test | 배포 후 기본 기능 테스트 | curl -f https://app.example.com/health | | Performance Test | 성능 테스트 실행 | jmeter -n -t perf-test.jmx | | Approval | 수동 승인 단계 | input message: '프로덕션 배포를 승인하시겠습니까?' | | Rollback | 문제 발생 시 이전 버전으로 롤백 | kubectl rollout undo deployment/myapp | | Notification | 빌드 결과 알림 | mail to: 'team@example.com', subject: 'Build Result' | | Cleanup | 임시 파일 및 리소스 정리 | docker system prune -f, rm -rf target/ |

개인적인 궁금증2

  • stage - steps 의 관계

    stage의 값(이름)

  • stage(‘이름’) 에서 따옴표 안의 값은 관리자/개발자가 임의로 지정한 값
  • 단순히 파이프라인의 해당 단계를 식별하고 UI에 표시하기 위한 레이블이며, 특별한 기능 혹은 동작을 정의하지 않음

steps 블록

  • steps 블록은 실제로 해당 stage에서 실행할 명령어나 작업을 정의
  • 쉘 명령어, 젠킨스 플러그인 호출, 변수 설정 등 실제 작업 내용이 포함
  • 실제 기능 수행은 이 steps 내부의 명령어에 의해 이루어짐
This post is licensed under CC BY 4.0 by the author.