Jenkins CI/CD (2)

2025. 2. 10. 22:21TIL

 

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