본문 바로가기
배포/AWS

4. 젠킨스로 배포

by moca7 2024. 12. 11.

 

 

[6일차]

 

 

- 오늘은 어제 하던거 이어서 CI/CD하고 여러분 소스가지고 해볼거에요.

 

 

 

 

 

 

 

- ftp에서 저 2개를 가지고 왔다.

 

 

 

 

 

 

- aws ec2만들고나면 업데이트해주고 도커설치하고 이런걸 스크립트로 만들어놓은거에요.

아예 처음 ec2 생성할때 이걸 포함시켜놓으면 아예 이상태로 만들어준다. 그럼 따로 설치할 필요가 없다.

이거말고 더 필요한게 있으면 도커파일 만드는것처럼 파일 작업들(생성하면서 수행해야할 작업들)을 넣어주면된다.

이게 쉘 스크립트다. 리눅스안에서 사용할수있느 ㄴ쉘스크립트다.

- 맨 위의 #은 주석이아니라 이게 쉘스크립트라는걸 알려주는 포맷이다.

 

- 위부터 명령 수업 쭉 하고, 마지막에 우분투 사용자가 sudo 명령 없이 할수있는것까지 했다.

 

 

 

 

 

 

- 이거 아셔야 해서.

vpc.  격리형 클라우드 리소스.

aws안에 우리만 사용할수있는 가상의 네트워크다.

여러분이 ec2를 만들건 뭘 만들건간ㅇ ㅔvpc 안에 만드는거다.

그래서 가장 먼저 vpc가 있어야 한다.

vpc가 없는 상태에서는 아무것도 할 수가 없다. vpc를 먼저 만드는ㄱ ㅔ우선인데 얘는 기본값으로 하나 만들어져 있다.

 

 

 

- aws를 사용한다는 거는 vpc안에 모든 서비스를 한단 거다. vpc를 생성해야 하는데.

리전별 리소스에서 vpc(3)을 클릭해보시면 뭐가 만들어져있다. 어떤건 테스트다.

 

 

 

- 옆에 ivpv cidr이 있다.

이 주소를 이용해서 네트워크를 만들어야 한다. 뒤에 16은 어디까지가 네트웤르ㅡㄹ 나타내는지 표기해주는 숫자다.

 

- 172.16.0.0/16

8비트 8비트 8비트 8비트다.

 

16이면 16비트까지가(172.16까지가) 네트워크를 의미한다.

이런식으로 내가 기존에 만들어져있는 네트워크가 기존에 이런게 있으면 172.15 172.17 이렇게 기존에 있는 vpc의 네트워크와 겹치지않게끔 생성하면 된단 얘기입니다ㅣ.

- 앞의 주소는 사설주소를 쓴다. 공인주소가 아니라 내가 맘대로 만드는 네트워크이기때문에 공인 ip주소가 아니라 사설 ip 주소를 쓴다. 

 

 

※ aws vpc

- 가상 네트워크

- aws서비스를 사용하기 위해서는 vpc가 생성돼 있어야함.

- vpc를 생성할 때 IPv4 CIDR 설정

172.16.0.0/16 => 여기서 /16은 네트워크주소의 자리를 표시함. (172.16까지가 네트워크 주소)

8    8   8  8           16번째 자리까지 네트워크를 나타낸다.   (저것들은 각 8비트다)

                             /24는 24번째 자리까지 네트워크를 나타냄(172.16.0까지가 네트워크 주소)

 

- 일반적으로 vpc는 /16으로 생성함.

vpc를 하나 만들고 그 안에 vpc를 만든다고 해서 vpc안에 바로 ec2를 만들수있는게 아니라 리소스 생성하기 위해서느 ㄴ서브넷을 만들어야 한다.

 

- 서브넷은 vpc 전체 네트워크를 작은 네트워크로 나누어놓은 네트워크

172.16.0.0/16 이라고 하는 vpc가 있을 때 => 172.16.0.0/24

                                                                        172.16.1.0/24

                                                                        ....

                    [vpc]                                              [서브넷]

 

 

앞에는 똑같아야한다. 172.16까지는. /24는 3번째부분까지 같아야 하는걸 의미한다.

3번째 부분이 다르면 다른 네트워크 주소다. 이렇게 서브넷을 만들어줌녀 된다.

 

