이전에 Webhook을 통해서 GitLab으로 부터 특정한 branch로 부터 Open Merge Request나 Push 작업이 실행하게되면 Jenkins가 해당 브랜치의 프로젝트의 클론을 진행했다.
이 프로젝트는 EC2에 접속해서cd /var/lib/jenkins/workspace/${Jenkins Job 이름}/
으로 해당 프로젝트를 확인할 수 있다.
추가적으로 이 프로젝트는 계속해서 덮어씌어져 여러번의 Webhook이 작동해도 하나의 프로젝트만 존재한다.
이어서 해당 Webhook이 걸리게 되었을때 CI/CD를 진행할 수 있도록 구현해보자
우선 먼저 EC2에 접속해서 클론해온 프로젝트를
./gradlew bootJar
명령어를 통해서 jar파일을 생성해보려고 한다.
Jenkins를 이용한 CI를 구현하기 전에 EC2에 직접 접속해서
./gradlew bootJar
명령어를 사용해서 직접 빌드를 확인해보자
sudo chmod +x gradlew
를 사용해서 gradlew를 사용할 수 있는 권한을 부여한 뒤 진행
sudo chmod +x graldew
를 사용해서 권한을 부여하고 진행스왑 메모리 설정
// swap 파일을 생성해준다.
// (메모리 상태 확인 시 swap이 있었지만 디렉토리 파일은 만들어줘야한다.)
sudo mkdir /var/spool/swap
sudo touch /var/spool/swap/swapfile
sudo dd if=/dev/zero of=/swapfile bs=128M count=16bs=1024
// swap 파일을 설정한다.
sudo chmod 600 /var/spool/swap/swapfile
sudo mkswap /var/spool/swap/swapfile
sudo swapon /var/spool/swap/swapfile
// swap 파일을 등록한다.
sudo echo '/var/spool/swap/swapfile none swap defaults 0 0' | sudo tee -a /etc/fstab
// 메모리 상태 확인
free -h
EC2에서 정상적으로 작동되는 것을 확인했으니 빌드 시킬 수 있는 파이프라인을 작성해서 실행해보자
pipeline {
agent any
stages {
stage('Clone') {
steps {
git branch: 'dev', credentialsId: 'qkrtprjs', url: 'https://lab.ssafy.com/qkrtprjs456/test.git'
}
post {
failure {
echo 'Repository clone failure !'
}
success {
echo 'Repository clone success !'
}
}
}
stage('Build'){
steps{
sh 'pwd'
sh 'chmod +x gradlew' // 실행 권한 추가
sh './gradlew bootJar'
}
post {
failure {
echo 'Repository build failure !'
}
success {
echo 'Repository build success !'
}
}
}
}
}
lsblk
명령어로 용량 확인sudo growpart /dev/xvda 1
명령을 통해 파티션의 크기를 증가sudo resize2fs /dev/xvda1
명령어 입력Webhook이 걸렸을때에 해당 코드를 jar 파일로 만들어서 빌드를 진행하고 배포까지 진행할 과정을 계획하고있다.
이 때마다 매번 Clone을 진행하는 과정과 한번 파일을 Clone 해놓고 다음부터는 CheckOut으로 진행하는 과정중에 어떤 과정이 더 효율적일지 생각해보자