IaC/CI CD Tool

1. Github Action이란?

Somaz 2023. 5. 19. 21:43
728x90
반응형

Overview

오늘은 Github Action에 대해서 공부해보려고 한다.


Github Action이란?

GitHub Actions는 빌드, 테스트 및 배포 파이프라인을 자동화할 수 있는 지속적 통합 및 지속적 배포(CI/CD) 플랫폼이다. 

리포지토리에 대한 모든 풀 요청을 빌드 및 테스트하는 워크플로를 생성하거나 Merge된 풀 요청을 프로덕션에 배포할 수 있다.


Github Action 구성요소

https://speakerdeck.com/nileshgule/devops-with-github-actions?slide=8

Workflows

워크플로는 GitHub Actions의 기본 구성 단위이다. 일반적으로 ".github/workflows/<workflow_name>.yml"이라는 YAML 파일에 정의된다. 워크플로우는 하나 이상의 작업을 포함할 수 있으며 리포지토리에서 푸시 또는 풀 요청과 같은 이벤트에 의해 트리거된다.

on:
  push:
    branches:
      - main
      - develop
  pull_request:

 

Events

이벤트는 워크플로를 시작하는 트리거이다. 일반적인 이벤트에는 push, pull_request 및 일정이 포함된다. 특정 요구 사항에 따라 워크플로를 트리거하는 사용자 지정 이벤트를 만들 수도 있다.

 

Jobs

작업은 워크플로 내에서 실행되는 개별 작업이다. 러너라는 가상 머신에서 실행되며 하나 이상의 단계를 포함할 수 있다. 작업은 종속성에 따라 병렬 또는 순차적으로 실행될 수 있다.

jobs:
  echo-hello-world:
    runs-on: ubuntu-latest
    name: Echo Hello World Job
    steps:
      - uses: actions/checkout@v2

      - run: echo Hello World!

 

 

Steps

단계는 작업 내 작업의 가장 작은 단위이다. 각 단계는 셸 명령을 실행하거나 작업을 실행할 수 있다. 단계는 워크플로 파일에 지정된 순서대로 실행되며 각 단계는 동일한 실행기 인스턴스 내에서 실행된다.

 

 

 

Actions

작업은 작업 흐름에서 공유 및 결합할 수 있는 재사용 가능한 코드 단위이다. GitHub 커뮤니티에서 개발 및 게시하거나 자체적으로 사용할 수 있도록 만들 수 있다. 작업은 일반적으로 별도의 리포지토리에 저장되며 해당 리포지토리 이름으로 워크플로 파일에서 참조된다.

 

 

Runners

Runners는 작업이 실행되는 가상 머신 또는 자체 호스팅 환경이다. GitHub는 다양한 운영 체제(Linux, macOS 및 Windows) 및 하드웨어 구성을 호스팅 러너에 제공하거나 보다 전문적인 요구 사항을 위해 자체 호스팅 러너를 설정할 수 있다.

 

 

 

Environment Variables and Secrets

환경 변수는 워크플로 내의 작업 및 스크립트에서 액세스할 수 있는 데이터를 저장하는 데 사용된다. 비밀은 액세스 토큰 또는 API 키와 같은 민감한 데이터를 저장하는 데 사용되는 암호화된 환경 변수이다. 로그에 노출되지 않으며 동일한 리포지토리에서 실행되는 작업을 통해서만 액세스할 수 있다.

 

 

 

Artifacts and Caching

아티팩트는 빌드 출력 또는 테스트 결과와 같이 나중에 저장하고 사용할 수 있는 워크플로에서 생성된 파일이다. 캐싱은 워크플로 실행 간에 데이터를 저장하고 검색하는 데 사용되므로 이전에 다운로드한 종속성 또는 빌드 출력을 재사용하여 프로세스 속도를 높일 수 있다.

jobs:
  # archive generated json to artifact
  artifact:
    name: Archive data json files
    runs-on: ubuntu-20.04
    steps:
      - name: Checkout repository
        uses: actions/checkout@v3
        with:
          ref: ${{ github.ref }}

      - name: Set ENVIRONMENT
        run: |
          if [ ${{ github.ref_name }} == 'production' ]; then
            echo "ENVIRONMENT=somaz" >> $GITHUB_ENV
          else
            echo "ENVIRONMENT=${{ github.ref_name }}" >> $GITHUB_ENV
          fi

      - name: Archive data json files
        uses: actions/upload-artifact@v3
        with:
          name: ${{ env.ENVIRONMENT }}_somaz_staticdata_server_v${{ github.run_number }}
          path: |
            somaz/somazJson
          retention-days: 30

 

jobs:
  generate:
    name: Download somaz staticdata files and Generate ts files
    runs-on: ubuntu-20.04
    steps:

      # node modules 캐싱
      - name: Cache node modules
        id: node-cache
        uses: actions/cache@v2
        env:
          cache-name: cache-node-modules
        with:
          # npm cache files are stored in `~/.npm` on Linux/macOS
          path: |
            **/node_modules
          key: ${{ runner.os }}-build-${{ hashFiles('**/package-lock.json') }}
          restore-keys: |
            ${{ runner.os }}-build-

 


Reference

카카오 웹툰 Github Action 자료

 

카카오 엔터프라이즈 Github Action 자료

 

Github Action 공식 docs

 

 

 

728x90
반응형

'IaC > CI CD Tool' 카테고리의 다른 글

3. Github Action (With Automate Pull Request)  (0) 2023.05.23
2. Github Action (With Syntax)  (0) 2023.05.22
ArgoCD란?  (0) 2023.05.17
3. GitLab이란? / GitLab CI/CD  (0) 2023.04.24
2. GitLab이란? / GitLab Runner 개념 및 설치  (0) 2023.04.23