- 172.16.0.0은 vpc, 그걸 쪼개놓은건 서브넷이다.

서브넷이 있어야만 거기에 리소스를 생성하고 배치할 수 있다.

 

 

- 서브넷은 2가지 종류가 있다.

(1) 퍼블릭 서브넷

- 외부에서 접속이 가능한 네트워크

- 서버를 만들어놓으면 접속을 할 수 있어야 하죠. 서버를 퍼블릭 서브넷에 만들어 놓으면 그 서버는 어디서든 접속이 가능하다. 

- 서버에 부여된 퍼블릭 주소를 사용한다.

 

(2) 프라이빗 서브넷 

- 외부와 격리된 네트워크(동일한 VPC 내에서는 통신 가능)

- 중요한거 db같은거는 퍼블릭에 안두고 프라이빗 서브넷에 둬서 외부에서 접속 못하게, 접속할 필욕 ㅏ없는거는 프라이빗 서브넷에 둔다.

 

 

= 반드시 vpc가있어야 하고, vpc안에 서브넷이 생성되어있어야하는데, 그 서브넷도 퍼블릭으로 쓸건지 프라이빗으로 쓸건지 선택을 해야한다.

- 이걸 반드시 알아야 한다. 낵 ㅏ생성하는 리소스를 어디에 위치시킬건지를 반드시 알아야 한다.

 

 

 

 

 

 

 

 

- 이미 인스턴스 시작을 누른다.

 

 

 

 

- 지난번에 자기이니셜에 svr했는데 2로한다.

 

 

 

- 2번째꺼 선택.

 

 

- 그럼 변경확인뜨는데 변경확인누른다.

 

 

- 인스턴스 유형은 t2.micro 그대로.

- 키는 여러분이 기존에 쓰던거 쓰심되요.

 

 

- 네터으ㅓ크 설정 들어가서 편집가보에쇼.

여기 vpc가 필수라고 써있죠. 기본값으로 되어있고 내가 이 3개중에 어떤 vpc에다가 생성할건지를 정하셔야 해요.

 

 

- vpc는 172.16.0.0/16으로, 서브넷은 CIDR이 172.16.16.0/24를 선택했다.

 

- vpc별로 보안그룹이 뜬다. 기존 보안 그룹선택에 없다. 생성ㅇ르 해야ㅐ한다.

보안그룹이름 lsw-sg2

 

 

- 보안그룹 규칙 추가르 누른다. 

 

 

 

- 위처럼 2개를 추가했다. HTTP, Oracle-RDS를 하고 둘다 0.0.0.0/0을 줬다.

- 사실 디비를 외부에서 접속할수있게끔 하진 않아요. 보안때문에 보안취약점이라.

 

 

 

 

 

- 맨 밑에 고급 세부정보를 누르면 사용자 데이터 - 선택사항이 있따. 여기다 아까 그 쉘스크립트를 선택한다.

 

 

 

 

 

 

- 오라클까지 아예 생성하게 추가했다.

 

맨 밑에 sudo docker run -d --name oracle11g -e ORACLE_PASSWORD=1234 -p 1521:1521 gvenzl/oracle-xe:11

 

 

 

- 미리보기 코드를 눌러본다.

인스턴스 시작을 눌러도 되지만.

- aws cli다. 이 코드를 실행하면 바깥에서 ec2를 생성해주는 코드다.

어쨋든 시작을 누른다.

 

 

 

 

 

 

 

 

 

- 정상적으로 되었다면 도커 설치하고 오라클 컨테이너까지 생성이되어있어야 한다.

 

 

 

 

 

 

 

 

 

 

 

- 인스턴스 가서 방금 생성한 인스턴스를 ㅗ학인한다.

 

- 새로고침을 누르면 상태검사가 초기화에서 2/2검사결과 통과로 바귄디ㅏ.

 

 

※ 참고

- 사설IPv4주소(private address) 범위

 

10.x.x.x 10으로 시작하는거 전부다.

172.16.x.x ~ 172.31.x.x 

192.168.x.x 

 

위에 해당하는 주소들은 전부다 사설 주소다. 이거 외의 것은 다 공인주소다. 

이런 주소를 갖고있는 시스템이다 그럼 다 사서ㅏㄹ ip주소를 갖고있는 시스템인거다. 

