TY_Daily

Jenkins를 이용한 CI/CD 구축하기 -3 본문

SSAFY프로젝트

Jenkins를 이용한 CI/CD 구축하기 -3

TY_TaeYeon 2024. 7. 31. 02:18
pipeline{
	agent any
    
    stages{
    	stage('gitclone'){
        	steps{
            	git branch: 'master',
             	credentialsId: 'KTY2', 
            	url: "https://lab.ssafy.com/s11-webmobile3-sub2/S11P12D101.git"
            }
        }
        
        
        
        stage('aws property file download play cp execute') {
	        steps {
    	        withCredentials([file(credentialsId: 'db_properties', variable: 'dbConfigFile')]) {
        	        script {
        	            sh 'rm /var/jenkins_home/workspace/D101-final/BE/o2o/src/main/resources/application-aws.properties'
            	        sh 'cp $dbConfigFile /var/jenkins_home/workspace/D101-final/BE/o2o/src/main/resources/application-aws.properties'
                    }
		        }
	        }
        }
        
        

        stage('Build Backend'){
             steps {
                 dir('/var/jenkins_home/workspace/D101-final/BE/o2o/'){
                        sh 'pwd'
                    sh 'ls -al'
                    sh 'chmod +x ./gradlew'
                    sh 'chmod +x ./gradlew.bat'
                    sh 'java --version'
                    sh './gradlew clean build '
                     }
                 }
             }
        }
    }

 

- 다음과 같은 명령어를 통해 clean build 를 통한 jar 파일을 생성하게 되면 된다!

 

 

- 그러면 다음 스텝을 생각해보면 결국에는 이 jar 파일을 통한 ssh 접속을 통한 해당 나의 aws 서버에 다시 접속해서 deploy.sh 를 실행해야겠다! 이런 생각이 들것이다!

 

+ 현재 제공 받은 aws 같은 경우 pem 키가 필요하다!

 

마찬가지로 credentials에 Global credentials 부분으로 가기!

 

 

ID나 Description 현재 젠킨슨 안에서 사용할 이름 Username같은 경우 aws 에서 사용한 username Private Key 같은경우 

pem 파일 메모장으로 열면 그 파일 그대로 복사해서 붙여넣으면됨!

 

 

stage('Deploy') {
            steps {
                sshagent(credentials: ['ssafy_aws_key']) {
                    sh '''
                        ssh -o StrictHostKeyChecking=no ubuntu@i11d101.p.ssafy.io uptime
                        scp /var/jenkins_home/workspace/D101-final/BE/o2o/build/libs/o2o-0.0.1-SNAPSHOT.jar ubuntu@i11d101.p.ssafy.io:/home/ubuntu/BEserver
                        ssh -t ubuntu@i11d101.p.ssafy.io ./deploy.sh
 
                    '''
                }
            }
        }

 

- 위의 명령어를 통해 중간에 진행하는동안 에러가 발생했음! 

(원인) sshagent 플러그인을 설치안했었음! - 마찬가지로 Dashboard > Jenkins 관리 > Plugins 에 가서 해당 plugin을 설치해주자!

 

또한 ./deploy.sh 의 권한 이슈가 생겨서 코드를 아래와 같이 수정했음!

stage('Deploy') {
            steps {
                sshagent(credentials: ['ssafy_aws_key']) {
                    sh '''
                        ssh -o StrictHostKeyChecking=no ubuntu@i11d101.p.ssafy.io uptime
                        scp /var/jenkins_home/workspace/D101-final/BE/o2o/build/libs/o2o-0.0.1-SNAPSHOT.jar ubuntu@i11d101.p.ssafy.io:/home/ubuntu/BEserver
                        ssh -t ubuntu@i11d101.p.ssafy.io "chmod +x ./deploy.sh && ./deploy.sh"
                    '''
                }
            }
        }

 

- && 명령어를 통해 권한 chmod 실패 하면 뒤에것을 실패하도록 설계하였음!

- 위 코드에 대해 간단한 설명을 추가해보자면 StrictHostKeyChecking 의미는 연결 및 인증단계 중 호스트 키 검사 방법을 지정하는것으로 무시하고 진행하도록 비활성화 시킨것!

- scp 명령어를 통해 빌드된 jar 파일을 운영 서버로 전송, 운영 서버에 미리 작성한 deploy.sh 파일 을 통한 빌드된 파일을 실행하는 것으로 명령어를 실행하는것이다!

 

 

 

 

- deploy.sh 명령어 

#!/bin/bash
pid=$(pgrep -f BEserver)
if [ -n "${pid}" ]
then
        kill -15 ${pid}
        echo kill process ${pid}
else
        echo no process
fi
chmod +x ./BEserver/o2o-0.0.1-SNAPSHOT.jar
nohup java -jar ./BEserver/o2o-0.0.1-SNAPSHOT.jar >> application.log 2> /dev/null &

 

- 일단 nohup 명령어를 통해 local 에서 백에서 진행되도록 만들었음

- jar 파일을 이용해 aws 내에서 백그라운드로 실행!

 

 

- 이렇게 성공! 

 

- 이제 해야할일은 Webhook 등록하기, aws 백그라운드가 아닌 도커 컨테이너를 통한 run 실행,  nginx, Fronted CI/CD 구축, 무중단 배포이렇게 진행될 예정이다!