MSA 세팅 시작 [3] Eureka 및 jenkins 설정

최준호·2022년 3월 26일
0

jayeon-msa

목록 보기
3/8
post-thumbnail

🐋Dockerfile 작성

FROM openjdk:11-ea-27-jdk-slim

VOLUME /tmp

# jar파일 복사
COPY build/libs/jayeon-discovery-1.0.jar discovery.jar
ENTRYPOINT ["java","-jar","discovery.jar"]

이후에 jar version이 1.0으로 저장될 수 있게 gradle 설정을 변경해주자!
그리고 꼭 build를 하여 jar 파일을 생성한 후에 진행하자 안그럼 jar파일 못 찾는다!

docker build -t ililil9482/discovery:1.0 .

명령어로 이미지 마운트

정상적으로 실행된 것을 확인한 후 git에 소스를 올리고 jenkins에서 파이프라인으로 만들어보자

🤵‍♂️ Jenkins 설정

pipeline {
    agent any

    stages {
        stage('Clone') {
            steps {
                git branch: 'main', credentialsId: '8e8302f1-6b98-4bfe-9981-2e027e49089b', url: 'https://github.com/juno-choi/jayeon-discovery.git'
            }
        }
        stage('Clean') {
            steps {
                sh 'cd /var/jenkins_home/workspace/Eureka'
                sh 'chmod +x gradlew'
                sh './gradlew clean'
            }
        }
        stage('Build') {
            steps {
                sh './gradlew build'
            }
        }
        stage('HUB Push') {
            steps {
                sh 'docker build -t ililil9482/discovery:1.0 .'
                sh 'docker push ililil9482/discovery:1.0'
            }
        }
        stage('Down') {
            steps {
sshPublisher(publishers: [
  sshPublisherDesc(configName: 'publisher',
  transfers: [
    sshTransfer(cleanRemote: false,
    excludes: '',
    execCommand: 'cd /msa/eureka && sudo docker-compose down',
    execTimeout: 120000,
    flatten: false,
    makeEmptyDirs: false,
    noDefaultExcludes: false,
    patternSeparator: '[, ]+',
    remoteDirectory: '',
    remoteDirectorySDF: false,
    removePrefix: '',
    sourceFiles: '')
  ],
  usePromotionTimestamp: false,
  useWorkspaceInPromotion: false,
  verbose: false)
])
            }
        }
        stage('Up') {
            steps {
sshPublisher(publishers: [
  sshPublisherDesc(configName: 'publisher',
  transfers: [
    sshTransfer(cleanRemote: false,
    excludes: '',
    execCommand: 'cd /msa/eureka && sudo docker-compose up -d',
    execTimeout: 120000,
    flatten: false,
    makeEmptyDirs: false,
    noDefaultExcludes: false,
    patternSeparator: '[, ]+',
    remoteDirectory: '',
    remoteDirectorySDF: false,
    removePrefix: '',
    sourceFiles: '')
  ],
  usePromotionTimestamp: false,
  useWorkspaceInPromotion: false,
  verbose: false)
])
            }
        }
    }
}

이전에 작성했던 파이프라인을 참고하여 간단하게 작성했다.

정상적으로 push된 것을 확인할 수 있었다.

이제 내 서버에 올려보자. 올릴때 환경변수를 수정해야하는 것을 잊지말자!

🐋docker-compose.yml 작성하기

version: '3.7'
  
services:
    eureka:
        image: "ililil9482/discovery:1.0"
        container_name: eureka
        expose:
            - 8761
        environment:
            - spring.cloud.config.uri=http://config:8888
networks:
    default:
        external:
            name: msa

환경변수는 config server의 uri를 설정하는 부분을 변경해주었는데 이제 더이상 localhost가 아닌 컨테이너 내부에서 호출되는 uri로 설정해야하기 때문이다. port로 열어놨으니 해당 uri로 요청해도 되지만 network로 연결해놨으니 해당 설정을 사용해서 진행하자!

이제 포트로 직접 연결하는게 아닌 docker network를 통해 컨테이너끼리만 통신하면 되기 때문에 port 대신 expose를 사용하여 진행했다.

docker-compose logs

명령어 입력하면 docker-compose로 실행된 container의 log를 확인할 수 있는데 실제로 config:8888로 정상적으로 정보를 불러온것을 확인할 수 있고 서버도 정상적으로 실행되었다.

이제 도메인을 요청하여 실제 eureka 화면을 확인해보자.

나는 가비아 도메인을 사용하고 있어 가비아 설정으로 확인하려고 한다. 그리고 nginx의 설정도 변경해야한다.

✅nginx 설정 변경

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    server {
        listen 80;
        server_name eureka.jayeonapple.com;

        location / {
            proxy_pass http://eureka:8761;
        }
    }

    server {
        listen 80;
        server_name jenkins.jayeonapple.com;

        location / {
            proxy_pass http://jenkins:8080;
        }
    }

    server {
        listen 80;
        server_name config.jayeonapple.com;

        location / {
            proxy_pass http://config:8888;
        }
    }

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    #include /etc/nginx/conf.d/*.conf;
}

nginx.conf 파일에 다음과 같이 eureka 설정을 추가해주었다.

가비아 설정은 인터넷 찾으면 많고 간단하다!

다음과 같이 레코드를 추가해줬다.

eureka로 접근하면 유레카가 나오고

config에서 확인도 가능하고

jenkins로 접근하면 젠킨스가 뜬다

여기서 삽질한 부분이 있었는데 nginx.conf 파일을 수정하고 docker-compose로 컨테이너를 재실행했을 때 이상하게 젠킨스로만 연결되었었다. 아무리 설정들을 뒤져봐도 잘못된 부분이 안보이는데 이상하게 젠킨스화면만 뜬다. 그 이유는 Dockerfile을 이미지로 다시 마운트하지 않아서였다. 이미지의 버전이 이전 버전으로 계속 컨테이너를 실행시키니 이전 젠킨스로만 열어뒀던 설정이 그대로 적용되어서 젠킨스로만 연결되었던 것이다... 이 문제를 인식한 방법은 직접 nginx 컨테이너로 접근해서 conf 파일을 열어봤더니 내 파일과는 전혀 다른 파일이 있었다... 그래서 알수 있었다...ㅜ

profile
코딩을 깔끔하게 하고 싶어하는 초보 개발자 (편하게 글을 쓰기위해 반말체를 사용하고 있습니다! 양해 부탁드려요!) 현재 KakaoVX 근무중입니다!

0개의 댓글