pipeline {
agent any
environment {
GITLAB_PATH = "https://10.20.110.177:8929/magicztna/magicsdp-admin-back.git"
GITLAB_CREDENTIAL_ID = "gitlab-jhkim"
DEPOLY_SERVER_NAME = "depoly-server"
REMOTE_SERVER_NAME = "10.20.110.62-MagicSDP"
REMOTE_SERVER_IP = "10.20.110.62"
SOURCE_FILES = "**/*"
SOURCE_PATH_NAME = "magiczta"
SOURCE_DIR_NAME = "magicsdp-admin-back"
REMOTE_SOURCE_FILES = "magicsdp-admin-back, start-no-console.sh, shutdown-no-console.sh, resources/application-dream.yaml, resources/cert/*"
REMOTE_PATH_NAME ="/usr/local/magiczta/"
REMOTE_DIR_NAME ="magicsdp-admin-back"
}
stages {
stage("clean Source Files") {
steps {
script {
sshPublisher(
publishers: [
sshPublisherDesc(
configName: "${DEPOLY_SERVER_NAME}",
verbose: true,
transfers: [
sshTransfer(
execCommand: """ cd ${SOURCE_PATH_NAME} && rm -rf ${SOURCE_DIR_NAME} """
)
]
)
]
)
}
}
}
stage('Git Config Setting') {
steps {
sh 'git config --global http.sslVerify false'
}
}
stage("Git Clone") {
steps {
git branch: 'develop', credentialsId: "${GITLAB_CREDENTIAL_ID}", url: "${GITLAB_PATH}"
}
}
stage("Transfer Source Files") {
steps {
script {
sshPublisher(
publishers: [
sshPublisherDesc(
configName: "${DEPOLY_SERVER_NAME}",
verbose: true,
transfers: [
sshTransfer(
execCommand: """ mkdir -p ${SOURCE_PATH_NAME}/${SOURCE_DIR_NAME} """,
execTimeout: 60000,
flatten: false,
makeEmptyDirs: false,
noDefaultExcludes: false,
patternSeparator: '[, ]+',
remoteDirectory: """${SOURCE_PATH_NAME}/${SOURCE_DIR_NAME}""",
remoteDirectorySDF: false,
removePrefix: '',
sourceFiles: """${SOURCE_FILES}"""
)
]
)
]
)
}
}
}
stage("Build Source Files") {
steps {
script {
sshPublisher(
publishers: [
sshPublisherDesc(
configName: "${DEPOLY_SERVER_NAME}",
verbose: true,
transfers: [
sshTransfer(
execCommand: """ cd ${SOURCE_PATH_NAME}/${SOURCE_DIR_NAME} && python3 -m venv venv_magicsdpadmin && source ./venv_magicsdpadmin/bin/activate && pip install -r requirements.txt && pyinstaller --onefile --hidden-import=dependency_injector.errors --hidden-import=mysql.connector.plugins.mysql_native_password --exclude-module pkg_resources --exclude-module pkg_resources._vendor --exclude-module pkg_resources.py2_warn --hidden-import=_xxsubinterpreters --add-binary "/usr/lib/x86_64-linux-gnu/libpython3.12.so.1.0:./" -n ${SOURCE_DIR_NAME} main.py && deactivate && cp ./dist/${SOURCE_DIR_NAME} /jenkins/workspace/dream-magicsdp-admin-back/${SOURCE_DIR_NAME} """
)
]
)
]
)
}
}
}
stage("Stop Process") {
steps {
script {
sshPublisher(
publishers: [
sshPublisherDesc(
configName: "${REMOTE_SERVER_NAME}",
verbose: true,
transfers: [
sshTransfer(
execCommand: """ cd /${REMOTE_PATH_NAME}${REMOTE_DIR_NAME} && ./shutdown-no-console.sh && sleep 3""",
)
]
)
]
)
}
}
}
stage("Transfer Builded Files") {
steps {
script {
sshPublisher(
publishers: [
sshPublisherDesc(
configName: "${REMOTE_SERVER_NAME}",
verbose: true,
transfers: [
sshTransfer(
execCommand: """ cd ${REMOTE_PATH_NAME}${REMOTE_DIR_NAME} && chmod 755 ./start-no-console.sh && chmod 755 ./shutdown-no-console.sh && chmod 755 ./${REMOTE_DIR_NAME} && mv ${REMOTE_PATH_NAME}${REMOTE_DIR_NAME}/resources/application-dream.yaml ${REMOTE_PATH_NAME}${REMOTE_DIR_NAME}/resources/application.yaml && ./start-no-console.sh """,
execTimeout: 60000,
flatten: false,
makeEmptyDirs: false,
noDefaultExcludes: false,
patternSeparator: '[, ]+',
remoteDirectory: """/${REMOTE_PATH_NAME}${REMOTE_DIR_NAME}""",
remoteDirectorySDF: false,
removePrefix: '',
sourceFiles: """${REMOTE_SOURCE_FILES}"""
)
]
)
]
)
}
}
}
}
post {
success {
slackSend (
channel: '#jenkins-depoly',
color: '#00FF00',
message: "Success: ${env.JOB_NAME} [build ${env.BUILD_NUMBER}] [URL: http://${REMOTE_SERVER_IP}:7071/docs]"
)
}
failure {
slackSend (
channel: '#jenkins-depoly',
color: '#FF0000',
message: "Fail: ${env.JOB_NAME} [build ${env.BUILD_NUMBER}] [URL: http://${REMOTE_SERVER_IP}:7071/docs]"
)
}
}
}
pipeline {
agent any
environment {
GITLAB_CREDENTIAL_ID = "gitlab-jhkim"
DEPOLY_SERVER_NAME = "depoly-server"
REMOTE_SERVER_NAME = "10.20.110.62-MagicSDP"
REMOTE_SERVER_IP = "10.20.110.62"
SOURCE_FILES = "**/*"
REMOTE_SOURCE_FILES = "magicsdp-admin-front.tar.gz"
BUILD_SOURCE_PATH_NAME = "magiczta"
BUILD_SOURCE_DIR_NAME = "magicsdp-admin-front"
SOURCE_PATH_NAME = "/jenkins/workspace/dream-magicsdp-admin-front"
TAR_FILE_NAME = "magicsdp-admin-front.tar.gz"
}
stages {
stage("clean Tar.gz Files") {
steps {
script {
sshPublisher(
publishers: [
sshPublisherDesc(
configName: "${DEPOLY_SERVER_NAME}",
verbose: true,
transfers: [
sshTransfer(
execCommand: """ cd ${SOURCE_PATH_NAME} && rm ${TAR_FILE_NAME} """
)
]
)
]
)
}
}
}
stage("clean Source Files") {
steps {
script {
sshPublisher(
publishers: [
sshPublisherDesc(
configName: "${DEPOLY_SERVER_NAME}",
verbose: true,
transfers: [
sshTransfer(
execCommand: """ cd ${BUILD_SOURCE_PATH_NAME} && rm -rf ${BUILD_SOURCE_DIR_NAME} """
)
]
)
]
)
}
}
}
stage('Git Config Setting') {
steps {
sh 'git config --global http.sslVerify false'
}
}
stage("Git Clone") {
steps {
git branch: 'develop', credentialsId: "${GITLAB_CREDENTIAL_ID}", url: 'https://10.20.110.177:8929/magicztna/magicsdp-admin-front.git'
}
}
stage("Transfer Source Files") {
steps {
script {
sshPublisher(
publishers: [
sshPublisherDesc(
configName: "${DEPOLY_SERVER_NAME}",
verbose: true,
transfers: [
sshTransfer(
execTimeout: 60000,
flatten: false,
makeEmptyDirs: false,
noDefaultExcludes: false,
patternSeparator: '[, ]+',
remoteDirectory: "${BUILD_SOURCE_PATH_NAME}/${BUILD_SOURCE_DIR_NAME}",
remoteDirectorySDF: false,
removePrefix: '',
sourceFiles: """${SOURCE_FILES}"""
)
]
)
]
)
}
}
}
stage("Build Source Files") {
steps {
script {
sshPublisher(
publishers: [
sshPublisherDesc(
configName: "${DEPOLY_SERVER_NAME}",
verbose: true,
transfers: [
sshTransfer(
execCommand: """ cd ${BUILD_SOURCE_PATH_NAME}/${BUILD_SOURCE_DIR_NAME} && pwd && yarn install && mv ./.env-dream ./.env && yarn build && chmod 755 ./start-no-console.sh && chmod 755 ./shutdown-no-console.sh && cd .. && tar -zcvf ${TAR_FILE_NAME} ${BUILD_SOURCE_DIR_NAME} && mv ./${TAR_FILE_NAME} ${SOURCE_PATH_NAME}/${TAR_FILE_NAME}"""
)
]
)
]
)
}
}
}
stage("Stop Process") {
steps {
script {
sshPublisher(
publishers: [
sshPublisherDesc(
configName: "${REMOTE_SERVER_NAME}",
verbose: true,
transfers: [
sshTransfer(
execCommand: """ cd /usr/local/magiczta/magicsdp-admin-front && ./shutdown-no-console.sh && sleep 3 && cd .. && rm -rf ./magicsdp-admin-front""",
)
]
)
]
)
}
}
}
stage("Transfer Builded Files") {
steps {
script {
sshPublisher(
publishers: [
sshPublisherDesc(
configName: "${REMOTE_SERVER_NAME}",
verbose: true,
transfers: [
sshTransfer(
execCommand: """ cd /usr/local/magiczta/ && tar -zxvf ${TAR_FILE_NAME} && cd magicsdp-admin-front/ && ./start-no-console.sh """,
execTimeout: 60000,
flatten: false,
makeEmptyDirs: false,
noDefaultExcludes: false,
patternSeparator: '[, ]+',
remoteDirectory: "magiczta",
remoteDirectorySDF: false,
removePrefix: '',
sourceFiles: """${REMOTE_SOURCE_FILES}"""
)
]
)
]
)
}
}
}
}
post {
success {
slackSend (
channel: '#jenkins-depoly',
color: '#00FF00',
message: "Success: ${env.JOB_NAME} [build ${env.BUILD_NUMBER}] [URL: http://${REMOTE_SERVER_IP}:22005]"
)
}
failure {
slackSend (
channel: '#jenkins-depoly',
color: '#FF0000',
message: "Fail: ${env.JOB_NAME} [build ${env.BUILD_NUMBER}] [URL: http://${REMOTE_SERVER_IP}:22005]"
)
}
}
}
pipeline {
agent any
environment {
IMAGE_NAME = "test-api:lts"
LOCAL_NAME = "depoly-server-root"
REMOTE_NAME = "web-server-root"
SOURCE_FILES = "*"
REMOTE_DIRECTORY = "/test-api"
}
stages {
stage('Git Clone') {
steps {
echo 'echo::Git Clone'
git url: 'https://github.com/jaehun0210/test-api.git', branch: 'main', credentialsId: 'github_access_token_jaehun0210'
}
}
stage('Docker Build Image') {
steps {
echo 'echo::Docker Build Image'
script {
sshPublisher(
publishers: [
sshPublisherDesc(
configName: "${LOCAL_NAME}",
verbose: true,
transfers: [
sshTransfer(
execCommand:
"""
cd /jenkins/workspace/test-api-2 && pwd && docker build -t ${IMAGE_NAME} . && docker save ${IMAGE_NAME} > ${IMAGE_NAME}.tar
"""
)
]
)
]
)
}
}
}
stage('Docker Depoly Image') {
steps {
echo 'echo::Docker Depoly Image'
script {
sshPublisher(
publishers: [
sshPublisherDesc(
configName: "${REMOTE_NAME}",
verbose: true,
transfers: [
sshTransfer(
execCommand: """pwd && docker load -i ${IMAGE_NAME}.tar && docker compose stop && docker compose up -d --build""", // 원격 명령 (비워둘 수 있음)
execTimeout: 120000, // 명령 실행 제한 시간 (밀리초)
flatten: false, // true로 설정하면 원격 경로에서 파일이 복사됩니다.
makeEmptyDirs: false, // true로 설정하면 원격 디렉토리에 빈 디렉토리가 생성됩니다.
noDefaultExcludes: false,
patternSeparator: '[, ]+',
remoteDirectory: "/",
remoteDirectorySDF: false,
removePrefix: '', // 원본 파일 경로에서 제거할 접두사
sourceFiles: """${IMAGE_NAME}.tar, docker-compose.yml"""
)
]
)
]
)
}
}
}
}
}