pipeline { agent any environment { DOCKER_IMAGE = 'caliverse/admintool-back-qa' DOCKER_TAG = '1.0.0' DOCKER_TAG_PRE = '1.0.0' FILE_NAME = 'admintool_back_qa.tar' DOCKER_NAME = 'admintool-back-qa' DOCKER_PORT = '23450' DOCKERFILE_NAME = 'Dockerfile.qa' 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=qa' //빌드 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('SSH Tunneling Start') { steps { script { sh '/home/admintool/ssh-tunneling-qa.sh start' } } } stage('Transfer Docker Image') { steps { sshPublisher( publishers: [ sshPublisherDesc( configName: 'qa-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: 'qa-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 \ -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 '/home/admintool/ssh-tunneling-qa.sh stop; /home/admintool/ssh-tunneling-qa.sh status' } } } } }