외부에서 직접 접속이 불가능한 시스템이다.

 

 

 

 


 

 

 

- sql develoepr에서

세션 ㄸ"ㅗ한다.

 

aws-oracle2 앞에

 

system

1234

 

ip는 방금 만든퍼블릭ipv4 주소를 적는다.

 

 

 

 

ec2가만들어지고 도커설치되고 도커런해서 오라클 컨테이너까지 생성된상태다.

이것도 원래느 ㄴ우리가 들어가서 입력 다해야되는건데 스크립트갖고 다 돌린거다.

- 서버를 하난 마들었고 그 디비로 오라클이 동작중인 상태다.

- 더확인할게 오라클 컨테이너의 ip를 알아본다.

 

 

 

 

create user admin identified by 1234; 

grant connect, resource to admin;

 

 

 

 

 

 

 

 

ㅁ 모바엑스텀.

기존거 닫는다.

 세션 ssh 

 

 

 

 

- docker inspect oracle11g

 

- 처음만든 컨테이너라 172.17.0.2 다 똑같다.

기존의 소스코드에 172.17.0.2해놨기 때문에 ip를 바꿀필욘 없는데 저게 다르면 바꿔줘야 한다. 기존에 앞에 실습할때랑 컨테이너 ip가똑같기때문에 applciatio.proasdfe안에서 ip를 바꿀필요 업ㄷ사.

 

 

- docker inspect oracle11g

 

 

 

6일정도하는 내용이 거기서 3주하는 내용이다. 

 

 

 

 

 

 

- 우분투를 하나 생성했는데 손 하나도 안대고 여기까지 만들어졌다.

 

 

 


 

 

- 젠킨스로가기전에

- 버츄얼박스의 우분투 킨다.

 

 

 

 

 

 

ㅁ ngrok http http://localhost:8080

- 입력했다. 

 

 

 

 

- ㅂ복사는 ctrl shift pausebreak키. ctrl c는 꺼져버림.

이 창이 꺼지면 안되나 봄. 듀플리케이트 하든지. 저 복사를 하든지.

 

https://3be4-14-36-141-71.ngrok-free.app/ -> http://localhost:8080

 

- 비짓 사이트하면 어제 우리가 설치해놓은 젠킨스가 뜬다.

admin 1234를 뜬다.

 

 

 

- 이렇게 뜬다 로그인하면. 어제한 test prjocet가 보인다.

 

 

 

 

 

- 깃험 멤버북에서 세팅스를 누른다. 웹훅스를 왼쪾에서 누른다.

- 에딧을 누른다.

 

 

 

 

 

 

- 깃헙 멤버북 웹훅의 주소가 바뀐거다.

- payload url의 슬래시 앞부분을 바꾸고 /github-webhook/은 붙인다.

- 쭉 아래로 내리면 업데이트 웹훅한다.

 

 

 

 

-업데이트 웹훅 하고 리센트 딜리버리스 간다. 저기서 제일 위에거를 ... 눌른다.

 

- 테스트는 리슨투 딜리버리가서 리딜리버 가보세요. 여기 ... 클릭하고 리딜리버했을때 이렇게 정상적으로 떠야해요.

깃허브와 젠킨스가 정상적으로 통신이 가능한 상태다.

 

 

 

 

- ... 누르면 이렇게 뜬다. 리딜리버 누름. 

 

 

 

- 그럼 이렇게 뜬다.

 

 

 

 


 

[2교시]

 

 

 

 

- 젠킨스에서 

 

 

 

 

 

- 파이프라인.txt를 본다.

이 코드가 젠킨스의 어제 파이프라인에 들어갈 코드다. 얘기했듯이 얘도 자바 기반이라 날짜를 사용하기 위해서 임포트했다.

연월일해서 변수 TODAY에 집어넣었다.

변수선언은 그룸이라고하는 언어라서 자바랑은 좀 다르다. TODAY라는 변수에 날짜를 집어너넣었다.

- 왜냐면 자동으로 컨테이너 이미지를 만들건데 똑같은 이름이면 중복되서 안되기때문에 날짜랑 젠킨스가 빌드할때마다 일련번호가 부른다. 그거까지 붙여서 이미ㅣㅈ를 구분하기위한 이미지 이름만들기 위한 변수다.

 

