CI: 코드 변경 사항을 자주 통합하고, 그 변경이 문제없는지 빌드 + 테스트까지 수행하여 검증하는 것 CD: 테스트까지 통과한 빌드 결과를 운영환경까지 자동으로 배포하거나, 배포 직전 단계까지 자동화하는 것

자바 관점에서 이것을 다시 보면 CI는 빌드후 Jar파일로 치환하는 작업 CD는 그걸 배포하는 작업

파이프 라인 기본 세팅

pipeline {
    agent any

    stages {
        stage('Stage 이름') {
            steps {
                sh '명령어'
            }
        }
    }
}
    stage('Git Clone') {
        steps {
            git branch: 'develop', url: '<https://github.com/sparta-MOIM/MOIM-Server.git/>'
        }
    }
   stage('Gradle Build') {
        steps {
            sh "./gradlew :${SERVICE_NAME}:clean :${SERVICE_NAME}:build -x test"
        }
    }

CI 과정

코드를 가져오고 빌드까지

stage('Git Clone') {
   steps {
     git branch: 'develop', url: '<https://github.com/sparta-MOIM/MOIM-Server.git/>'
    }
 }
 stage('Gradle Build') {
   steps {
      sh "./gradlew :${SERVICE_NAME}:clean :${SERVICE_NAME}:build -x test"
   }
}

이 과정은 젠킨스 서버에서 발생하는 과정..
여기서 sh는 젠킨스 서버에서 명령어를 칠때 만약 pc가 윈도우라면 sh가 아니라 bat사용 jar파일은 젠킨스 서버에 존재

CD 과정

SSH 접속후 원격으로 실행시키는 과정

stage('Run Deploy Script') {
      steps {
          sshagent (credentials: ['ec2-ssh-key']) {
            sh """
               ssh -o StrictHostKeyChecking=no ubuntu@{서버주소} '
               chmod +x /home/ubuntu/deploy/deploy.sh &&
               /home/ubuntu/deploy/deploy.sh'
               """
       }
    }
}
#!/bin/bash

cd /home/ubuntu/deploy

# 실행 중인 기존 서버 종료
pid=$(ps -ef | grep 'chat-service' | grep -v grep | awk '{print $2}')
if [ -n "$pid" ]; then
  echo "기존 서버 종료: $pid"
  kill -9 $pid
fi

# 새 서버 실행
echo "서버 다시 실행"
nohup java -jar *.jar > app.log 2>&1 &
chmod +x /home/ubuntu/deploy/deploy.sh && /home/ubuntu/deploy/deploy.sh'