Home [soldout] Github Actions를 활용한 CI 구성
Post
Cancel

[soldout] Github Actions를 활용한 CI 구성

# 문제점


Github Flow를 브랜치 전략으로 선택했기 때문에 CI에 대한 구성이 필요했고 현재 상황에서 가장 효율적인 자동화 전략이 무엇인지 고민하게 되었습니다.

# 해결방안


Github Actions

Github Actions은 Github 저장소를 기반으로 소프트웨어 개발 Workflow를 자동화 할 수 있는 도구입니다. 간단하게 말하자면 Github에서 직접 제공하는 CI/CD 도구라고 할 수 있습니다.

Workflow는 Github 저장소에서 발생하는 build, test, package, release, deploy 등 다양한 이벤트를 기반으로 직접 원하는 Workflow를 만들 수 있습니다.Workflow는 Runners라고 불리는 Github에서 호스팅 하는 Linux, macOS, Windows 환경에서 실행된다. 그리고 이 Runners를 사용자가 직접 호스팅하는 환경에서 직접 구동시킬 수도 있습니다.

Github Actions를 선택한 이유

CI/CD 자동화를 위한 WorkFlow를 구현하기 위해선 Jenkins와 같은 무료 플랫폼도 존재합니다. 대표적으로 Gitub Actions와 Jenkins의 차이는 다음과 같습니다.

Jenkins

  • 서버 설치 필요
  • 작업 또는 작업이 동기화되어 제품을 시장에 배포하는 데 더 많은 시간이 소요 
  • 계정 및 트리거를 기반으로하며 github 이벤트를 준수하지 않는 빌드를 중심으로합니다.
  • 환경 호환성을 위해 도커 이미지에서 실행해야 함
  • 캐싱 메커니즘을 지원하기 위해 플러그인을 사용할 수 있습니다.
  • 공유할 수 있는 능력이 없습니다.
  • 전세계많은 사람들이 이용하여 문서가 다양

GitHub Actions

  • 클라우드가 있으므로, 별도 설치 필요없음
  • 비동기 CI / CD 달성
  • 모든 github 이벤트에 대한 작업을 제공하고 다양한 언어와 프레임 워크를 지원합니다.
  • 모든 환경과 호환
  • 캐싱이 필요한 경우 자체 캐싱 메커니즘을 작성해야 합니다.
  • github 마켓 플레이스를 통해 공유 가능
  • 젠킨스에 비해 문서가 없음

위 특징들을 비교해볼 때 Github Actions가 Jenkins 보다 유연하고 다양한 언어와 환경에 호환이 가능하다는 점이 장점으로 다가왔습니다.

그리고 YAML 파일로 구성이 가능해 프로젝트에서 다루는 언어로 관리할 수 있다는 측면이 큰 장점으로 다가왔고, 무엇보다 별도의 설치 및 계정 생성에 대한 과정을 생략하고 Github 내에서 CI에 대한 구성과 관리를 할 수 있다는 점에 작업의 효율을 높이는 데 매우 중요할 것이라 판단했습니다.

gradle.yml 파일

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
name: Java CI with Gradle

on:
  # main 브랜치에 대한 PR이 올라오는 경우에 해당 workflow를 실행
  pull_request:
    branches: [ main ]

permissions:
  contents: read

jobs:
  build:

    # CI 과정은 ubuntu 서버에서 동작
    runs-on: ubuntu-latest

    steps:

    - uses: actions/checkout@v3

    # JDK 설치
    - name: Set up JDK 11
      uses: actions/setup-java@v3
      with:
        java-version: '11'
        distribution: 'temurin'

    # Build 과정을 수행
    - name: Build with Gradle
      uses: gradle/gradle-build-action@0d13054264b0bb894ded474f08ebb30921341cee
      with:
        arguments: build

github actions는 마켓 플레이스에서 사용자가 원하는 동작에 대한 코드를 제공해줘 손 쉽게 위와 같은 yml 파일을 구성할 수 있습니다. 위처럼 workflow 정의해두고 프로젝트에 파일을 포함시켜두면 Github 저장소 내에서 CI에 대한 관리를 할 수 있도록 구성할 수 있습니다.

# 마치며


코드 작성 외적인 작업이지만 꽤 많은 시간을 소요하게 되는 테스트 및 빌드 과정에 대해 자동화 구성을 해보기 위해 Jenkins와 Github Actions의 차이를 비교해보면서 효율적인 업무 환경을 구성해보는 이점을 가져오면서 현재 프로젝트 상황에 적합한 방법을 선정해보는 경험을 해볼 수 있었습니다.

# 참고자료


  • https://choseongho93.tistory.com/295
  • https://www.daleseo.com/github-actions-basics/
  • https://velog.io/write?id=748f7b13-4081-4aa8-9442-cd3ffb20ada5
This post is licensed under CC BY 4.0 by the author.

[soldout] GitHub flow를 통한 브랜치 관리

[soldout] Elasticsearch 사용한 APM 환경 구성