CI/CD란

어플리케이션 개발 단계부터 배포까지 모든 단계를 자동화를 통해 효율적이고 빠르게, 사용자에게 빈번히 배포할 수 있도록 만드는 것이다.

 

AWS로 프로젝트를 배포 후에 자잘한 수정이 있었고, 그럴 때마다 빌드를 새로 하고. jar파일을 다시 업로드해야 하는 귀찮음이 있었다. 자동 배포를 위해 CI/CD파이프라인을 구축하기로 했다.

 

기존 프로젝트가 있기 때문에 github에 연결해 주었다.

 

EC2에서 빌드와 프로젝트 실행을 할 수도 있지만 빌드의 경우 서버에 많은 부담을 주기 때문에 빌드를 github actions에서 하고 넘겨줄 예정이다

 

job - step 설정 

1. Github Repository에 올린 파일들을 불러오기

연결되어 있는 Github Repository에 있는 파일을 불러오는 작업을 진행해 준다.

- name: Github Repository에 올린 파일들을 불러오기
  uses: actions/checkout@v4

2. JDK 17 버전 설치

github actions에서 빌드된 jar파일을 EC2로 넘겨줄 거 기 때문에 JDK설치가 필요하다

- name: JDK 17버전 설치
  uses: actions/setup-java@v4
  with:
    distribution: temurin
    java-version: 17

3. application.properties 파일 만들기

해당 파일은 노출되면 안 되기 때문에 secrets  키로 작성해 준다. 빌드되기 전 만들어주기

- name: application.properties 파일 만들기
  run: echo "${{ secrets.APPLICATION_PROPERTIES }}" > ./src/main/resources/application.properties

4. 빌드 하기

- name: 테스트 및 빌드하기
  run: ./gradlew clean build

5. SCP로 EC2에 빌드된 파일 전송하기

EC2로 빌드된 파일을 전송해야 하기 때문에 host, username, key, target(경로) 작성해 준다.

- name: SCP로 EC2에 빌드된 파일 전송하기
  uses: appleboy/scp-action@v0.1.7

6. SSH(원격 접속)로 EC2에 접속하기

EC2접속해서 프로젝트 실행시켜 줄 script를 작성한다.

- name: SSH(원격 접속)로 EC2에 접속하기
  uses: appleboy/ssh-action@v1.0.3

 

지금 프로젝트에서 feature 브랜치에서 master브랜치로 pull_request로 작업 진행 중이라 아래와 같이 설정해 주었다.

on:
  pull_request:
    branches:
      - master