GIT

[GIT] continuous integration - Github Action

점냥 2021. 2. 21. 16:47
반응형

 

코드 빌드를 통해 올바른지 검증 중

안녕하세요 점냥입니다:)

 

CI/CD 파이프라인이라는 개념에 대해 알고 있으신가요?

 

소프트웨어의 규모가 커지게 되면 여러 단위로 팀을 나누어 협업을 진행해야 합니다.

이 과정 속에서 여러 명이 작성한 코드들을 리뷰하거나 병합되는 과정이 매우 빈번하게 발생할 수 있어요.

 

이런 상황 속에서 만약 사람의 실수로 코드 리뷰에서 발견하지 못한 에러가 병합이 된다면 그 파장은 어마어마하겠죠?

사소한 에러라도 큰 프로젝트 규모에서는 치명적인 실수이기 때문에 최대한 사람이 아닌 기계가 검증하는 작업으로 대체하는 것 같아요.

 

CI/CD 파이프라인도 그런 개념에서 탄생했습니다. 빌드/테스트를 통해 코드가 올바른지 검증하는 CI와 안전한 배포를 도와주는 CD

이번 포스팅에서는 Github Action으로 CI를 구성하는 방법에 대해 조사해보려고 합니다.

 

 

Continuous Integration

지속적 통합, CI는 빈번한 커밋의 병합이 이루어지고 올바른 코드인지 빌드하는 과정을 자동화한 개발 방법론이라고 합니다.

지속적으로 퀄리티 컨트롤을 적용하는 프로세스를 실행하는 것이다라고 설명한다고도 합니다.

 

CI를 지원해주는 곳은 여러 곳이 있지만 저는 가장 간단하게 Github Action으로 설정하려고 합니다.

 

 

 

 

Github Action

Github Action은 Github repository의 Workflow를 자동화, 커스텀 화하는 기능을 제공해줍니다.

Workflow는 push/ PR 등으로 인해 발생하는 Event 등으로 자동으로 실행되는 프로세스라고 합니다. Workflow는 CI 이외에도 테스트 코드 실행, 릴리즈 배포(CD) 등으로 활용할 수 있다고 해요.

 

요금

공개 저장소는 무료지만 제한이 있다고 하고, 비공개 저장소는 해당 계정에 부여된 무료 사용량 이후에 과금된다고 해요.

Github 무료 계정의 전체 비공개 저장소를 기준으로 한 달에 500MB 스토리지와 실행 시간 2,000분(minute)까지 제공해 준다고 합니다.

 

 

적용 방법

 

적용하고자 하는 Github 저장소에 들어갑니다. 그러면 프로젝트 코드들이 작성되어 있는 Code 탭, Issues 탭 등등 중에서

Actions 탭을 발견할 수 있어요. (이번 포스팅으로 인해 저장소에서 제공해주는 다양한 기능 등을 알차게 경험해본 듯해서 기분이 좋네요 ㅎ)

 

 

 

저희는 CI를 적용할 예정이므로 Actions 탭을 누르고 Continuous integration workflows를 찾아주세요. Github에서 다양한 언어, 플랫폼에 맞게 CI를 쉽게 구성할 수 있도록 쉽게 템플릿을 준비해주었습니다.

 

적용하려는 프로젝트에 맞게 고른 다음 Set up this workflow버튼을 눌러주세요.

 

 

짜잔 그러면 아주 간단하게 Android CI 파일이 생성되었습니다. 생성한 파일을 Start commit 버튼을 눌러 적용해주세요!

 

 

 

 

 

 

 

 

Github Action - Workflow

name: Android CI

on:
  push:
    branches: [ main, develop ]
  pull_request:
    branches: [ main, develop ]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: set up JDK 1.8
      uses: actions/setup-java@v1
      with:
        java-version: 1.8
    - name: Grant execute permission for gradlew
      run: chmod +x gradlew
    - name: Build with Gradle
      run: ./gradlew build

Workflow는 특정 이벤트에 자동으로 실행되는 하나의 흐름이며 하나의 저장소에 20개까지 존재할 수 있다고 합니다.

 

 

Event   

on:
  push:
    branches: [ main, develop ]
  pull_request:
    branches: [ main, develop ]
  • Workflow가 실행되는 시점을 정의
  • on 명령어로 정의하며 위 코드에서는 main, develop 브랜치에 push, PR이 올 때로 정의되어 있다.
  • 브랜치가 아닌 단일 이벤트로 정의할 수도 있다고 해요. 
  on: push
  # 또는
  on: [pull_request, issues]

 

 

Jobs

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: set up JDK 1.8
      uses: actions/setup-java@v1
      with:
        java-version: 1.8
    - name: Grant execute permission for gradlew
      run: chmod +x gradlew
    - name: Build with Gradle
      run: ./gradlew build

 

  • Workflow에는 여러 가지 job이 존재할 수 있습니다. 만일 job이 여러가지 존재할 경우 기본적으로 병렬로 수행
  • 위 코드에서는 build라는 이름의 job이 생생
  • runs-on으로 실행된 운영체제를 지정

 

 

참고

매시업 Android 블로그

- Github Action 사용법

반응형