- 어제 말한것처럼 PIPELINE안에다가 스테이지스 안에 스테이지를 쭉 작성한다.

- 우리가 원래 해야하는 작업들은 단계별로 다 해주는거다.

이클립스에서 커밋, 푸쉬하면 깃헙이 젠킨스에 통지해줄거고 그럼 젠킨스가 동작해서 풀로 깃허브에서 가져오고, 그걸로 빌드하고, 도커이미지 만들고, 도커이미지를 도커허브에 푸쉬하고, 

그다음 스테이징 서버에서 런해가지고 동작시킨다.

 

 

- envienoment 환경변수 설정이다. 여기서 사용ㅇ할 두개의 변수를 지정한다.

도커태그는 뒤에 붙이는거다. 멤버북이라고 하는 저장소 뒤에 태그를 붙여서 이미지를 구분했듯이. 

이것도 마찬가지로 어떤 날짜에 몇번 빌드했는지를 붙이기 위한 변수.

도커태그 변수에는 위에서 만든 변수 today와 build_id가 들어간다.

 

 

- 빌드아이디가 머냐면 빌드할때마다 빌드번호가 올라간다. 그 빌드번호를 뒤에다 붙여준단 얘기다.

저 #1을 뜻한다. 빌드할때마다 올라간다. 이미지으 ㅣ태극 ㅏ다르니까 겹칠 일이 없다.

- 이런식으로 이밎 ㅣ빌드할 때 붙일 ㅐㅌ그를 변수에 담아주고,

 

 

 

 

- 그다음에 strDockerImage는 자기 아이디.

업로드( =푸쉬)해야하니까 도커허브의 자기 아이디에다가 저장소이름 멤버북 그리고 도커태그를 붙이면 매번 새로운 태그가 붙겠죠.

- 그니까 여러분 아이디로 수정하세요 sunnykid7에서 gdlsw로 수정함.

- 그리고 맨마지막에 docker image build보면 거기에 strdocekerimage를 쓰고있다.  

 

 

- 환경변수 다음에 이제 스테이지단계에요. 

- GITHUB PULL.

git branch는 master인가요? main아닌가요? master네요. 그럼 그대로 두고.

url은 카피해오시면 되는데 똑같죠. sunnykid를 LSW-20으로 바꾼다.

깃 풀을 여기서 해오는 거다. 언제 땡겨오냐. 새로운 내용ㅇ이 푸쉬가 되면.

 

 

- 그 다음 할게 빌드죠. BUILD

- 스테이지 안에 STEP은 그 안에 수행해야하는 내용들인데 sh는 쉘스크립트를 실행하는 명령이다.

- test.skip은 pom.xml에 넣어놨었다.

왜냐면 테스트를 하면 디비가 로컬에 없으면 에러가 나기때문이다. 이런 옵션을 줘서 빌드한다.

- 우리가 직접 했떤 명령들을 여기서 차례대로 다 해주는거다.

 

- 그다음 DOCKER IMAGE BUILD

- 빌드하면 target 밑에 jar파일이 나오죠. 

oDockImage는 플러그인이다. 어제 우리가 도커파이프라인을 추가했습니다. 파이프라인에서 도커명령ㅇ르 쓸수있게끔.

그래서 docker.build라는 명령이 이미지를 만들어주는 거다. 그렇게 만들어진 내용을 oDockImage에 집어넣으라는 거다.

- 위에서 만들어진 strDocekerImage를 이름으로 만들라는 얘기다. 여기 보면 도커파일도 있죠. 도커파일을 이용해서 이미지를 만들어라.

 

- 빌드가 되고나면 이미지가 나올거고, 그 이미지를 푸ㅜ시해줘야죠.

DOCKER IMAGE PUSH.

- 마찬가지로 스텝안의 스크립트를 실행하는데 저 도커허브의  레지스트르이에 위에서 만들어진 도커 이미지를 푸쉬하겠다.

근데 푸쉬하려면 로그인을 해야한다. 인증을하고 내 저장소에 올리수잇는거니까. 그때 사용할 인증정보가 docker-auth다.

좀있다 인증정보는 나중에 추가할거다. 이안에 아이디와 패스워드를 넣어놓을거다.

 

- 푸쉬가 정상적으로 되고나면 staging deploy. 배포단계다.

