프로젝트를 진행하다가 아는 개발자분들과 함께 개발을 하기로 해서 판매 사이트보다는 재미있는 사이트를 만들고 싶어서 보드게임 사이트를 만들어보기로 했다. 다행히 아직 판매나 상품 로직은 만들기 전이여서 바로 내가 하던 프로젝트에서 방향만 바꿔서 진행하기로 했다.
프로젝트를 생성했다.
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://{eureka 서버}/eureka
config server yml
server:
port: 0 #랜덤으로 포트 설정
spring:
application:
name: game-service #Eureka에 등록되는 서비스 이름
h2:
console:
enabled: true
settings:
web-allow-others: true
path: /h2-console
jpa:
hibernate:
ddl-auto: update
show-sql: true
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:mem:testdb
username: sa
password:
eureka:
instance:
instance-id: ${spring.application.name}:${spring.application.instance_id:${random.value}} #포트가 중복으로 설정되어 구분하기 위한 인스턴스 아이디 값 설정
application yml
spring:
cloud:
config:
uri: http://127.0.0.1:8888
name: game
profile: default
bootstrap.yml
yml들을 작성해주었다.
implementation 'org.springframework.cloud:spring-cloud-starter-bootstrap'
implementation 'org.springframework.boot:spring-boot-starter-actuator'
bootstrap과 actuator를 추가해주자 actuator는 지금은 사용하지 않지만 같이 추가해두었다.
모든 기본 설정을 마치고 실제로 서버가 작동하는지 확인해보자
정상적으로 Eureka에 등록된다.
그럼 이제 실서버에서 소스를 작성할 수 있도록 git 작업과 jenkins 작업을 끝내자!
FROM openjdk:11-ea-27-jdk-slim
VOLUME /tmp
# jar파일 복사
COPY build/libs/game-service-1.0.jar game.jar
ENTRYPOINT ["java","-jar","game.jar"]
Dockerfile을 다음과 같이 작성해주고 테스트해보자!
docker build -t ililil9482/game:1.0 .
명령어로 실행해봤고
잘 진행되었다.
이제 혼자하는게 아니라 공유해야하니까... Jira를 사용해서 진행해보려고 한다.
프로젝트를 연결해주고
window의 경우 alt + shift + n
mac의 경우 option + shift + n
눌러서 티켓을 발급 받아서 진행해보자
잘 적용되었다.
티켓을 발급하면 자동으로 진행 중으로 상태를 변경하며 mian 브랜치나 develop 브랜치에서 소스를 가져오면 되는데. 우리는 아직 main 뿐이라 main으로 설정해서 사용하려고 한다.
test를 위해 소스를 대충 변경한 뒤
커밋까지 해보자. Jira의 티켓 값은 커밋 메세지에 적어도 되지만 브랜치로 하는게 더 편해서 그냥 브랜치에만 적용하려고 한다.
jira 티켓을 발급해서 push하면 브랜치가 새로 따지므로 자동으로 pull request가 생성된다.
머지해주거나 코드리뷰를 해주면 끝!
지라에서도 커밋되고 풀 리퀘스트가 정상작동 한것을 확인할 수 있다.
alt + shift + w
를 눌러서 다음과 같이 발급받은 티켓을 종료시킬 수 있다.
pipeline {
agent any
stages {
stage('Clone') {
steps {
git branch: 'main', credentialsId: '8e8302f1-6b98-4bfe-9981-2e027e49089b', url: 'https://github.com/juno-choi/game-service.git'
}
}
stage('Clean') {
steps {
sh 'cd /var/jenkins_home/workspace/game'
sh 'chmod +x gradlew'
sh './gradlew clean'
}
}
stage('Build') {
steps {
sh './gradlew build'
}
}
stage('HUB Push') {
steps {
sh 'docker build -t ililil9482/game:1.0 .'
sh 'docker push ililil9482/game:1.0'
}
}
stage('Down') {
steps {
sshPublisher(publishers: [
sshPublisherDesc(configName: 'publisher',
transfers: [
sshTransfer(cleanRemote: false,
excludes: '',
execCommand: 'cd /msa/game && 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/game && 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)
])
}
}
}
}
다음과 같이 파이프라인을 작성했다.
젠킨스 정상 작동했고
실제 서버의 Eureka에도 정상 등록되었다!