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"""
)
]
)
]
)
}
}
}
}
}
pipeline 예제
2025. 2. 16. 22:38