aws EC2,RDS, githubaction으로 CI/CD 구성 - (1) CI.yml 만들기

Do_It·2023년 11월 29일

오늘은 어디~?

목록 보기
6/9

CI/CD란?

개발을 하다보면 여러가지 브런치에서 통합이 이루어지고 통합된 브런치를 바탕으로 배포까지 진행한다.
근데 이 과정들이 귀찮은 것이다. 이 과정은 사실 개발이라기 보다는 단순 반복적인 일이기 때문에, 소프트웨어 개발에 집중하기 위한 만들어진 개념이라고 생각한다.

  • CI (Continuoust Integration)
    탄생 배경은 여려 명의 개발자가 동시에 작업할 때, 이 작업물들을 통합하고 테스트하는 과정에서 문제가 발생할 수 있다.
    즉 CI는 여려 명의 개발자들이 동시에 작업한 코드를 자동으로 통합하고, 빌드 및 테스트를 수행하는 것이다.
  • CD (Continuous Deployment)
    코드의 통합 및 테스트가 성공하면, 그 코드를 실제 환경에 배포해야한다. 이 배포 과정에서도 문제가 발생할 수 있기기에 이를 해결하기 위해 CD가 도입되었다.
    CD는 수정한게 바로 사용자에게 전달된다고 생각하면 된다.

github Action?

github Actions은 gitHub에서 호스팅하는 자동화 플랫폼!

코드의 빌드,테스트,배포,그리고 사용자 정의 워크플로우를 자동화하는 데 사용됨.
GitHub Actions은 소스 코드와 함께 저장소에 포함된 YAML 파일에 기반하여 작동!
내가 만든 코드 + 명령서.yml 이라고 생각하면 된다. 플랫폼에서는 명령서에 있는 다양한 요구대로 내가 만든 코드들이 실행되게 하는 것이다.

  • gitHub Actions은 플랫폼이라고 하면 뭘로 만들어졌을까?
    도커 기반으로 만들어졌다. 실제로 GitHub Actions이 실행되는 환경은 GitHub 호스트된 가상 머신이나 컨테이너이다.

자바라는 플랫폼을 쓰려면 자바의 문법을 알아야하듯, gitHub Actions를 쓰기 위해서는 gitHub Actions에서 쓰는 문법들을 알아야한다.

주요 문법(거창하게 문법이지 사실 그냥 개념)

  • workflow
    워크플로우는 gihub Actions의 실행 꼐획을 정의하는 YAML 파일이다. 즉, 명령서~!
    .github/workflows에 위치하며 각 이벤트에 대해 작업을 수행할 수 있다.
  • Job
    워크플로우는 하나 이상의 작업으로 구성.
  • action
    액션은 코드,명령어, 스크립트르 실행하라고 하는 것
  • Trigger
    워크플로우 실행하는 조건
# 이곳이 github actions 플랫폼이며 곧 runnuer라고도 함 

name: CI
# dev로 push 되었을 때 실행해~! Trigger! 
on:
  push:
    branches: [dev]
# 해야할 작업들!
jobs:
  build:
    runs-on: ubuntu-latest
# 내가 만든 스프링부트 앱은 반드시 데이터베이스랑 연결을 해야 실행되므로  
    services:
      mysql:
        image: mysql:latest
        env:
          MYSQL_ROOT_PASSWORD: root
          MYSQL_DATABASE: testdb
          MYSQL_USER: testuser
          MYSQL_PASSWORD: testpassword
        ports:
          - 3306:3306
# 내가 만든 스프링부트 환경변수가 셋팅 되어있으므로 환경 변수 셋팅!
    env:
      DB_HOST: localhost
      DB_NAME: testdb
      DB_USERNAME: testuser
      DB_PASSWORD: testpassword
# name 이 작업의 이름 actions/checkout@v2은  GitHub 리포지토리에서 소스 코드를 가져오는 역할
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
# Java 개발 환경을 설정을 내가 만든 스프링부트 환경과 동일하게 만들기!
      - name: Set up JDK 17
        uses: actions/setup-java@v2
        with:
          java-version: '17'
          distribution: 'adopt'

      - name: Print environment variables
        run: |
          echo "DB_HOST=${DB_HOST}"
          echo "DB_NAME=${DB_NAME}"
          echo "DB_USERNAME=${DB_USERNAME}"
          echo "DB_PASSWORD=${DB_PASSWORD}"
# 빌드 실행 명령어!
      - name: Build with Gradle
        run: |
          chmod +x gradlew
          ./gradlew build
        shell: bash

이렇게 쓰면 되는데, 나같은 경우에는 스프링 부트에 환경변수를 셋팅했고, mysql 데이터베이스와 연동되어있기에 위에 같이 셋팅하였다. 왜냐하면 빌드할 때 데이터베이스의 정보가 없으면 실행 실패하기 때문이다.

그렇다면 workflow는 어디서 어떻게 만들까?


이름 작성 후 Commit changes...를 누르면 된다.

이렇게 생성된 것을 확인할 수 있다.

profile
오늘의 노력이 내일의 성장으로 이어지고 있음을

0개의 댓글