Rollback에 관해 매우 간단하게 정리하려 한다.
내가 생각했던 Rollback 로직은
빌드할 때 원래 사용하던 war 파일을 backup 폴더에 옮긴 후
빌드된 파일을 webapps 폴더에 옮긴다.
그 후 프로젝트를 재실행하면 끝인 아주 간단한 로직이었다.
Jenkins Pipeline으로 만든 코드이다.
pipeline {
agent any
stages {
stage('filecheck') {
steps {
script {
echo "file check start..!"
def file = "/usr/local/project/webapps/backup/ROOT.war"
if(fileExists(file)) {
echo "file exists. continue rollback"
} else {
error "file does not exist. stop rollback"
}
}
}
}
stage('rollback') {
steps {
script {
echo "rollback start..!"
sh '/usr/local/project/bin/shutdown.sh'
sleep time: 5, unit: 'SECONDS'
def isTomcatRunning = sh(script: 'ps aux | grep "[p]roject"', returnStatus: true) == 0
if(isTomcatRunning) {
error "application still running..."
}
sh 'rm -rf /usr/local/project/webapps/ROOT'
sh 'mv /usr/local/project/webapps/backup/ROOT.war /usr/local/project/webapps'
}
}
}
stage('restart') {
steps {
script {
echo "tomcat will be restarted..!"
sh 'sudo /usr/local/project/bin/startup.sh'
}
}
}
}
}
먼저 fileCheck stage이다.
빌드시에 현재 사용중인 war 파일을 backup 폴더로 옮겼는데
이 rollback job이 실행될 때, backup 폴더에 war 파일이 있는지 검사하는 로직이다.
만약 war 파일이 존재하지 않는다면 파일이 존재하지 않는다는 오류를 반환하고 job은 종료된다.
두 번째 rollback stage이다.
여기서는 실행중인 프로젝트를 먼저 shutdown 해준다.
shutdown 이후 현재 프로젝트가 정상적으로 종료되었는지 확인을 해준 뒤
종료가 되지 않았다면 프로젝트가 아직 실행중이라는 오류를 반환하고 job은 종료된다.
만약 정상적으로 종료 되었다면 ROOT.war 파일을 원래 위치로 다시 옮겨온다.
세 번째 restart stage이다.
종료했던 프로젝트를 다시 실행을 해주는 과정이다.
이 세 과정을 거치면 rollback이 성공적으로 이루어졌을 것이다.
이상이다.