Files
operationSystem-back/Jenkinsfile.live
2025-10-13 11:00:16 +09:00

172 lines
7.0 KiB
Plaintext

pipeline {
agent any
environment {
DOCKER_IMAGE = 'caliverse/admintool-back-live'
DOCKER_TAG = '1.0.0'
DOCKER_TAG_PRE = '1.0.0'
FILE_NAME = 'admintool_back_live.tar'
DOCKER_NAME = 'admintool-back-live'
DOCKER_PORT = '23450'
DOCKERFILE_NAME = 'Dockerfile.live'
META_FOLDER = 'metadata/**'
REMOTE_META_FOLDER = 'admintool'
}
stages {
stage('Gradle Build') {
steps {
script {
sh 'sed -i "s/\\r$//" gradlew'
sh 'chmod +x gradlew'
sh './gradlew clean build -x test -Pprofile=live' //빌드 test는 하지않는다
}
}
}
stage('Docker Image Build') {
steps {
script {
sh 'docker rmi $DOCKER_IMAGE:$DOCKER_TAG_PRE || true' //이전 이미지 삭제
sh 'rm $FILE_NAME || true' //이전 .tar 파일 삭제
sh 'docker build -f $DOCKERFILE_NAME -t $DOCKER_IMAGE:$DOCKER_TAG .'
echo 'Docker Image Create'
sh 'docker save -o $FILE_NAME $DOCKER_IMAGE:$DOCKER_TAG'
echo 'Docker Image > .tar File Create'
}
}
}
stage('MetaData Checkout'){
steps{
checkout([$class: 'SubversionSCM',
additionalCredentials: [],
excludedCommitMessages: '',
excludedRegions: '',
excludedRevprop: '',
excludedUsers: '',
filterChangelog: false,
ignoreDirPropChanges: false,
includedRegions: '',
locations: [
[
cancelProcessOnExternalsFail: true,
credentialsId: 'jenkins-build',
depthOption: 'infinity',
ignoreExternalsOption: true,
local: 'metadata',
remote: 'svn://10.20.20.9/branches/Product/DataAssets/MS2/JSON@HEAD'
]
],
quietOperation: true,
workspaceUpdater: [$class: 'UpdateUpdater']
])
}
}
stage('SSH Tunneling Start') {
steps {
script {
sh 'rm -rf ${WORKSPACE}/metadata/.svn'
sh 'rm -rf ${WORKSPACE}/metadata/QuestScript'
sh '/home/admintool/ssh-tunneling-live.sh start'
}
}
}
stage('Transfer MeataData'){
steps{
sshPublisher(
publishers: [
sshPublisherDesc(
configName: 'live-backend',
transfers: [
sshTransfer(
sourceFiles: "${META_FOLDER}",
remoteDirectory: "${REMOTE_META_FOLDER}",
execCommand: """
echo 'metadata Transfer Complete'
""",
execTimeout: 120000
)
],
usePromotionTimestamp: false,
verbose: true
)
]
)
}
}
stage('Transfer Docker Image') {
steps {
// aws .tar transfer
sshPublisher(
publishers: [
sshPublisherDesc(
configName: 'live-backend',
transfers: [
sshTransfer(
sourceFiles: "${FILE_NAME}",
remoteDirectory: '',
execCommand: """
echo '.tar Transfer Complete'
""",
execTimeout: 120000
)
],
usePromotionTimestamp: false,
verbose: true
)
]
)
}
}
stage('Deploy to Remote'){
steps{
// aws command
sshPublisher(
publishers: [
sshPublisherDesc(
configName: 'live-backend',
transfers: [
sshTransfer(
execCommand: """
docker stop ${DOCKER_NAME} || true &&
docker rm ${DOCKER_NAME} || true &&
docker rmi ${DOCKER_IMAGE}:${DOCKER_TAG_PRE} || true &&
docker load -i ${FILE_NAME} &&
docker run -d \
-p ${DOCKER_PORT}:${DOCKER_PORT} \
--name ${DOCKER_NAME} \
--restart=always \
--log-opt max-size=10m \
--memory=6g \
--memory-swap=6g \
--cpus="1.8" \
--cpu-shares=1024 \
--oom-kill-disable=false \
--oom-score-adj=100 \
-e TZ=\${TZ:-Asia/Seoul} \
-v ./admintool/log:/logs \
-v ./admintool/upload:/upload \
-v ./admintool/metadata:/metadata:ro,cached \
${DOCKER_IMAGE}:${DOCKER_TAG} &&
rm ${FILE_NAME}
""",
execTimeout: 120000
)
],
usePromotionTimestamp: false,
verbose: true
)
]
)
}
}
stage('SSH Tunneling Stop') {
steps {
script {
sh 'rm -rf ${WORKSPACE}/metadata'
echo 'metadata Directory Remove'
sh '/home/admintool/ssh-tunneling-live.sh stop; /home/admintool/ssh-tunneling-live.sh status'
}
}
}
}
}