스테이징 서버에 배포한다. 배포는 aws ec2에 접속해서 docker run을 수행한다.

그러려면 접속을 해야하는데 sshagent 이것도 엊 ㅔ플러그인을 ㅗ 추가한거다. 

sshagenet로 접속을 하는데 crdedintial 인증정보는 statgin-privatekey를 쓰겠다.

얘도 만들어줄 예정이다.

- 그 다음에 sh 코드 해가지고 수행을한다.

ssh에 접속할건데, ec2-user가 아니라 ubuntu로 바꾼다. 밑에도 ubuntu로.

배포 서버주소는 어덯게 돼요. 아까 아침에 생성한 인스턴스의 퍼블릭ipv4롤 넣는다.

 

 

- ssh로 접속할건데 아이디는 ubuntu고 서버의 주소는 3.34.어쩌구다.

그다음 접속하면 패스워드를 입력해야하죠.  얘는 내가 인증(staging-rpprivatekey)에다가 개인키를 집어넣을거에요 .그 키 가지고 로그인하게끔.

- 그리고 docker container rm -f memberbook은 이미 컨테이너가 있으면 삭제해라. 

최초에는 없으니 삭제가 안될건데

두번째 명령에서는 다시 로그인해서 container run \ -d니까 백그라운드. (두번재줄)

우리는 80 80으로 할거에요. -p 80:8080 으로 바꿨다. 컨테이너 안은 8080이 되겠죠.

만약 https로 했다. 그럼 443이 되는거죠. 안쪽은 기본포트 8080을 하고, 외부에서 접근할때는 80으로 접속할거라는 포트포워딩을 해줬고.

- 이것도 /home/ubuntu/upload:로 바꾼다.

 

 

 

 

import java.text.SimpleDateFormat

def TODAY = (new SimpleDateFormat("yyyyMMdd")).format(new Date())

pipeline {
    agent any
    environment {
        strDockerTag = "${TODAY}_${BUILD_ID}"
        strDockerImage ="gdlsw/memberbook:${strDockerTag}"
    }

    stages {
        stage('Github Pull') {
            steps {
                git branch: 'master', url:'https://github.com/LSW-20/memberbook.git'
            }
        }
        stage('Build') {
            steps {
                sh 'chmod u+x mvnw'
                sh './mvnw clean package -Dmaven.test.skip=true'
            }
        }

        stage('Docker Image Build') {
            steps {
                script {
                    oDockImage = docker.build(strDockerImage, "--build-arg VERSION=${strDockerTag} -f Dockerfile .")
                }
            }
        }
        stage('Docker Image Push') {
            steps {
                script {
                    docker.withRegistry('', 'docker-auth') {
                        oDockImage.push()
                    }
                }
            }
        }
        stage('Staging Deploy') {
            steps {
                sshagent(credentials: ['Staging-PrivateKey']) {
                    sh "ssh -o StrictHostKeyChecking=no ubuntu@3.34.142.234 docker container rm -f memberbook"
                    sh "ssh -o StrictHostKeyChecking=no ubuntu@3.34.142.234 docker container run \
                                        -d \
                                        -p 80:8080 \
                                        -v /home/ubuntu/upload:/app/upload \
                                        --name=memberbook \
                                        ${strDockerImage} "
                }
            }
        }
    }
}

 

 

- 배포하기 위한 최사한의 것만 한거다.

꼭 컨테이너를 이용 안해도 된다. 우리가 한ㅂ ㅏㅇ법은 컨테이너를 ㅣ용한거고 꼭 그럴 필욘 없다.

 

 

 

 


 

 

- 젠킨스에서 새로운 아이템. new item

이름 memberbook project

파이프라인 클릭하고 ok

 

 

- 제너럴- 빌드트리거에서 - 깃허브 훅 어쩌구를 체ㅡㅋ해주시고, 아래의 파이프라인에 파이프라인.txt 붙여넣기 한다.

 

 

 

 

 

 

- 그리고 저장.

- 저장하고나서 이제 두개 인증을 만들어줘야 한다.

 도커에 로그인할때 사용할 인증 docekr-auth. 이름은 다르게 해도 되는데 지금 코드에 저렇게햇으니 저렇게 만들거고,

staging-rprivatekey도 만들거다.

 

 

 

 

 

