Infra/CI&CD

Github Action 기본 사용법

now0204 2024. 5. 16. 22:33

 

 

CI/CD란?

소프트웨어 개발 과정에서 효율성과 신속성을 극대화하는 자동화된 프레임워크 
개발부터 운영까지 소프트웨어 개발 라이프사이클의 모든 단계를 아우른다.
크게 지속적 통합, 지속적 전달, 지속적 배포로 구분 된다.

 

CI/CD(CI CD, 지속적 통합/지속적 배포): 개념, 툴, 구축, 차이 (redhat.com)

 

지속적 통합 (CI)

  • 개발자들이 작업한 코드를 주기적으로 공유레퍼지토리에 병합, 코드 통합을 자동화하는 과정 
  • 모든 변경사항은 자동 빌드 및 테스트를 거쳐 메인 브랜치에 통합된다.
  • 코드 충돌을 최소화하며, 소프트웨어 품질을 유지하고, 배포 준비 상태를 지속적으로 유지할 수 있다.
  • BUILD -> TEST -> MERGE 과정을 아우름 특히! TEST가 매우 매우 중요하다. 

지속적 전달 (CD - Continuous Delivery)

  • 코드 변경사항이 자동으로 빌드 및 테스트를 거쳐 실제 운영 환경에 배포될 준비가 된다.
  • 배포 과정을 완전히 자동화하지 않고, 실제 배포는 수동 트리거 옵션으로 둔다.
  • 배포할 준비가 되어 있으며, 비즈니스 요구에 따라 배포 시점을 선택할 수 있다.

지속적 배포 (CD - Continuous Deployment)

  • 코드 변경사항이 자동 테스트를 통과하면, 즉시 프로덕션 환경에 배포된다.
  • 지속적 배포를 통해 소프트웨어의 릴리스 과정이 자동화되어, 인간의 개입 없이도 신속하게 배포된다.
  • 이를 통해 품질의 지속적인 개선, 개발 주기의 단축 최종적으로 사용자 만족도 증대로 이어진다.

* 모든 과정에서 모니터링도 꽤나 중요하다. CI test부터 실패 한 것을 어떻게 로그로 남기거나 알림을 받을 것인지 생각하는 것 부터 시작

* 따라서 스켈레톤 코드부터 CI/CD를 붙여서 경험해보자! 


Github action 

  • Github에서 제공하는 CI/CD 파이프라인 도구 
  • 개발자는 PC나 별도의 빌드용 서버가 없이 파이프라인을 실행할 수 있다.

동작원리 

  • Github Repository의 이벤트 (Push,PR)에 반응하여 자동화된 워크플로우를 실행한다.
  • 워크플로우는 .github/workflows 디렉토리 내 YAML파일로 정의되며, 이 파일 내에서 작업(jobs), 단계(steps), 액션(actions)을 설정할 수 있다. 

Understanding GitHub Actions - GitHub Docs

 

Understanding GitHub Actions - GitHub Docs

GitHub Actions is a continuous integration and continuous delivery (CI/CD) platform that allows you to automate your build, test, and deployment pipeline. You can create workflows that build and test every pull request to your repository, or deploy merged

docs.github.com

Understanding GitHub Actions - GitHub Docs

 

  • Workflow는 Github Actions에서 실행되는 자동화 프로세스를 정의하는 단위, 각 작업은 독립적으로 실행되며, 여러개의 단계로 구성될 수 있다.
  • step은 각 작업 내에서 수행되는 단일 명령어 또는 액션의 연속, 작업 내에서 단계는 순차적으로 실행되며, 성공적으로 완료되어야 작업이 성공적으로 완료
  • Action은 github Marketplace에서 가져오거나 직접 작성한 재사용 가능한 코드 조각이다. 다양한 용도로 사용될 수 있으며, CI/CD,테스트,배포 등과 같은 다양한 작업을 자동화하는 데 사용된다.
  • secretes는 Github Actions에서 리포지토리의 중요한 데이터를 안전하게 저장하고 관리하는 데 사용한다. API 토큰, 암호, SSH키 등과 같이 민감한 정보를 포함할 수 있다. 워크플로우 사용할 때만 복호화되어 사용된다. 

 


