본문 바로가기

SW개발

젠킨스 파이프라인 ( Jenkins pipeline ) - 병렬로 Job 실행하기

 

 

Jenkins Pipeline

Jenkins Pipeline Flugin

  • 연속적인 이벤트 혹은, Job의 그룹을 실행시킬 수 있는 젠킨스 플러그인
  • 파이프 라인의 통합 및 구현을 지원
  • Pipeline 전용 DSL을 통해, '코드'로서 기능을 정의 및 생성 가능
  • Jenkinsfile을 통해 작업 생성
  • 시각화 된, 빌드 화면으로 로그 실시간 로그 확인 가능
  • https://jenkins.io/doc/book/pipeline - 파이프라인 문서

작성 방법

Jenkinsfile 작성법 3가지

  • Job 구성에서, 직접 Jenkinsfile을 작성
  • SCM을 이용해서 Jenkinsfile 을 작성하는 법 - github에 관리 후 젠킨스에서 실행
  • Blueocean 플러그인으로 UI를 통해 Jenkinsfile 작성 -  github에 관리 

작성 예시

Jenkinsfile 예시

Jenkinsfile의 작성 방법은 https://jenkins.io/doc/book/pipeline/syntax/ 에서 참고하였습니다.

  • 작성 방법은 2가지가 있습니다
  • Declarative Pipeline : 보다 쉽게 작성 할 수 있게, 커스텀 되어 있음. Groovy-syntax기반 - Groovy 문법을 잘 몰라도 작성 가능
  • Scripted Pipeline : Groovy기반, Declarative보다 효과적으로 많은 기능을 포함하여 작성 가능. 하지만 작성 난이도가 높음 - Groovy 문법을 잘 알아야 함
  • 2가지 문법을 번갈아 사용 가능 - 동시에는 X

 

예시

Declarative 

pipeline {
    agent none
    stages{
        stage('Parallel Test') {
            parallel { 
                stage('Build-test-1') {
                    steps{ build 'Build-test-1' }
                }
                stage('Build-test-2') {
                    steps{ build 'Build-test-2' }
                }
                stage('Build-test-3') {
                    steps{ build 'Build-test-3' }
                }
            }
        }
        stage('Build-test-4') {
            steps{
                build 'Build-test-4'
            }
        }
    }
}
  • 1 : Declarative 시작 - pipeline /// Scripted - node
  • 2 : Backgroud로 돌아가는 agent를 정해줘야 함, 해당 파이프라인은 다른 job을 실행 하는 것이기 때문에, agent 불필요
  • 5 : stage들을 병렬로 실행
  • 7 : Build-test-1 이라는 이름의 job을 빌드
  • 17 : Parallel Test가 끝난 후, 다음 stage

 

Scripted 

node {
  stage('Parallel-test') {
      parallel 'Build-test-1' : {
          build job : 'Build-test-1'
      } , 'Build-test-2' : {
          build job : 'Build-test-2'
      } , 'Build-test-3' : {
          build job : 'Build-test-3'
      }
  }
  stage('Build-test-4') {
     build job : 'Build-test-4'
  }
}
  • 1 : Scripted 시작
  • 3 : parallel 밑으로, 이어서 build 1 2 3
  • 11 : 전 stage가 끝이나야 동작

 

→ 해당 Jenkinsfile로 Pipleine을 동작할 경우, Build-test-1 ~ 3이 병렬로 실행 된 후, 모든 빌드가 끝나면 Build-test-4가 빌드

→ 두 가지, 방법 모두 같은 결과

  • 이렇게, 두 개를 혼용하여 작성도 가능(같은 결과)
node {
  stage('Parallel-test') {
      parallel 'Build-test-1' : {
          build job : 'Build-test-1'
      } , 'Build-test-2' : {
          build job : 'Build-test-2'
      } , 'Build-test-3' : {
          build job : 'Build-test-3'
      }
  }
}
pipeline {
    agent none 
    stages {
        stage('Build-test-4') {
            steps {
                build 'Build-test-4'
            }
        }
    }
}

 


Job 구성에서, 직접 Jenkinsfile 을 작성

  •  New item - pipeline 생성

  • Pipeline 탭 클릭, Definition - Pipeline script 선택 후, 다음과 같이 작성하면 됩니다.

  • 빌드 결과

SCM을 이용해서 Jenkinsfile을 작성

  • Pipeline 탭 클릭,  Definition - Pipeline script from SCM
  • Git 선택 후, Repostory, Branch를 선택 후, Git저장소에 있는, Jenkinsfile 위치를 Script Path에 넣어주면 됨

  • 빌드 결과

Blueocean 플러그인으로 UI를 통해 Jenkinsfile 작성

  • 추가적으로 Blueocean - pipeline 플러그인 설치가 필요합니다

  • Blue Ocean 열기

  • New Pipeline

  • Github 저장소 연결

  • + 버튼으로 stage 추가 가능, 오른쪽 Agent 선택 가능

  • Build Job 추가

  • 위의 방식 대로 만들고 Save

  • Github에 커밋 & 푸쉬

  • Push된 Jenkinsfile - 위의 예시와 동일

 

  • 빌드 결과

 

 


[ 참고 ]

https://voidmainvoid.tistory.com/100

https://blog.voidmainvoid.net/104

https://github.com/jenkinsci/pipeline-model-definition-plugin/wiki/getting-started

https://stackoverflow.com/questions/53431587/how-to-run-two-jenkins-multi-phase-jobs-at-the-same-time