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"
}
}
코드를 가져오고 빌드까지
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파일은 젠킨스 서버에 존재
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'