- 대시보드 - jenkins 관리 - credentials에서 globals 파란색 글자 누르고, 

add credentails 버튼을 누른다. 

도커는 username과 패스워드로 인증하는 방식을 쓸거다.

 

 

 

 

- 비번 123456789

 

- 그럼 이렇게 뜬다.

 

 

 

- 또 애드 크레딘셜스.

- 여기서 너거 한다.

-0 그리고 아이디를 아까 그 아이디

- username은 ubuntu

 

 

 

 

 

- 그리고 엔터다이렉트리의 애드를 누른다.

- 개인키파일을 열어서 전체 복사한다음에 애드에 넣는다.

 

 

 

 

 

 

 

=- create 누른다.

- ec2 서버에 접속할때 사용할 인증. 두개의 크레덴셜을 만들었다. 이걸 왜 만들어요ㅑ? 우리가 입력안하고 자동으로 되게금 하려고.

 

 

 

 

- 이렇게 뜬다.

 

 


 

 

 

 

 

 

- 젠킨스에서 멤버북 프로젝트를 누른다.

 

 

 

 

 

 

 

 

- 근데 깃에 도커파일이 없을거에요. 깃에 도커파일도 같이 넣어줄게요.

이클립스를 킨다.

- stswebjpa 디렉토리 안의 Dockerfileㅇ르 깃에다 올려줘야 한다.

 

 

 

 

 

 

- 저 도커파일을 탐색기 어딘가로 끌어왔따가, 

- 저 stswebjpa에 붙여넣기한다.

 

 

 

 

- 딱 저 폴더 stswebjpa에 딱 갖다대야 뭑 ㅏ안뜨고 된다ㅣ.

- 그리고 새로고침하고 초록색 ++한다음에 깃에 푸쉬한다.

 

 

 

 

 

 

- USER에는 깃허브 닉네임을, 패스워드에는 그 딱한번만 보여주는 깃허브 토큰을 적는다.

- 패스워드 안물어보게 적 ㅓ체크했다. 

- 뭐 패스워드 리커버리 어쩍 ㅜ뜨는데 그냥 닫았다. 큰 의미없는 창인듯.

 

 

 

 

 

- Push Results 창은 그냥 CLOSE한다.

 

 

 

 

 

- 깃 허브에서 push가 잘됏는지 확인한다. Dockerfile이 있다. 커밋 메세지도 있다.

 

 

 

 

 

 

 

- 그리고 젠ㅌ킨스에서 지금빌드르 해본다. 에러가 난다. 이미지 빌드에서 에러가 났다.

빌드까진 다 끝났는데 .

- 왼쪽아래 #1누르면 좀 더 자세한 정보를 볼 수 있다.

 

 

- 에러나면 아래의 #번호를 눌러서 콘솔 아웃풋으로 뭐가 문젠지 볼 수 있다.

 

 

 

 

 

 

- (선생님) 도커이미지빌드, 도커이미지푸시, 스테이징디플로이까지 잘 되면 브라우저에 아이피 4개만 입력해서 접속해본다.

안된다. https가 기본값이다. http로 접속해본다. 그래도 안되네. 배포까진 됐는데.

 

 

 

 

- 암튼 오류 해결하기 위해.

jenkins 서버에서 다음 명령어를 써준다. 버츄얼박스의 우분투에다가. ngrok 창이 꺼지지 않게 듀플리케이트해서 한다.

sudo usermod -aG docker jenkins

sudo service jenkins restart

- 젠킨스도 명령을 sudo없이 실행하게끔 docker 그룹에 포함시켜준다.

 

 

 

 

 

- 그리고 깃허브 멤버북에 applicatio.properties도 다른게 들어가있네요. 바꿔줘야 겠네.

- 이클립스의 application.properties를 봐보세요.

- 이렇게 바꾸세요. @localhost가 아니라 @172.17.02로 바꿔줘야 한다.

 

 

 

 

 - 직므 빌드르를 준르것도 아닌데 젠킨스에서 보면 자동으로 다운ㅂ맏고있다. 깃허브에서. 자동으로 pull받고있다.

 

 

 

 

 

- 버츄얼박스으 ㅣ우분투에다가. 듀플리케이트 탭을 했따. ngrok 창이 꺼지지 않도록 하려고.

 

