CI/CD 구축하기(1) - Github Actions

YulHee Kim·2021년 9월 18일
3

DevOps

목록 보기
1/2
post-thumbnail

💡 CI/CD란?

CI/CD는 애플리케이션 개발 단계를 자동화하여 애플리케이션을 보다 짧은 주기로 고객에게 제공하는 방법입니다.
기본 개념은 지속적인 통합, 지속적인 서비스 제공, 지속적인 배포입니다.

CI/CD는 애플리케이션의 통합 및 테스트 단계에서부터 제공 및 배포에 이르는 애플리케이션의 라이프사이클 전체에 걸쳐 지속적인 자동화와 지속적인 모니터링을 제공합니다. 이러한 구축 사례를 일반적으로 "CI/CD 파이프라인"이라 부르며 개발 및 운영팀의 애자일 방식 협력을 통해 지원됩니다.

CI와 CD

CI는 개발자를 위한 자동화 프로세스인 지속적인 통합(Continuous Integration)을 의미합니다.
CI를 성공적으로 구현할 경우 애플리케이션에 대한 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트되어 공유 리포지토리에 통합되므로 여러 명의 개발자가 동시에 애플리케이션 개발과 관련된 코드 작업을 할 경우 서로 충돌할 수 있는 문제를 해결할 수 있습니다.

CD는 지속적인 서비스 제공(Continuous Delivery) 및 지속적인 배포(Continuous Deployment)를 의미하며 두 가지 의미 모두 파이프라인의 추가 단계에 대한 자동화를 뜻하지만 때로는 얼마나 많은 자동화가 이루어지고 있는지를 설명하기 위해 별도로 사용되기도 합니다.

💡Github Action이란?

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

Workflow는 Github 저장소에서 발생하는 build, test, package, release, deploy 등 다양한 이벤트를 기반으로 직접 원하는 Workflow를 만들 수 있습니다.

자동화된 작업이 필요한 리스트

1. CI/CD
Github Actions을 활용하는 가장 대표적인 예시 중 하나입니다.
로컬 레포지토리에서 원격 레포지토리로 푸쉬하고 난 후, Github Actions에서는 이벤트 발생에 따라 자동으로 빌드 및 배포하는 스크립트를 실행시켜주는 것입니다.
애플리케이션의 규모가 클수록 빌드, 배포 시간이 오래걸리는데 이를 자동화시켜놓으면 해당 시간을 낭비하지 않을 수 있겠죠.

2. Testing
팀 프로젝트를 진행하다가 Pull Request를 보내면 자동으로 테스트를 진행하는 것또한 Github Actions으로 구현할 수 있습니다.
따라서 테스트 성공 여부에 따라서 자동으로 PR을 Open 및 Close 할 수 있습니다.

3. Cron Job
Github Actions를 통해 특정 시간대에 스크립트를 반복 실행하도록 구현할 수 있습니다.
매일 특정 시간이 되면 크롤링 작업을 진행한다는 등의 예시가 존재합니다.

Github Actions의 구성요소

1. Workflow
Workflow란 레포지토리에 추가할 수 있는 일련의 자동화된 커맨드 집합입니다.
하나 이상의 Job으로 구성되어 있으며, Push나 PR과 같은 이벤트에 의해 실행될 수도 있고 특정 시간대에 실행될 수도 있습니다.

빌드, 테스트, 배포 등 각각의 역할에 맞는 Workflow를 추가할 수 있고, .github/workflows 디렉토리에 YAML 형태로 저장합니다.

2. Event
Event란 Workflow를 실행시키는 Push, Pull Request, Commit 등의 특정 행동을 의미합니다.

3. Job
Job이란 동일한 Runner에서 실행되는 여러 Step의 집합을 의미합니다.
Job은 여러 Step으로 구성되고, 가상 환경의 인스턴스에서 실행됩니다. 다른 Job에 의존 관계를 가질 수 있고, 독립적으로 병렬 실행도 가능합니다.

4. Step
Step이란 커맨드를 실행할 수 있는 각각의 Task를 의미하는데, Shell 커맨드가 될 수도 있고, 하나의 Action이 될 수도 있습니다.

하나의 Job 내에서 각각의 Step은 다양한 Task로 인해 생성된 데이터를 공유할 수 있습니다.

5. Action
Action이란 Job을 만들기 위해 Step을 결합한 독립적인 커맨드로, 재사용이 가능한 Workflow의 가장 작은 단위의 블럭입니다.

직접 만든 Action을 사용하거나 Github Community에 의해 생성된 Action을 불러와 사용할 수 있습니다.

6. Runner
Runner란 Github Actions Workflow 내에 있는 Job을 실행시키기 위한 애플리케이션입니다.

Runner Application은 Github에서 호스팅하는 가상 환경 또는 직접 호스팅하는 가상 환경에서 실행 가능하며, Github에서 호스팅하는 가상 인스턴스의 경우에는 메모리 및 용량 제한이 존재합니다.

CI Workflow 적용

Actions 클릭

Gradle을 이용한 workflow 생성

다음은 Master 브랜치에 Push 또는 Pull Request가 올 경우 실행되는 CI란 이름을 갖는 Workflow yml 파일 예시입니다.

[출처: 구훈님 블로그]

name: Java CI with Gradle

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

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Set up JDK 11
      uses: actions/setup-java@v2
      with:
        java-version: '11'
        distribution: 'adopt'
        
    - name: Grant execute permission for gradlew
      run: chmod +x gradlew
      
    - name: Build with Gradle
      run: ./gradlew build

[참고한 블로그]

이어서 도커도 정리해보겠습니당.

profile
백엔드 개발자

0개의 댓글