[CI/CD] #3-2 서술적 파이프라인 문법에 대해

keen.log·2024년 2월 15일
0

CI/CD

목록 보기
4/7
post-thumbnail
이 게시물은 [초보를 위한 젠킨스 2 활용 가이드 2/e]를 참고해서 작성한 내용임을 밝힙니다.

3. 서술적 파이프라인 문법

앞 장에서 젠킨스 파이프라인을 생성해 다양한 내용을 간략히 살펴봤다. 파이프라인을 정의하기 위해 서술적인 파이프라인 스크립트를 이용했다.

서술적 파이프라인 문법은 그루비(Groovy) 문법의 좀 더 간단하고 구조화된 버전이다. 단, 프로그래밍이 가능한 측면에서는 그루비가 좀 더 강력하다. 이번 장에서는 서술적 파이프라인 문법에 대해 조금 더 자세히 알아보도록 하겠다!

- 서술적 파이프라인의 기본 구조

간단히 말해서, 서술적 파이프라인은 노드(node) 블록, 스테이지(stage) 블록, 디렉티브(directive), 스텝(step)의 집합이다.

  • 하나의 노드 블록은 여러 스테이지 블록을 포함할 수 있고, 반대도 가능하다.
  • 또한 여러 스테이지를 동시에 실행할 수도 있다.

노드 블록
노드 블록은 스테이지 블록, 디렉티브, 스텝이 실행될 젠킨스 에이전트를 정의한다.

  • 노드 블록 예시
node('<parameter>'){<constituents>}
  • 노드 블록 정보
    • 정의: 스테이지, 디렉티브, 스텝이 실행될 노드
    • 구성: 여러 개의 스테이지 블록, 디렉티브 또는 스텝
    • 필수 여부: 필수
    • 파라미터: any, label

스테이지 블록
스테이지 블록은 같은 목적을 가진 스텝과 디렉티브의 모음이다.

  • 노드 블록 예시
stage('<parameter>'){<constituents>}
  • 스테이지 블록 정보
    • 정의: 스텝과 디렉티브의 모음
    • 구성: 여러 개의 노드 블록, 디렉티브 또는 스텝
    • 필수 여부: 필수
    • 파라미터: 스테이지의 이름(필수)

디렉티브
디렉티브의 가장 큰 목적은 환경 변수(environments), 옵션, 파라미터, 트리거, 툴을 제공해 노드 블록과 스테이지 블록, 스텝을 지원하는 것이다.

  • 디렉티브 정보
    • 정의: 스테이지가 실행될 노드
    • 구성: 환경 변수, 옵션, 파라미터, 트리거, 툴
    • 필수 여부: 필수가 아니지만 모든 CI/CD 파이프라인이 디렉티브를 가지고 있음
    • 파라미터: 없음

스텝
스텝은 서술적 파이프라인을 구성하는 가장 중요한 요소다.
· 스텝은 배치 스크립트, 셸 스크립트, 다른 실행 가능한 커맨드가 될 수 있다.
· 스템의 목적은 저장소를 복사하거나, 코드를 빌드하거나, 테스트를 수행하거나, 빌드 결과물을 저장소에 올리거나, 정적 코드 분석을 수행하는 것이다.

  • 스텝 정보
    • 정의: 젠킨스에서 무엇을 할지 명령을 내리는 것
    • 구성: 명령어, 스크립트 등 파이프라인의 핵심 요소
    • 필수 여부: 필수
    • 파라미터: 없음
    다음은 앞서 사용한 파이프라인 코드를 노드 블록, 스테이지 블록, 디렉티브, 스텝으로 나누어 주석을 이용해 표시한 것이다(앞서 사용한 파이프라인 코드 업데이트 되기 전 코드이다. 서술적 파이프라인 기본 구조를 명확히 볼 수 있어 가져왔다.)
// Node block
node {
// Directive 1
def mvnHome

// Stage block 1
stage('Preparation') { // for display purposes
// Step 1
git 'https://github.com/jglick/simple-maven-project-with-tests.git'
// Directive 2
mvnHome = tool 'M3'
}

// Stage block 2
stage('Build') {
// Step 2
withEnv(["MVN_HOME=$mvnHome"]) {
if (isUnix()) {
sh '"$MVN_HOME/bin/mvn" -Dmaven.test.failure.ignore clean package'
} else {
bat(/"%MVN_HOME%\bin\mvn" -Dmaven.test.failure.ignore clean package/)
}
}
}

// Stage block 3
stage('Results') {
// Step 3
junit '**/target/surefire-reports/TEST-*.xml'
// Step 4
archiveArtifacts 'target/*.jar'
}
}

· 위 코드에서 node('master')에서 문자열 master는 파라미터(레이블)로 젠킨스에게 젠킨스 마스터를 이용해 노드 블록을 실행하라고 알려준다.
· any를 파라미터로 사용하면 모든 스테이지 노드와 스텝, 디렉티브는 임의의 젠킨스 슬레이브 중 하나에서 수행된다.

참고: 추가적인 서술적 파이프라인 문법


4. 젠킨스 파이프라인 문법 도구