sudo usermod -aG docker jenkins

sudo service jenkins restart

를 했다.

 

 

 

 

 

 

- 그리고 젠킨스에서 지금빌드를 눌렀다.

이번에는 끝까지 다 성공했다.

 

 

 

 

 

 

 

 

 

 

 

 

- 도커허브에서도 확인할 수 있다.

 

 

 

 

 

 

 

- 그리고 브라우저에서 https가 아닌 http로 저 주소를 쳐본다.

 

- 안된다.

 

 

 

 

 

- 아까 application.preoperties에서 localhostr 아니라 172.17.0.2로 바꾼다.

- 그럼 젠킨스에서 또 #넘버가 올라가서 빌드한다. #4로 방금 어플리케이션프로퍼티스 바꾼게 지가 풀바당ㅆ따.

- 그리고 지금빌드를 눌렀따. #5가 되었다.

근데 지금빌드를 안눌러도 자동으로 되니까 안눌러도 됬던듯.

 

 

 

 

 

- 다시 브라우저로 들어가본다.

 

 

 

 

 

 

 

○ docker logs memberbook

- 버츄얼 박스의 우분투에서 이걸 쳐본다.

 

 

- 저걸 못찾느다고 뜬다. 오류를 쭉 긁어서 gpt 줘보니 

문제가 발생하는 원인은 oracle.jdbc.OracleDriver 를 사용할 수 있는 의존성이 pom.xml에 없기 때문입니다.

현재 pom.xml에는 MariaDB 의존성만 추가되어 있습니다.

 

- pom.xml에 마리아디비 의존성만 추가되어 있다.

 
    <dependency>
      <groupId>com.oracle.database.jdbc</groupId>
      <artifactId>ojdbc11</artifactId>
      <scope>runtime</scope>
    </dependency>
 

 

 

- 이걸 추가해서 커밋, 푸쉬했다.

- 젠킨스에서 빌드가 완료되면 된다.

 

 

 

 

 

 


 

 

- 화면을 바꿔보고 커밋푸쉬하고, 젠킨스 기다리고 다시 접속해본다.

- 근데 너무 오래걸림. 다른사람이나 선생님도.

pom.xml 커밋 #7은 바로됐는데 이건 오래걸린다ㅣ.

- 저기 샵을 누른다.

 

 

- 그냥 중지시킨다.

 

 

 

 

- 이게 안되서 그렇다.

 

 

- 배포할 서벙 ㅔ문제가 생겨서 서버 접속이 안되서 지금 배포가 안되는 거다.

- 어제 만든 서버느 ㄴ된 ㅏ해본다. 연결이 된다ㅣ.

 

 

 

 

 

 

 

- 서버 문제니까 첫번째 서버로 접속해본다.

 

 

 

- 젠킨스에서 왼쪽 메뉴의 구성을 클릭한다.

- 저걸 바꿔본다. 3.34.142.234(두번째서버)로 되어ㅣㅇㅆ는 2개를 52.78.70.224 (첫번째서버)로 바꿔본다.

저장한다.

- 그리고 첫번째 서버의 80번 포트가 사용중이라 nginx를 스톱시켜야 한다.

근데 sudo service nginx stop만으로는 연결이 안되는게 그대로다.

 

 

 

- 오라클이 스톱되어있어서 디비접속이 안되어서 안됐었다. 이걸한다.

 

 

- 그리고 젠킨스에서 지금 빌드를 누른다.

- 지금 11번이다. 

- 8번, 9번은 안됐었고. 10번은 첫번째 서버로 바꾸고 젠킨스 구성에서 ip는 두번재서버에서 첫번째 서버로 바꾸고 해봤지만 오라클이 없어서 브라우저에 ipv4 주소핻 ㅗ안됐었다

- 11번은 이제 오라클까지 키고 했다. 된다.

 

 

 

 

- 젠킨스는 문제가 없었던 거고 배포 서버가 문제가 있었던 거다.

 

 

'배포 > AWS' 카테고리의 다른 글

5. 프로젝트 젠킨스로 배포 해보기  (1) 2024.12.11
3. CI/CD - Jenkins, GitHub, Eclipse  (0) 2024.12.10
2. AWS EC2(우분투)에 배포하기  (1) 2024.12.10
1. aws 개념  (1) 2024.12.10