[MSA 프로젝트] github action으로 CI 구현하기

angie·2024년 6월 2일

도커 이미지를 지속적으로 만드는 번거로움을 해결하기 위해, GitHub Actions을 사용하여 도커 이미지를 자동으로 빌드하는 CI(Continuous Integration) 코드를 구현했다.

1. github에 환경변수 등록하기

빌드에 필요한 환경 변수는 github에 등록해주어야 한다. 각 시크릿 변수와 환경 변수는
Setting -> Secrets and variables -> Actions로 가서 추가할 수 있다.

  • Secrets : 민감한 정보 저장
  • Variables : 시크릿이 필요하지 않은 일반 환경 설정 정보 저장

  • Repository: 해당 리포지토리에서만 사용할 값 저장
  • Organization : 모든 리포지토리에서 사용할 값을 저장.

2. github action 워크플로 파일 만들기

GitHub Actions를 설정하기 위해 먼저 루트 폴더에 .github/workflows/notice-deploy.yaml 파일을 만들어준다. 이 파일이 생성되면 GitHub Actions가 자동으로 동작한다.

name: Build and Push Docker Image
on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

jobs:
  build-and-push-image:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Set up JDK 17
        uses: actions/setup-java@v2
        with:
          distribution: 'temurin'
          java-version: '17'

      - name: Build with Gradle
        run: |
          cd msa-notice
          chmod +x ./gradlew
          ./gradlew build
        env:
          DATABASE_URL: ${{ secrets.DATABASE_URL }}
          DATABASE_USERNAME: ${{ secrets.DATABASE_USERNAME }}
          DATABASE_PASSWORD: ${{ secrets.DATABASE_PASSWORD }}
          RABBITMQ_URL: ${{ env.RABBITMQ_URL }}
          RABBITMQ_PORT: ${{ env.RABBITMQ_PORT }}
          RABBITMQ_USERNAME: ${{ secrets.RABBITMQ_USERNAME }}
          RABBITMQ_PASSWORD: ${{ secrets.RABBITMQ_PASSWORD }}
          UNIV_RECOMMENDATION_URL: ${{ env.UNIV_RECOMMENDATION_URL }}
          EXTERNAL_RECOMMENDATION_URL: ${{ env.EXTERNAL_RECOMMENDATION_URL }}
          OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}

      - name: Login to DockerHub
        uses: docker/login-action@v1
        with:
          username: ${{ secrets.DOCKERHUB_NAME }}
          password: ${{ secrets.DOCKERHUB_PASSWORD }}

      - name: Build and push Docker image
        run: |
          cd msa-notice
          docker build -t ${{ secrets.DOCKERHUB_NAME }}/msa-notice:latest .
          docker push ${{ secrets.DOCKERHUB_NAME }}/msa-notice:latest

name:

워크플로우의 이름. 여기서는 "Build and Push Docker Image"이 이름이다.

on:

워크플로우를 트리거하는 이벤트. main 브랜치로의 푸시나 풀 리퀘스트가 발생할 때 워크플로우가 실행된다.

jobs:

워크플로우 내에서 수행할 작업을 정의한다. 여기서는 하나의 작업인 build-and-push-image가 있다.

  • runs-on: 작업을 실행할 환경을 지정한다. 여기서는 최신 우분투 환경인 ubuntu-latest를 사용한다.
  • steps: 각 단계별로 수행할 작업을 정의한다.

name : "Checkout"
uses : actions/checkout 액션을 사용하여 현재 저장소를 체크아웃한다.

name: "Set up JDK 17"
uses: actions/setup-java 액션을 사용하여 JDK 17을 설정
with: JDK의 배포판과 버전을 지정한다. 여기서는 Temurin 배포판의 JDK 17을 사용합니다.

name: "Build with Gradle"
run: 셸 명령어를 실행합니다.

  • cd msa-notice: msa-notice 디렉토리로 이동
  • chmod +x ./gradlew: Gradle 래퍼 스크립트에 실행 권한을 부여
  • ./gradlew build: Gradle을 사용하여 프로젝트를 빌드
    env: 빌드 과정에서 사용할 환경 변수를 설정한다. GitHub에 환경 변수를 커밋할 수는 없기에, 빌드 시 필요한 민감한 정보는 github 환경변수 등록한 후 시크릿은 secrets. 으로 환경변수는 env.으로 가져와 사용한다.

name: "Login to DockerHub"
uses: docker/login-action 액션을 사용하여 DockerHub에 로그인한다.
with: DockerHub 로그인 정보로 사용할 시크릿 변수를 지정한다.

name: "Build and push Docker image"
run: 셸 명령어를 실행합니다.

  • cd msa-notice: msa-notice 디렉토리로 이동합니다.
  • docker build -t ${{ secrets.DOCKERHUB_NAME }}/msa-notice:latest .: 도커 이미지를 빌드한다.
  • docker push ${{ secrets.DOCKERHUB_NAME }}/msa-notice:latest: 빌드한 도커 이미지를 DockerHub에 푸시한다.

성공 메시지가 표시된 후, Docker Hub에 가보면 이미지가 잘 생성된 것을 확인할 수 있다.

profile
열심히 달리는 개발자

0개의 댓글