DevOps
Jenkins scripted pipeline (젠킨스 스크립트 파이프라인)
Dan-k
2020. 1. 10. 11:31
반응형
DevOps를 위해 보통 파이프 라인을 만들어 사용한다. 젠킨스 내에 파이프 라인은 크게 선언적(declarative) 파이프라인과 스크립티드(scripted) 파이프라인을 지원한다.
선언적(Declarative) 파이프라인 pipeline { agent { docker ‘node:6.3’ } stages { stage(‘build’) { steps { sh "abc.sh ${variables}" } } } }
스크립티드(Scripted) 파이프라인 node() { checkout scm stage(‘Build’) { sh "abc.sh ${variables}" } } }
젠킨스 파이프라인은 기본적으로 groovy 언어를 지원하고 있어 이를 이용하면 메소드를 만들어 적용한다던가 간단한 반복 작업은 for문 groovy에서는 [].each{변수 -> } 이런식으로 사용할 수 있다.
또한 parallel 한 기능을 제공해주어서 파이프라인안에 parallel 명령어를 통해 병렬 처리를 쉽게 할 수있다.
retry와 timeout을 거는 것.
그리고 job이 실패 했을 때 mail을 받아보는 기능 등을 손쉽게 구현할 수 있다.
스크립트 파이프라인으로 구성한 예제 코드이다.
def Train(DATASET) { sh """training.sh ${MODEL_TYPE} ${JOB_DATE} ${DATASET}""" } node { try{ JOB_DATE = sh(script: 'TZ=Asia/Seoul date "+%Y%m%d" -d "yesterday"', returnStdout: true).trim() timeout(time:15, unit:'MINUTES') { stage('Initialize') { echo "MODEL_TYPE: ${MODEL_TYPE}" echo "JOB_DATE: ${JOB_DATE}" } timeout(time:2, unit:'HOURS') { dir('script') { stage('train') { retry(3) { echo 'predicting...' parallel ( 'k1' : { DATASET='k1' Train(DATASET) }, 'k2' : { sleep 10 DATASET='k2' Train(DATASET) }, 'k3' : { sleep 20 DATASET='k3' Train(DATASET) } ) } } } } } catch(err) { currentBuild.result = 'FAILURE' } finally { step([$class: 'Mailer', notifyEveryUnstableBuild: true, recipients: RECIPIENTS, sendToIndividuals: true]) } }
Train을 함수로 만들어 dataset별로 병렬 처리한 예이다.
retry와 timeout을 걸어 동작을 제어할 수 있다.
젠킨스 파이프라인 뿐만 아니라 리모트 연결을 통해 다른 vm에 접속하여 동작을 명령시키는 것도 가능하다.
젠킨스와 더불어 airflow 등 devops를 위한 tool은 꼭 잘 숙지하는 것이 좋을 것이다.!!!
젠킨스도 하다보면 재미가 들려서 이를 이용하면 주기적인 크롤링이나 여러 반복되야하는 업무들을 자동화할 수 있어 편리하다.
젠킨스 스케쥴러는 crontab 으로 관리할 수 있어 편하다.. 나중에 크론탭도 한번 포스팅해야겠다. 끝~
728x90
반응형
LIST