jenkins pipeline script

mhlee·2021년 3월 9일
0
post-thumbnail

jenkins pipeline script

0. 배경

현재 구축중인 시스템에 마땅한 job scheduler가 없다.
airflow등 몇가지 시스템 검토하다 가장 익숙하고 간단하게 구현 가능한 jenkins pipeline으로 결정했다.

우선 필요한 구성은 아래 그림과 같다.
각각의 batch task가 있고, 그것들이 선/후행 작업으로 연결되면 된다.
일부는 병렬도 실행가능한것들도 있다.

고려해야 할 사항은 아래와 같다.

  • 에러가 발생했을때, 다음 작업으로 넘어가면 안된다.
  • 에러가 발생했더라도, 예외적으로 다음작업으로 넘어갈수 있어야 한다.

1. script 예시

node {
    stage('A job') {
        sh 'echo "A 작업"'
    }
    
    stage('B job') {
        parallel 'Build-test-1' : {
            sh 'echo "병렬1 작업"'
        } , 'Build-test-2' : {
            sh 'echo "병렬2 작업"'
        } , 'Build-test-3' : {
            sh 'echo "병렬3 작업"'
        }
    }
    
    stage('C job') {
        sh 'echo "C 작업"'
    }

    stage('D job') {
        sh 'echo "D 작업"'
    }
}

위 스크립트를 실행하면 아래와 같이 처리된다.

2. 에러 처리

batch 작업은 대부분 선후 작업이 연관관계가 있다.
에러 발생시 대부분 다음 작업을 멈추어야 한다.
하지만, 에러가 발생해도 다음 작업을 수행하되, 해당 내용에 대해서 알림만 받고 싶은경우가 있다.

jenkins script에서 예외를 사용할수 있다.
기본적으로 아래 내용중 catch절을 활용한다.
try { 작업내용 } catch(e) { 예외시 작업 }

예외시 작업에는 slack, email등 알림작업이 들어가고,
멈추어야 하는경우는 예외를 다시 throw 한다.
반대로 멈출 필요없는 경우는 throw를 하지 않는다.

node {
    stage('A job') {
        sh 'echo "A 작업"'
    }
    
    stage('B job') {
        parallel 'Build-test-1' : {
            sh 'echo "병렬1 작업"'
        } , 'Build-test-2' : {
            sh 'echo "병렬2 작업"'
        } , 'Build-test-3' : {
            try {
                sh 'exit 255'
            } catch(e) {
                print('이 예외는 무시 됩니다.')
            }
        }
    }
    
    stage('C job') {
        try {
            sh 'exit 255'
        } catch(e) {
            print('이 예외는 작업을 중단합니다.')
            throw e
        }
        
    }

    stage('D job') {
        sh 'echo "D 작업"'
    }
}

이 작업을 실행하면 결과는 아래와 같다.

로그를 보면, B작업에서 에러가 발생했으나 C작업으로 진행된것을 확인할수 있다.

3. job 스케줄링

jenkins build trigger에 보면 "Build periodically"라는 항목이 존재한다.
해당 항목에 batch job이 실행될 시간을 입력하면 된다.

profile
삽질하는 개발자

0개의 댓글