간단한 스크립트 작성해보기

# 이것은 Actions를 시작하는 데 도움이 되는 기본 워크플로우입니다
name: CI
# 워크플로우가 실행될 시점을 제어합니다
 on:
 	# "main" 브랜치에 대한 push 또는 pull request 이벤트가 발생했을 때 워크플로우를 트리거합니다
   push:
     branches: [ "main" ]
   pull_request:
     branches: [ "main" ]
   # Actions 탭에서 이 워크플로우를 수동으로 실행할 수 있습니다
   workflow_dispatch:
  # 워크플로우 실행은 하나 이상의 작업으로 구성되며, 이러한 작업은 순차적으로 또는 병렬로 실행될 수 있습니다

 jobs:
   # 이 워크플로우는 "build"라고 불리는 단일 작업을 포함합니다
   build:
      # 작업이 실행될 러너의 유형
     runs-on: ubuntu-latest
      # 단계는 작업의 일부로 실행될 일련의 작업을 나타냅니다
     steps:
       # $GITHUB_WORKSPACE 아래에서 리포지토리를 체크아웃하여 작업이 이에 접근할 수 있도록 합니다
      - uses: actions/checkout@v3
       # https://github.com/actions/checkout 을 사용함.
 
       # 러너의 셸을 사용하여 단일 명령을 실행합니다
      - name: Run a one-line script
        run: echo Hello, world!
 # 러너의 셸을 사용하여 일련의 명령을 실행합니다
      - name: Run a multi-line script
        run: |
           echo Add other actions to build,
           echo test, and deploy your project.
  • 한 개의 워크플로우-> 수행할 job 여러개 
  • 수행할 job당 여려개의 step으로 이루어져 있다. 
  • 각 job과 step들에는 이름이 붙어 있는데, 위와 같은 스크립트에선 주석이 굉장히 중요하다! 잘 적어두자
name: learn-github-actions
run-name: ${{ github.actor }} is learning GitHub Actions
on: [push]
jobs:
  check-bats-version:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '20'
      - run: npm install -g bats
      - run: bats -v

 

  • 공식문서의 예제이다. 
  • run-name은 actions탭에 들어갔을 때 바로 보이는 이름이다 -> workflow 명과 비슷한 느낌 (mimi5963 부분)
    • ${{github.actor}}은 github context이다. -> 워크플로우 트리거를 작동시킨 깃허브 유저명 표시 
  • ON은 trriger를 지정하는 부분이다. 현재는 push로 되어 있다. 다양한 트리거, 브랜치를 지정할 수 있다.
  • jobs에 job들을 지정할 수 있다. 현재는 check-bats-version이라는 이름의 job이 지정되어 있다. 
    • runs-on -> job 수행 환경의미 
    • steps -> job을 수행하면서 실행할 명령어 모음 
    • uses -> actions들 사용 
      • with은 step을 수행하는데 조건사항
    • run -> 특정 코드가 runs-on환경에서 수행하도록 명령어를 적는 부분이다.

 

 

참고자료:

Understanding GitHub Actions - GitHub Docs

 

Understanding GitHub Actions - GitHub Docs

GitHub Actions is a continuous integration and continuous delivery (CI/CD) platform that allows you to automate your build, test, and deployment pipeline. You can create workflows that build and test every pull request to your repository, or deploy merged

docs.github.com

GitHub Actions 가이드 - GitHub Docs

 

GitHub Actions 가이드 - GitHub Docs

GitHub Actions에 대한 이러한 가이드에는 워크플로를 구성하는 데 도움이 되는 특정 사용 사례 및 예제가 포함되어 있습니다.

docs.github.com

 

CI/CD(CI CD, 지속적 통합/지속적 배포): 개념, 툴, 구축, 차이 (redhat.com)

 

CI/CD(CI CD, 지속적 통합/지속적 배포): 개념, 툴, 구축, 차이

CI/CD는 애플리케이션의 통합 및 테스트 단계부터 제공 및 배포까지 애플리케이션 라이프사이클 전체에서 지속적인 자동화와 지속적인 모니터링을 제공하는 것을 뜻합니다.

www.redhat.com

 

원티드 프리온보딩 백엔드 챌린지 4월