밤 늦게까지 여는 카페

github action을 활용한 CI - CD는 어디 두고 왔어요? 본문

DevOps

github action을 활용한 CI - CD는 어디 두고 왔어요?

Jㅐ둥이 2022. 10. 11. 09:49
반응형

CI/CD 툴이 뭘까? - 주니어 개발자의 오해의 마지막에서 말했던 것처럼 이번에는 github action 대해서 공부해보려고 해요!

 

github action이란

github action은 github에서 제공하는 CI/CD 플랫폼입니다.

 

압도적 1위 github에서 제공하는 CI/CD 플랫폼! 이건 귀해요...

여기서 플랫폼이라고 하는 이유는 단순히 github에 저장되는 코드만을 대상으로 기능을 제공하는 것이 아니라

MarketPlace에서 사용자들끼리 플러그인을 공유하기도 하고, 다른 플랫폼과의 연동 기능도 제공하기 때문입니다.

조금 더 자세한 설명을 원하신다면 공식 문서를 참고해보세요. https://docs.github.com/en/actions

 

CI가 뭔지 다시 설명해줄 수 있을까요?

CI는 Continuous Integration의 약자로, 모든 소스코드가 항상 유효하게 동작한다는 것을 보장하자는 것입니다.

 

그러면 CI를 위해서 CI툴들은 어떤 기능을 제공할까요?

코드가 수정될 때마다, 빌드, 테스트, 인터페이스 유효성 검사 등을 자동화 시켜주는 것입니다.

빌드, 테스트, 슬랙 메시지까지 다 해준다구욧!

github action으로 할 수 있는 것을 살펴봤는데요!

이제 github action의 구체적인 사용법에 대해서 공부해볼까요?

 

github action 설정 파일: .github/workflows/

제가 예전에 작업했던 프로젝트의 workflow 파일을 예시로 들어봤습니다.

workflow 파일은 1) 어떤 이벤트를 모니터링 할지, 2) 원하는 이벤트가 발생했을 때 무슨 작업을 수행할지 로 나눌 수 있습니다.

 

이벤트 모니터링

모니터링 할 수 있는 대표적인 이벤트로는 push, pull_request가 있습니다.

만약 master, develop 브랜치들을 모니터링 하고 싶다면 다음과 같이 작성하면 됩니다.

on:
  push:
    branches:
      - master
      - develop

 

작업 목록

작업 목록 부분에는 하고 싶은 모든 작업을 Shell 스크립트로 작성하면 됩니다. 혹은 플러그인을 활용할 수도 있구요.

jobs:

  build:
    name: Build
    runs-on: ubuntu-latest
    steps:

    - name: Set up Go 1.x
      uses: actions/setup-go@v2
      with:
        go-version: ^1.13

    - name: Check out code into the Go module directory
      uses: actions/checkout@v2

    - name: Get dependencies
      run: |
        go get -v -t -d ./...
    - name: Test
      run: go test -v ./...

 

이제 두 가지 부분을 합쳐서 하나의 workflow 파일을 만들어볼까요?

name: CI

on:
  push:
    branches:
    - master
    - 'feat/**'
    - 'feat**'
  pull_request:
    branches:
    - master
    - 'feat/**'
    - feat**

jobs:

  build:
    name: Build
    runs-on: ubuntu-latest
    steps:

    - name: Set up Go 1.x
      uses: actions/setup-go@v2
      with:
        go-version: ^1.13

    - name: Check out code into the Go module directory
      uses: actions/checkout@v2

    - name: Get dependencies
      run: |
        go get -v -t -d ./...
    - name: Test
      run: go test -v ./...

참고: https://github.com/goodahn/alarm-for-programmer/blob/main/.github/workflows/ci.yml

 

이렇게 workflow 파일을 추가하면 pull request가 열리거나 push 될 때마다 github에서 build, test가 자동으로 실행됩니다.

자동으로 빌드, 테스트 되는 시스템을 이렇게 간단하게!

 

여러분도 진행하고 있는 프로젝트에 CI/CD 도입을 고려 중이라면 github action으로 시도해보는 것은 어떠신가요?

 

P.S.

CD는 진행하고 있는 react 스터디를 통해서 다뤄보도록 하겠습니다 ㅎㅎ

반응형