Jenkins Pipeline script 부분 별 정리
Jenkins의 Pipeline script는 다음과 같이 생겼습니다.
pipeline {
agent {
node {
label 'home_dev'
customWorkspace '/home/jenkins/project'
}
}
tools {
nodejs "nodejs"
}
environment { // 환경변수 설정, 빌드 단계 확인 변수를 설정
CHECKOUT = 'SKIPPED'
BUILD = 'SKIPPED'
DEPLOY = 'SKIPPED'
}
triggers {
pollSCM ('* * * * *')
}
stages() {
stage('Checkout') {
steps {
git branch: 'develop', url: '~'
}
post {
success {
script {
CHECKOUT = "SUCCESS"
}
}
failure {
script {
CHECKOUT = "FAILURE"
}
}
}
}
stage('Build') {
steps {
dir('./home-frontend') {
sh 'npm i'
sh 'npm run generate'
}
}
post {
success {
script {
BUILD = "SUCCESS"
}
}
failure {
script {
BUILD = "FAILURE"
}
}
}
}
stage('Deploy') {
steps {
dir('./home-frontend/dist') {
sh 'sudo su -c "cp -r * /var/www/html" ec2-user'
}
}
post {
success {
script {
DEPLOY = "SUCCESS"
}
}
failure {
script {
DEPLOY = "FAILURE"
}
}
}
}
}
}
길어보이지만 반복되는 부분이 많고 따지고 보면
Front-end만 Git에서 받아와 배포하는 작업이라 간단하여 처음 하시는 분이 이해하시기 편할 것 같습니다.
기본 골자는
pipeline {
agent {
}
stages() {
stage('Checkout') {
steps {
}
}
}
}
이렇게 된다고 보시면 됩니다.
하나씩 설명하자면,
- pipeline: pipeline script를 선언하고 감싸는 부분입니다.
- agent: Jenkins 내에서 node라고 불리는 자원을 선언하는 부분입니다. 어떤 node를 사용할지 적어주면 됩니다.
- stages: 전체 작업 목록을 감싸는 부분입니다.
- stage: 단일 작업 단계이며 작업명을 붙일 수 있습니다. Jenkins에서 빌드 단계 구분에 쓰입니다.
- steps: 작업 단계 내에서 실행할 명령어를 작성하는 부분입니다.
여러 단계의 작업이 필요하다면 위의 구성에서 첫 코드와 같이 stage와 steps만 복수로 작성해주시면 됩니다.
다시 첫 코드로 돌아가 하나씩 설명하면
agent {
node {
label 'home_dev'
customWorkspace '/home/jenkins/project'
}
}
node에는 label이 속성이 있습니다. Jenkins node 관리에서 각 노드를 들어가보시면 확인하실 수 있습니다.
저는 label이 home_dev라는 node를 사용할 것이며
제 기본 workspace는 /home/jenkins/project를 사용하겠다고 선언했습니다.
tools {
nodejs "nodejs"
}
Jenkins의 global tools에 설정한 도구들 중 nodejs를 사용하겠다는 뜻이며 "nodejs"는 제가 설정한 nodejs의 name입니다.
각 설정한 name 별로 tool "name"의 형태로 들어갑니다.
environment {
CHECKOUT = 'SKIPPED'
BUILD = 'SKIPPED'
DEPOLY = 'SKIPPED'
}
환경변수 설정 부분입니다. 저는 빌드 단계의 상태를 선언하기 위해 이렇게 주었습니다.
모두 SKIPPED된 상태로 시작해 하나씩 작업을 거치며 SUCCESS 혹은 FAILURE로 변경될 예정입니다.
SKIPPED로 시작하는 이유는 하나라도 작업이 FAILURE 상태가 되면 Jenkins는 빌드를 중단하고
진입하지 않은 작업은 SKIPPED로 나타내기 위함입니다.
triggers {
pollSCM ('* * * * *')
}
빌드의 트리거 설정입니다. pollSCM은 일정 주기마다 git source를 확인하여 변경사항이 있다면
빌드를 실행하는 명령입니다. ()안의 문구에 대해서는 cron expression 크롱 표현식을 참고하시면 됩니다.
dir('./home-frontend') {
sh 'npm i'
sh 'npm run generate'
}
steps안에 있는 dir은 해당 steps의 작업을 진행할 경로를 설정할 때 사용합니다.
작업이 필요한 경로가 그때그때 달라질 수 있으니 그때마다 작성하고 안에 실행할 명령어를 작성하시면 되겠습니다.
한 steps 안에 여러 dir 선언은 불가능합니다.
따라서 다른 dir에서 작업하고 싶다면 다른 stage, steps를 선언해 작성해야 합니다.
post {
success {
script {
CHECKOUT = "SUCCESS"
}
}
failure {
script {
CHECKOUT = "FAILURE"
}
}
마지막으로 steps 아래에 있는 post입니다. 각 steps가 끝난 후 처리할 작업을 작성하는 부분입니다.
작업의 상태 별로 어떤 작업을 할지 작성할 수 있습니다.
코드에는 없는 always를 사용할 경우 결과와 관계없이 무조건 실행하게 됩니다.
제가 작성한 코드는 어떤 기능인지 너무 잘 보여 따로 설명을 드릴 것도 없어 보이네요~
아주 기본적인 내용들만 다뤘기 때문에
pipeline script 내 변수 선언, if문, while문, catchError 사용 등의
추가적인 내용은 검색을 통해 다른 글들을 참고하시길 바랍니다.