· 젠킨스 파이프라인 문법 도구는 파이프라인 코드를 작성하기 위한 빠르고 쉬운 방법이다.
· 파이프라인 문법 도구는 젠킨스 파이프라인 잡 안에서 사용 가능하다.

이번에는 앞에서 생성한 파이프라인을 파이프라인 문법 도구를 통해 재작성할 것이다!

- 전제조건

  • 전역 도구 환경 설정 페이지에서 메이븐 도구 설정하기
  • 파이프라인 메이븐 통합 플러그인 설치
  • 메이븐 프로젝트를 빌드하기 위해 자바도 필요하지만, 현재 젠킨스 마스터에서 빌드를 진행하기에 자바 설치는 생략

파이프라인 메이븐 통합 플러그인
파이프라인 메이븐 통합 플러그인은 파이프라인 코드 안에서 메이븐의 사용을 가능하게 해준다.

  1. 대시보드의 Manage Jenkins > System Configuration > Plugins > Available Plugins 탭을 클릭한다.
  2. 필터에 Pipeline Maven Integration을 입력해 해당 플러그인을 찾는다.
  3. 해당 플러그인의 체크박스에 클릭한 후 Install 버튼을 클릭해 설치한다.

- 파이프라인 문법 도구를 이용해 젠킨스 파이프라인 만들기

새로운 젠킨스 파이프라인 잡을 만들어보자!

  1. 젠킨스 대시보드에서 New Item 링크를 클릭한다.

  2. Pipeline 선택 후, Enter an item 영역에 파이프라인의 이름을 입력하고 하단의 Ok 버튼을 클릭한다.

  3. Pipeline 탭에서 Pipeline Syntax 링크를 클릭하면, 다음과 같은 새로운 탭이 열린다.

  4. Snippet Generator를 이용해 다양한 블록과 스텝을 위한 파이프라인 코드를 만들 수 있다.

  5. 노드 블록을 위한 코드를 생성하자.

    • Step 섹션 아래 Sample Step 영역에서 node: Allocate node를 선택한다.
    • Label 영역에 문자열 built-in을 입력한다(책에는 master라고 써야한다고 되어 있지만 경고문을 보면 더이상 master는 사용되지 않는다고 나와서 built-in으로 대체했다.)
      이를 통해 젠킨스가 젠킨스 마스터를 이용해 파이프라인을 실행하게 정의한다.
    • Generate Pipeline Script 버튼을 클릭해 코드를 생성한다.
    • 생성된 코드를 복사해 에디터에 보관한다.
  6. Preparation과 Build 두 개의 스테이지 블록을 생성한다.

    • Step 섹션 아래 Sample Step 영역에서 stage: Stage를 선택한다.
    • Stage Name 영역에 문자열 Preparation을 추가한다.
    • Generate Pipeline Script 버튼을 클릭해 코드를 생성한다.
    • 생성된 코드를 복사해 이전에 생성한 블록 안에 복사한다.
  7. 6번처럼 Build라는 이름의 스테이지 블록을 생성해 생성된 코드를 노드 블록 안, Preparation 스테이지 블록 밑에 복사한다.

  8. 그러면 다음과 같은 코드가 있을 것이다.

  9. 이제 깃허브에서 소스코드를 내려받아보자.

    • Sample Step 영역에서 git:Git을 선택한다.
    • Repository URL 영역에 다음 예제의 깃허브 저장소를 추가한다(나머지 영역은 그대로 놔둔다)
      https://github.com/jglick/simple-maven-project-with-tests.git
    • Generate Pipeline Script 버튼을 클릭해 코드를 생성한다.
    • 생성된 코드를 복사해 이전에 생성한 Preparation 스테이지 블록 안에 복사한다.
  10. 디렉티브를 생성해 젠킨스가 앞서 전역 도구 환경 설정에서 설정한 메이븐을 사용하게 한다.

  • Sample Step 영역에서 withMaven: Provide Maven environment를 선택한다.
  • Maven 영역에서 우리가 이전에 전역 도구 환경 설정에서 설정한 M3를 선택한다.
  • Generate Pipeline Script 버튼을 클릭해 코드를 생성한다.
  • 생성된 코드를 복사해 이전에 생성한 Build 스테이지 블록 안에 복사한다.
  1. 메이븐 빌드 명령을 위한 파이프라인 코드를 생성하자.
  • Sample Step 영역에서 sh: Shell Script를 선택한다(셸 스크립트를 만들기 위한 단계다)
  • Shell Script 영역에 mvn -Demaven.test.failure.ignore clean package를 입력한다.
    빌드, 테스트, 코드 패키징을 위한 메이블 명령어다.
    이 명령어는 셸 스크립트의 내용이 된다.
  • Generate Pipeline Script 버튼을 클릭해 코드를 생성한다.
  • 생성된 코드를 복사해 이전에 생성한 withMaven 디렉티브 안에 복사한다.
  1. 최종적인 파이프라인 스크립트는 다음과 같을 것이다.
  2. Pipeline Script 영역에 작성한 파이프라인 코드를 확인하고 Save 버튼을 누른다.

내용이 많아 다음 장에서 마무리하도록 하겠다.

0개의 댓글