Github Flow를 브랜치 전략으로 선택했기 때문에 CI에 대한 구성이 필요했고 현재 상황에서 가장 효율적인 자동화 전략이 무엇인지 고민하게 되었습니다.
Github Actions은 Github 저장소를 기반으로 소프트웨어 개발 Workflow를 자동화 할 수 있는 도구입니다. 간단하게 말하자면 Github에서 직접 제공하는 CI/CD 도구라고 할 수 있습니다.
Workflow는 Github 저장소에서 발생하는 build, test, package, release, deploy 등 다양한 이벤트를 기반으로 직접 원하는 Workflow를 만들 수 있습니다.Workflow는 Runners라고 불리는 Github에서 호스팅 하는 Linux, macOS, Windows 환경에서 실행된다. 그리고 이 Runners를 사용자가 직접 호스팅하는 환경에서 직접 구동시킬 수도 있습니다.
CI/CD 자동화를 위한 WorkFlow를 구현하기 위해선 Jenkins와 같은 무료 플랫폼도 존재합니다. 대표적으로 Gitub Actions와 Jenkins의 차이는 다음과 같습니다.
위 특징들을 비교해볼 때 Github Actions가 Jenkins 보다 유연하고 다양한 언어와 환경에 호환이 가능하다는 점이 장점으로 다가왔습니다. 그리고 YAML 파일로 구성이 가능해 프로젝트에서 다루는 언어로 관리할 수 있다는 측면이 큰 장점으로 다가왔고 무엇보다 별도의 설치 및 계정 생성에 대한 과정을 생략하고 Github 내에서 CI에 대한 구성과 관리를 할 수 있다는 점에 작업의 효율을 높이는 데 매우 중요할 것이라 판단했습니다.
# 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://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-gradle
name: Java CI with Gradle
on:
pull_request:
branches: [ main ]
permissions:
contents: read
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Set Up MySQL
uses: samin/mysql-action@v1
with:
host port: 3306
container port: 3306
character set server: 'utf8'
mysql database: 'soldout_db'
mysql password: ${{ secrets.DB_PASSWORD }}
mysql user: 'soldout'
mysql root password: ${{ secrets.ROOT_PASSWORD }}
- uses: actions/checkout@v3
- name: Set up JDK 11
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'temurin'
- name: Build with Gradle
uses: gradle/gradle-build-action@0d13054264b0bb894ded474f08ebb30921341cee
with:
arguments: build
위처럼 yml 파일로 workflow 정의해두고 프로젝트에 파일을 포함시켜두면 Github 저장소 내에서 CI에 대한 관리를 할 수 있도록 구성할 수 있습니다.
코드 작성 외적인 작업이지만 꽤 많은 시간을 소요하게 되는 테스트 및 빌드 과정에 대해 자동화 구성을 해보기 위해 Jenkins와 Github Actions의 차이를 비교해보면서 효율적인 업무 환경을 구성해보는 이점을 가져오면서 현재 프로젝트 상황에 적합한 방법을 선정해보는 경험을 해볼 수 있었습니다.
https://choseongho93.tistory.com/295
https://www.daleseo.com/github-actions-basics/