이번 글에서는 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 성공
'Spring boot' 카테고리의 다른 글
Nginx로 HTTPS 설정하기 (0) | 2024.06.18 |
---|---|
Route 53없이 가비아 DNS 레코드를 통해 EC2 도메인 연결 및 Nginx로 서버 배포하기 (0) | 2024.06.17 |
Local 개발 환경에 Https 적용시키기(with mkcert) (0) | 2024.06.07 |
AWS EC2 & S3 & Code Deploy를 활용한 CD (4) | 2024.05.08 |
AWS EC2인스턴스에 Spring Boot 서버 배포하기 (0) | 2024.04.30 |