본문 바로가기
Spring boot

Github Actions를 활용한 CI

by 리버🐦‍🔥 2024. 4. 27.

이번 글에서는 CI/CD중 지속적 통합(Continuous Intergration)에 대해서 알아보고자 한다.

CI(Continuous Intergration)

지속적 통합(CI)는 코드의 변경 사항을 공유 레포지토리(ex. Github)에 올리기 전에 빌드 및 테스트되어 통합하는 방식을 말한다.

이 글에서는 이론보다는 Github Actions를 활용한 실습에 좀 더 초점을 맞춰볼 예정이다.

(Jenkins, Circle CI, Travis CI 등 여러 CI 툴들이 있지만, Github Actions는 설치가 필요없고 Github에서 바로 사용하기 때문에 본 글에서는 Github Actions를 사용하겠다.

CI를 하는 이유

  • 버그를 신속하게 찾아 해결
  • 소프트웨어의 품질 개선
  • 새로운 업데이트의 검증
  • 릴리즈 시간 단축

등.. 여러 이유로 CI를 진행한다.

Github Actions를 통해 CI 환경 구성하기

그럼 바로 본론으로 들어가보도록 하겠다.

1. Github Actions에서 알맞은 Workflow 선택

우리는 Spring boot 3와 java를 사용할 것이기 때문에 사진과 같이 “Java with Gradle”을 선택한다.

2. gradle.yml 파일 생성 및 수정

# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-gradle

name: Java CI with Gradle

on:
  pull_request:
    branches: [ "main" ] # 해당 브랜치가 pull request될 때 CI

jobs:
  build:

    runs-on: ubuntu-latest
    permissions:
      contents: read

    steps:
    # workflow 실행 전 기본적으로 체크아웃 필요
    - uses: actions/checkout@v4

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

    # Configure Gradle for optimal use in GiHub Actions, including caching of downloaded dependencies.
    # See: https://github.com/gradle/actions/blob/main/setup-gradle/README.md
    # 해당 워크플로우는 gradle clean build를 수행
    - name: Setup Gradle
      uses: gradle/actions/setup-gradle@417ae3ccd767c252f5661f1ace9f835f9654f2b5 # v3.1.0

    - name: Build with Gradle Wrapper
      run: ./gradlew build

    # NOTE: The Gradle Wrapper is the default and recommended way to run Gradle (https://docs.gradle.org/current/userguide/gradle_wrapper.html).
    # If your project does not have the Gradle Wrapper configured, you can use the following configuration to run Gradle with a specified version.
    #
    # - name: Setup Gradle
    #   uses: gradle/actions/setup-gradle@417ae3ccd767c252f5661f1ace9f835f9654f2b5 # v3.1.0
    #   with:
    #     gradle-version: '8.5'
    #
    # - name: Build with Gradle 8.5
    #   run: gradle build

  dependency-submission:

    runs-on: ubuntu-latest
    permissions:
      contents: write

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

    # Generates and submits a dependency graph, enabling Dependabot Alerts for all project dependencies.
    # See: https://github.com/gradle/actions/blob/main/dependency-submission/README.md
    - name: Generate and submit dependency graph
      uses: gradle/actions/dependency-submission@417ae3ccd767c252f5661f1ace9f835f9654f2b5 # v3.1.0

on 부분에서는 해당 wokrflow를 수행할 이벤트를 결정한다.

위 코드에서는 “main”브랜치에 pull_request가 될 때 CI를 진행하도록 되어있다.

jobs부분에서는 해당 workflow에서 수행할 일들을 순서대로 입력해준다.

3. Pull Request를 날려서 테스트

CI 진행중

 

Workflow 실패

 

Workflow 성공