Github Actions

hong·2023년 9월 25일

🔎 Github Actions란?

  • Github에서 호스팅하는 코드 저장소와 협업하고, 소프트웨어 개발 및 배포 프로세스를 자동화하기 위한 통합 지속적인 개발 및 배포 (CI/CD) 플랫폼
  • 코드 변경 사항을 모니터링하고 자동으로 빌드, 테스트, 배포, 릴리스 작업 등을 수행할 수 있음
    → Repository에서 어떤 이벤트(event)가 발생했을 때 자동으로 특정 작업이 일어나게 하거나 주기적으로 어떤 작업들을 반복해서 실행시킴
    ex1) repository에 pull request를 생성하면, github actions를 통해 해당 코드 변경 부분에 문제가 없는지 각종 검사 진행
    ex2) 새로운 코드가 기본 브랜치(main 또는 develop)에 유입(push)되면, github actions를 통해 소프트웨어를 빌드하고 상용 서버에 배포할 수 있음

🔎 Github Actions 핵심 개념

✔︎ 이벤트(Event)

  • 워크플로우 실행을 트리거하는동작
  • ex) push, issue 생성

✔︎ 워크플로우(Workflows)

  • github actions에서 가장 상위 개념
  • github actions에서 작업을 정의하고 실행하는 방법
  • 워크플로우는 yaml 파일로 정의되며, repository의 이벤트 (push, issue 생성)에 의해 트리거됨
on:
  push:
    branches: [main]  # main 브랜치로의 푸시 이벤트를 구독합니다.
  pull_request:
    branches: [main]  # main 브랜치로의 풀 리퀘스트 이벤트를 구독합니다.

✔︎ 작업(Jobs)

  • 워크플로우 내에서 실행되는 단위. 독립된 가상 머신 또는 컨테이너에서 돌아가는 하나의 처리 단위를 의미
  • 하나의 워크플로우는 여러 개의 작업으로 구성되며 적어도 하나의 작업이 존재해야함
  • 모든 작업은 기본적으로 동시에 실행되며 필요시, needs: {job 명} 키워드로 작업 간에 의존관계를 설정하여 여러 작업이 순차적으로 실행될 수 있음
  • runs-on 속성을 사용해서 리눅스나 윈도우즈와 같은 실행 환경을 지정
jobs:
  build: # job1
    runs-on: ubuntu-latest  
	steps: 
		...(생략)...

  test: # job2
    runs-on: ubuntu-latest  
	steps: 
		...(생략)...
    

✔︎ 단계(Steps)

  • 작업 내에서 실행되는 작업 단계 또는 개별 명령. 각 작업(job)이 하나 이상의 단계(step)로 모델링
  • uses : 실행할 액션을 지정. github에서 제공하는 액션 또는 커스텀 액션
    run : 실행할 명령 또는 스크립트를 지정.
 steps:
    - name: Checkout Repository  # 저장소 체크아웃 단계
      uses: actions/checkout@v2  # github의 마지막 커밋으로 checkout 한다.

    - name: Set up Node.js  # Node.js 환경 설정 단계 (필요에 따라 변경 가능)
      uses: actions/setup-node@v2  # node.js를 설치한다.
      with:
        node-version: '14'  # Node.js 버전 선택

    - name: Install Dependencies  # 프로젝트 종속성 설치 단계
      run: npm install  # 또는 yarn install

    - name: Build  # 프로젝트 빌드 단계 (필요에 따라 변경 가능)
      run: npm run build  # 또는 yarn build

    - name: Run Tests  # 테스트 실행 단계 (필요에 따라 변경 가능)
      run: npm test  # 또는 yarn test

    - name: Deploy to Production  # 프로덕션 배포 단계 (필요에 따라 변경 가능)
      if: success()  # 성공한 경우에만 실행
      run: |
        # 배포 스크립트 작성
        # 예: 서버에 코드 복사, 컨테이너 이미지 빌드 및 업데이트 등

전체 예제 코드

name: CI/CD Example Workflow

on:
  push:
    branches:
      - main  # 원하는 브랜치에 코드가 푸시될 때 트리거

jobs:
  build:
    runs-on: ubuntu-latest  # 실행 환경 지정 (Ubuntu 최신 버전)

    steps:
    - name: Checkout Repository  # 저장소 체크아웃 단계
      uses: actions/checkout@v2

    - name: Set up Node.js  # Node.js 환경 설정 단계 (필요에 따라 변경 가능)
      uses: actions/setup-node@v2
      with:
        node-version: '14'  # Node.js 버전 선택

    - name: Install Dependencies  # 프로젝트 종속성 설치 단계
      run: npm install  # 또는 yarn install

    - name: Build  # 프로젝트 빌드 단계 (필요에 따라 변경 가능)
      run: npm run build  # 또는 yarn build

    - name: Run Tests  # 테스트 실행 단계 (필요에 따라 변경 가능)
      run: npm test  # 또는 yarn test

    - name: Deploy to Production  # 프로덕션 배포 단계 (필요에 따라 변경 가능)
      if: success()  # 성공한 경우에만 실행
      run: |
        # 배포 스크립트 작성
        # 예: 서버에 코드 복사, 컨테이너 이미지 빌드 및 업데이트 등




References:

0개의 댓글