Legacy Engineering Note · 기존 기술 블로그에서 선별 이관한 기록입니다. 작성 당시 환경과 버전을 기준으로 합니다.
환경 구성
- SpringBoot 3.4
- Gradle
- war
Jenkins Pipeline Job 생성
새로운 item을 누른다.
Pipeline을 선택한 후 OK
Configure > Pipeline
- Definition에 Pipeline script from SCM 선택 후 SCM에 연결할 repository type 선택
- 다음과 같이 Modules 작성
-
Repository URL : 연결할 repository 주소
-
Credentials : 해당 repository 접속을 위한 Jenkins에 등록된 아이디 선택
-
Local module directory :
Jenkins Pipeline에서 소스 코드 저장소를 체크아웃할 때, 워크스페이스의 어느 디렉토리에 체크아웃할지를 지정하는 옵션
-
- Script Path에서 해당 프로젝트에 생성된 Jenkinsfile경로 등록
Jenkinsfile 작성 예시 참고[추후 정리 필요]
shellpipeline { agent any // 환경변수 저장 environment { DOCKER_IMAGE = 'iiblackcode/springboot-6060' REMOTE_DIR = '/home/master' // 원격 서버의 대상 디렉토리 REMOTE_USER = 'master' // 원격 서버의 사용자 이름 REMOTE_HOST = '52.141.27.193' // 원격 서버의 주소 SSH_CREDENTIALS_ID = 'master' // Jenkins 자격 증명 ID } stages { stage('Jenkins Server Build') { steps { // 현재 작업 디렉토리 확인 sh 'pwd' // 디렉토리 변경 후 파일 확인 dir('demo-war') { sh ''' pwd ls -l # windows에서 작업하는 경우 gradlew파일이 text로 인식해서 올바른 형식 변환 dos2unix gradlew chmod +x gradlew ./gradlew clean build --info ''' } } }// Jenkins Server Build stage('Test') { steps { dir('demo-war') { sh './gradlew test' } } } stage('Deploy to Remote Server') { steps { echo 'Deploying...' sh 'pwd' echo 'Deploying...' sshPublisher( publishers: [ sshPublisherDesc( configName: 'JenkinsPipeline_Test', // 설정된 서버 이름 transfers: [ sshTransfer( sourceFiles: '**/demo-war-0.0.1-SNAPSHOT.war', remoteDirectory: '.', removePrefix: 'demo-war/build/libs/', execCommand: ''' echo "현재 디렉토리 출력" pwd cd was/Jenkins_Pipeline_Test whoami echo "현재 날짜와 시간으로 태그 생성" TIMESTAMP=$(date +"%Y%m%d%H%M%S") DOCKER_IMAGE="iiblackcode/springboot-6060" TAG="$DOCKER_IMAGE:$TIMESTAMP" echo "Docker 이미지 강제 삭제 (기존 이미지 태그가 있는 경우)" # sudo docker rmi -f $TAG || true sudo docker rmi $(sudo docker images -q) echo "Docker 이미지 빌드" sudo docker build -t $TAG . echo "생성된 Docker image 확인" sudo docker images echo "Docker hub login or ACR 등록" sudo docker login echo "Docker 이미지 푸시" sudo docker push $TAG # sudo docker run -it -d -p 6060:8080 springboot-6060 # sudo docker ps -a echo "yaml파일 경로로 이동" cd ../../web/ ls echo "deployment.yaml 파일 업데이트" # sed -i "s|image: iiblackcode/springboot-6060:.*|image: \$TAG|" deployment.yaml sed -i "s|image: iiblackcode/springboot-6060:.*|image: $TAG|" deployment.yaml echo "업데이트된 deployment.yaml 파일 내용 확인" cat deployment.yaml echo "Deployment.yaml 재실행" kubectl apply -f deployment.yaml ''', execTimeout: 120000 ) ], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: true ) ] ) } }// Deploy to Remote Server } post { success { echo 'Build completed successfully!' } failure { echo 'Build failed!' } } }