1. CI/CD
한 프로젝트를 여러명이 공유하며 발생할 수 있는 문제점은 매우 많다.
오류를 방지하기 위해 테스트코드를 작성하지만 매 PR 리뷰마다 리뷰어들이 일일히 테스트 코드를 돌려보면 생산성이 저하된다.
따라서 매 테스트의 성공을 확실히 보장 해주는 수단이 필요한데 그것이 CI/CD 라는 개념이다.
- CI (Continuous Integration)
'지속적 통합' 이라는 의미로 애플리케이션 변경 사항 반영시 즉 PR시 자동으로 빌드 및 테스트 되어 잘못된 코드가 공유되는 것을 방지한다. - CD (Continunous Deployment)
'지속적 배포' 라는 의미로 변경 사항을 배포할 때 사용하는 파이프라인을 공유하여 배포 플로두을 자동화해 번거로움을 없애는 것이다.
2. Github Actions
Github Actions 는 Github에서 제공하는 CI/CD 툴이다.
build, test, deploy 등 필요한 Workflow를 등록해두면 Github의 pull, pr 등 특정 이벤트가 발생하였을 때 해당 워크플로우를 수행한다.
별다른 툴을 설치하지 않고 Github Repository 에서 바로 사용할 수 있다는 장점이 있다.
3. Github Actions 자동 빌드 및 테스트
이제 Github Actions를 이용해 CI 환경을 구축 해보자.
Pull Request를 올렸을 때 자동으로 빌드 및 테스트를 수행하는 Workflow를 구축해보자.
3.1. Workflow 선택
CI 환경을 구축 할 Github Repository 의 Actions 탭으로 이동해 새로운 Workflow 를 추가할 수 있다.
자주 사용되는 언어나 프레임워크는 이미 제공하고 있기 때문에 알맞은 워크플로우를 선택하면 된다.
gradle 을 사용하고 있기 때문에 gradle 검색 후 Configure을 누르면 gradle.yml 파일이 생성된다.
3.2. gradle.yml
name: Java CI with Gradle
on:
# pull request 시 workkflow 수행
pull_request:
branches: [ "main" ]
permissions:
contents: read
jobs:
build:
runs-on: ubuntu-latest
steps:
# 워크플로우 실행 전 체크아웃
- uses: actions/checkout@v3
# JDK 11 버전 설치, 프로젝트 버전에 맞는 JDK로 변경하자
- name: Set up JDK 11
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'temurin'
# gradle + arguments 명령어 실행
# 이 워크플로우는 $ gradle clean build 를 실행
- name: Build with Gradle
uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1
with:
arguments: clean build
gradle configure을 선택하면 기본으로 제공되는 파일에서 몇 가지만 수정하면 된다.
'on' 은 어떤 브렌치에 어떤 이벤트가 발생하면 워크플로우를 수행할지 결정하는 부분이다.
'jobs' 에서 수행할 워크플로우를 차례대로 입력하면 된다.
더 다양한 것들은 Github Actions 공식 문서 를 참고하자.
3.3. Pull Request 작성
PR 작성 시 수행할 워크플로우를 정의했으니 PR을 작성해보자.
PR 작성시 다음과 같이 자동으로 워크플로우를 수행하는 것을 볼 수 있다.
3.3.1. Workflow 성공
워크플로우가 성공하면 다음과 같이 성공 여부를 알려준다.
3.3.1. Workflow 실패
워크플로우가 실패하면 실패했다는 표시와 함께 어디서 틀렸는지도 함께 알려준다.
로그도 확인할 수 있으니 계속 실패한다면 로그를 확인해 수정해보도록 하자.
4. NEXT
Github Actions를 이용해 CI 환경을 구축하였으니 다음엔 CD 환경을 구축해보겠다.
참고자료