Infra/CI | CD

[CI] Github Actions로 빌드 및 테스트를 자동화해보자

kth990303 2022. 8. 19. 19:23
반응형

CI(Continuous Integration)는 지속적인 통합을 의미하며, 개발자가 구현한 코드를 병합하여 자동으로 빌드 및 테스트를 진행한 후 문제가 없으면 배포를 진행하는 것을 의미한다. CI 툴 없이 Git Conflicts 만으로는 안전한 병합을 기대하기 어렵다. 그 이유는 아래 글을 참고하자.

https://kth990303.tistory.com/363

 

[Git] git no conflict를 너무 믿지 말자

부제: CI/CD 툴 Jenkins, github actions의 중요성 부제 2: 작업 브랜치에 아무리 충돌날만한 게 없다고 생각되더라도 항상 최신 base branch를 반영해주자 너무나도 당연한 걸 간과해서 오늘 또 삽질을 했다

kth990303.tistory.com

이번 포스팅에선 Github Actions를 연동하여 추가된 코드를 병합할 때 빌드 및 테스트가 성공하는지 자동으로 체크해주도록 하는 방법에 대해 적어볼 것이다.


1.  .yml 파일 생성

깃허브 탭에서 Actions를 클릭하고 원하는 workflow를 선택한다. 

나는 Java 프로젝트를 Gradle 환경에서 진행중이므로 Java with Gradle 워크플로우를 선택했다.

워크플로우를 선택하면 위와 같은 화면이 뜰 것이다. 

Github Actions 관련 세팅을 위한 yml 파일이 자동으로 기본으로 생성된 것이다.

(아니면 직접 ./github/workflows 디렉토리를 생성 후에 yml 파일을 수동으로 생성해도 된다.)

 

Github Actions 공식문서 안내를 보자.

A workflow is a configurable automated process made up of one or more jobs.
You must create a YAML file to define your workflow configuration.

 

출처: https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions

 

빌드 및 테스트 자동화 프로세스를 위해 workflow를 설정해주는 데에는 YAML 파일을 생성해야 한다.  다행히 Actions에서 편리하게 자동으로 생성이 가능해 크게 어려운 점은 없다. 하지만, 여기서 추가로 본인의 디렉토리 환경에 맞게 변경을 해주어야 한다. 이 부분은 빨간색으로 작성하겠다.


2. yml 파일 살펴보기

자신의 환경에 맞게 변경하기 위해 해주어야 하는 작업들을 살펴보자.

참고로 yml 파일명은 원하는대로 변경해도 상관없다.

 

practice.yml

name: CI-BackEnd

