2025. 2. 10. 22:21ㆍTIL
1. Jenkins에서 github와 관련된 Plugin설치
2. Github Personal AccessToken을 통해 Jenkins에서 Github 코드에 접근이 가능하게 설정
3. Github에서 코드 변경이 이루어졌을때 자동으로 Jenkins가 빌드되도록 Webhook설정
4. application.yml파일이 .gitignore로 github에 올라가있지 않기때문에 Jenkins 환경변수로 설정
5. 스크립트 작성
http://3.36.182.4:8080/ 접속
Jenkins 관리 탭 -> Plugins 클릭
초기에 권장 플러그인 자동 설치를 진행했기 때문에 git plugin도 설치가 되어있는것을 확인할수 있다.
Jenkins가 github에서 HJ-CHAT 의 저장소를 접근할수 있도록 Github Personal Access Token을 생성해줘야 한다.
github 프로필 클릭후 setting -> personal access token -> classic 토큰 생성
대시보드로 이동후 새로운 item 클릭
소스 코드 관리에서 GIT 선택후 나의 Repository URL을 입력하고 +Add 버튼 클릭
Username과 github personal access Token 생성을 통해 발급받은 비밀번호 입력
이제 Jenkins에서 github에 접근하여 코드를 가져올수 있는 상태가 되었다.
Jenkins에서 github에 접근하는 설정은 끝났으니 이제 github에서 코드 변경이 이루어지면 자동으로 Jenkins가 빌드를 실행하도록 WebHook을 실행해야한다.
저장소 settings -> Webhooks 클릭
Webhook 설정
(이후 URL은 CSRF 설정으로 인하여 토큰값을 넣은 URL로 수정했음)
이후 Jenkins build 스크립트 설정
application.yml파일을 보안을 위해 .gitignore로 설정하여 github에 올리지 않기때문에 Jenkins 환경변수를 통해 application.yml 파일을 생성하도록 스크립트를 작성
#!/bin/bash
echo "Starting HJ-CHAT CI/CD pipeline..."
# Git 최신 코드 Pull
git checkout master
git pull origin master
# Gradle 빌드
./gradlew clean build
# (hj-chat-0.0.1-SNAPSHOT.jar → hj-chat.jar)
mv build/libs/hj-chat-0.0.1-SNAPSHOT.jar build/libs/hj-chat.jar
# application.yml 자동 생성
echo "Creating application.yml..."
cat > src/main/resources/application.yml <<EOL
auth:
jwt:
issuer: "hj-park"
secret: "$JWT_SECRET"
spring:
datasource:
url: "$DB_URL"
username: "$DB_USERNAME"
password: "$DB_PASSWORD"
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
hibernate:
ddl-auto: update
properties:
hibernate:
dialect: org.hibernate.dialect.MySQL8Dialect
format_sql: true
show-sql: true
mail:
host: smtp.gmail.com
port: 587
username: "$MAIL_USERNAME"
password: "$MAIL_PASSWORD"
protocol: smtp
properties:
mail:
smtp:
auth: true
starttls:
enable: true
kafka:
bootstrap-servers: "\${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}"
consumer:
group-id: hjchat-consumer-group
producer:
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer
data:
redis:
host: "$REDIS_HOST"
password: "$REDIS_PASSWORD"
port: "$REDIS_PORT"
server:
port: 8081
ssl:
enabled: false
management:
endpoints:
web:
exposure:
include: health,info
endpoint:
health:
show-details: always
server:
port: 8081
logging:
level:
org.springframework.graphql: INFO
EOL
echo "application.yml created successfully!"
# Docker 컨테이너 중지 및 제거
echo "Stopping existing Docker containers..."
docker-compose down
# 최신 JAR 파일을 컨테이너 내부에 적용
echo "Rebuilding and restarting Docker containers..."
docker-compose up --build -d
echo "Deployment completed successfully!"
EC2에서 Jenkins 사용자를 Docker 그룹에 추가
sudo usermod -aG docker jenkins
sudo systemctl restart jenkins
application.yml의 값들을 Jenkins 환경변수에 설정하기 위해 Jenkins 관리 -> System 클릭
환경 변수 추가 (ctrl+f 를 통해서 Environment 검색)
테스트: https://www.youtube.com/watch?v=SaKtDO0s1lE
'TIL' 카테고리의 다른 글
NEXTIL 프로젝트 kakao 로그인 구현 (1) | 2025.02.18 |
---|---|
TIL 프로젝트 (1) | 2025.02.17 |
Jenkis로 CI/CD 구축하기 (1) (0) | 2025.02.08 |
Kafka timeout 오류 (0) | 2025.02.07 |
𝓓𝓮𝓼𝓲𝓰𝓷 𝓟𝓪𝓽𝓽𝓮𝓻𝓷𝓼 (1) | 2025.02.05 |