프로젝트/협업 프로젝트(2023.12.18-2024.01.25)

[Key Word 개발기] AWS 배포 - Github Actions

dal_been 2024. 1. 16. 16:53
728x90

어쩌다보니 담당하게된 배포... 2주일정도 공부했지만... 사실 뭔말인지 모르고 대충 적용해봤었다...개인 레포에다가... 

그래서 맨처음 1주일은 이걸 왜 이렇게 하는데?? 였지만 다행히 2주차 정도 되니까 아 그렇구나..정도까지 가게 되었다.

협업프로젝트 배포라서 걱정이 많았는데 다행히 성공하여서 천천히 어떻게 했는지 기록하려고 한다.

 


CI / CD + DB

 

간단하게 배포 방식과 db를 어떻게 하였는지 이미지로 보여주자면

설명하자면

1. Github Actions를 통해서 PR올린 코드가 build(+test) 할때 에러가 없는지 확인한다. 

(만약 에러가 나온다면 merge못하게 설정가능하다)

2. 에러가 안나와 merge를 진행하게 되면 Github Webhook에서 jenkins쪽으로 알림을 보낸다

-> merge가 되었으니 build해달라고

3. jenkins는 Github Webhook의 알림을 받고 build + make jar + build을 성공한다

(만약 Github Actions에서 pr시 build테스트를 안했다면 jenkins쪽에서 실패하여 build 및 deploy를 실패하게 된다)

4. jenkins가 성공하여 ec2에 jar파일을 배포하고 run을 하게 한다.

5. 미리 ec2에 설치한 db와 elasticsearch를 was가 이용하게 된다

 

자동배포를 구현한 이유는 자동배포를 하지 않으면 매번 ec2 콘솔에 들어가서 jar파일을 배포하고 실행해줘야한다는 단점이 존재한다. 

그래서 Github WebHook과 jenkins를 이용하여 자동배포를 구현하였다.

 

Github Actions

 

미리 블로그에 정리한 내용이 있다.

설정은 위의 블로그를 참고하고 github actions를 위한 yml파일을 협업프로젝트에서 어떻게 설정했는지 설명할 것이다.

 

name: Java CI with Gradle

on:
  pull_request:
    branches: [ "main","develop" ]
    

permissions:
  contents: read

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3
    - name: Set up JDK 8
      uses: actions/setup-java@v3
      with:
        java-version: '8'
        distribution: 'temurin'
        
    - name: grant execute permission for gradlew
      run: chmod +x gradlew
      
    - name: Build with Gradle
      run : ./gradlew build

 

1. pull_request

- main, develop브랜치로 pr을 날리면 해당 jobs들이 실행되게 설정

 

2. permissions

- github actions 워크플로우의 권한 설정으로 파일 내용을 읽을 수 있는 권한을 설정한 것이다

 

3. name : jdk 설치

- 프로젝트 build.gradle에 설정한 자바 버전에 따라 설치해주면 된다

 

4. name : 권한 주기

- 원래는 이 부분이 없었는데 build할떄 권한이 없다는 에러가 나와서 ./gradlew build할 수 있는 권한을 먼저 부여한다

 

5. name : build

- build를 통해 테스트 코드가 잘 수행되는지, 다른 에러사항들은 없는지 확인한다

 


다음 장은 ec2에서 도커를 활용하여 어떻게 젠킨스를 설치하는지 설명할 것이다