on: # 의도에 따라 재량껏 세팅해줘야 하는 부분
  pull_request:
    branches:
      - main
      - develop
    paths:
      - backend/**
      - .github/**

jobs:
  build:
    runs-on: ubuntu-latest

    defaults:
      run:
        working-directory: ./backend # 프로젝트 환경에 따라 달라질 수 있음

    steps:
    - uses: actions/checkout@v3
    - name: Install Java
      uses: actions/setup-java@v3
      with:
        java-version: '11'
        distribution: 'temurin'
    - name: Grant execute permisson for gradlew # gradlew 실행 권한 부여
      run: chmod +x gradlew
    - name: Build with Gradle
      uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1
      with:
        arguments: build

하나하나 어떤 명령어들인지 살펴보자.

 

name: 어떠한 workflow인지 네이밍을 적어주면 된다. 파일명과 동일할 필요 없다.

위와 같이 Actions 에 명시되는 네이밍이므로 알아볼 수 있게 재량껏 작성해주자.


on: 이벤트를 발생시킬 조건을 설정할 때 쓰인다.

본인이 github actions의 빌드 및 자동화를 언제 적용시킬지 지정하는 부분이므로 적절히 변경해주어야 한다.

on:
  pull_request:
    branches:
      - main
      - develop
    paths:
      - backend/**
      - .github/**

우리는 PR을 보낼 때마다 빌드 및 테스트가 성공적으로 이루어지는지 확인해보고 싶은 것이므로 pull_request 상황에서 발생하도록 설정해주었다. 

branches 옵션으로 해당 브랜치에 PR을 보낼 때 이벤트를 실행하도록 세팅했다.

paths 옵션으로 해당 위치에서 변경이 발생했을 때만 이벤트를 실행하도록 세팅했다. 위의 경우는 frontend 폴더에서 변경이 일어났을 때는 이벤트(자동 빌드 및 테스트)를 진행하지 않게 한 것이다.


jobs: 작업들 목록을 나열할 때 쓰인다. 여기 안에 build 및 테스트 등을 명시해주는 것이다.

이 부분은 defaults: run: working-directory 추가를 제외하곤, workflow를 선택하면 자동으로 생성된 명령어들을 그대로 이용하는 것을 권장한다.

jobs:
  build:
    runs-on: ubuntu-latest

    defaults:
      run:
        working-directory: ./backend # 프로젝트 환경에 따라 달라질 수 있음

    steps:
    - uses: actions/checkout@v3
    - name: Install Java
      uses: actions/setup-java@v3
      with:
        java-version: '11'
        distribution: 'temurin'
    - name: Grant execute permisson for gradlew # gradlew 실행 권한 부여
      run: chmod +x gradlew
    - name: Build with Gradle
      uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1
      with:
        arguments: build

jobs 밑에 build라는 이름의 job을 실행해줄 것이라 적어준다

 

defaults: run: working-directory로 해당 job을 어느 디렉토리에서 실행하는지 적어주었다.

나의 경우 ./github 폴더의 상위 디렉토리에 backend 폴더를 빌드할 것이므로 ./backend 로 지정해주었다. 본인의 환경에 맞게 세팅해주지 않으면 해당 workflow는 의도대로 작동되지 않으므로 주의하자!

 

steps: 로 해당 job이 진행되는 세부작업들을 지정해줄 수 있다. 순서대로 적어주자.

 

uses: 에는 github actions 워크플로우에 사용하고자 하는 액션을 지정해주는 부분이다. actions는 소유자, checkout은 저장소명, v3는 버전을 의미한다. 해당 부분은 웬만해선 자동으로 생성되는 코드를 그대로 활용하자.

 

name 으로 세부작업명을 명시해주고, run 에 어떠한 작업을 하는지 적어주자.

build를 하기 위해선 gradlew 권한을 주어야 하므로 chmod +x gradlew 명령어를 명시해주었다. chmod는 권한 설정 명령어, +x는 실행에 대한 권한 부여를 의미한다. (이 부분은 만약에 github actions가 실행 권한이 없다고 하면 추가로 명시해주자. 요즘은 안 적어도 되는 것 같아서 주황색으로 표시해두었다.)

이후에 ./gradlew clean build로 build폴더를 비워준 후 빌드하게 했다. 빌드를 명시해주면 자동으로 테스트도 진행하게 된다.

 

name으로 명시한 세부작업명들이 오른쪽에 뜨는 것을 확인할 수 있고, jobs 아래에 적은 build가 왼쪽 상단에 뜨는 것을 확인할 수 있다.

 

 

더 자세한 workflow 지정 명령어들은 아래 공식 문서를 참고하자.

https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions

 

Workflow syntax for GitHub Actions - GitHub Docs

About YAML syntax for workflows Workflow files use YAML syntax, and must have either a .yml or .yaml file extension. If you're new to YAML and want to learn more, see "Learn YAML in Y minutes." You must store workflow files in the .github/workflows directo

docs.github.com


이제 base branch에 머지되면 매번 pr을 보낼 때마다 자동으로 빌드 및 테스트가 진행되는 것을 확인할 수 있다!

 

오른쪽에 보이는 Details를 클릭하거나, Actions 탭에서 상세정보를 확인할 수 있다.


참고

도움을 준 사람

우아한테크코스 4기 승팡 (https://github.com/seungpang)

반응형