CI/CD로 자동화하기

Ahyeon, Jung·2023년 10월 10일
0

CI

Continuous Intergration

개발자가 코드를 변경할 때마다 자동으로 코드를 빌드하고 테스트하는 프로세스

  • 코드 품질 향상: 변경 사항이 주기적으로 통합되므로 코드 품질과 안정성이 유지됨
  • 버그 및 오류 감소: 자동 테스트를 통해 버그 및 오류를 빨리 감지하여 수정가능
  • 팀 협업 개선: 모든 팀원이 주기적으로 코드 변경 사항을 확인하고 통합하므로 협업이 향상됨

CD

Continuous Delivery/ Continuous Deployment
소프트웨어를 자동으로 빌드하고 테스트한 후, 변경 사항을 프로덕션 환경에 자동으로 배포하는 프로세스

  • 빠른 배포: 변경 사항을 자동으로 배포하므로 릴리스 주기가 단축됨
  • 신뢰성 향상: 자동 배포를 통해 인간 에러 가능성을 줄이고 신뢰성을 높일 수 있음
  • 사용자 피드백 빠르게 반영: 새로운 기능과 버그 수정을 빠르게 사용자에게 제공할 수 있으므로 사용자 피드백을 즉각 반영 가능

GitHub Action

소프트웨어 개발 프로세스를 자동화하고 지속적 통합(CI) 및 지속적 전달(CD)를 구현하는 데 사용되는 강력한 도구
CI/CD는 소프트웨어 개발 및 배포를 더 효율적이고 안정적으로 만드는데 도움
github Actions은 CI/CD를 간편하게 설정하고 관리를 도와줌

  1. '.github/workflows' 디렉토리에 워크플로우 파일을 만들어 CI/CD 작업을 정의. YAML 형식으로 작성되며, 특정 이벤트가 발생할 때 어떤 작업을 실행할지 정의
  2. 워크플로우 파일에서 실행할 작업을 정의. 코드 빌드, 테스트, 패키징, 배포 등을 포함가능
  3. 워크플로우가 언제 실행될지를 설정. 이벤트 트리거 또는 일정 스케줄에 따라 실행가능
  4. 환경 변수 및 시크릿 설정: 중요한 환경 변수 또는 인증 정보를 안전하게 관리하기 위해 GitHub Actions에서 제공하는 시크릿 저장소를 활용
  5. 설정한 워크플로우가 자동으로 실행되며 코드 변경 사항을 빌드, 테스트하고 필요한 경우 배포

CI 워크플로우 설정

// .github/workflows/ci.yml
name: CI

on:
  push:
    branches:
      - main  // trigger: push to main branch

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout code
      uses: actions/checkout@v2

    - name: Setup Node.js
      uses: actions/setup-node@v2
      with:
        node-version: '14'

    - name: Install dependencies
      run: npm install  // 푸시가 발생하면 npm 설치

    - name: Run tests
      run: npm test  // 설치 후 npm test 실행

CI 워크플로우 설정

// .github/workflows/cd.yml
name: CD

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout code
      uses: actions/checkout@v2

    - name: Deploy to AWS Elastic Beanstalk
      uses: aws-actions/configure-aws-credentials@v1
      with:
        aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
        aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        aws-region: us-east-1

    - name: Deploy application
      run: |
        eb init -p nodejs my-app
        eb deploy my-app
  • main 브랜치에 코드가 push되면, CI 워크플로우가 자동으로 실행되어 테스트를 수행하고, CD 워크플로우가 실행되어 AWS Elasticc Beanstalk에 애플리케이션을 배포
  • 코드 변경 사항을 안전하게 배포하고 테스트 가능
  • 개발 및 배포 프로세스 자동화

gitlab CI

// .gitlab-ci.yml
stages:
  - sync_dev_with_front

variables:
  FRONT_BRANCH: front
  DEV_BRANCH: dev

sync_dev_with_front:
  stage: sync_dev_with_front
  only:
    - $DEV_BRANCH
  script:
    - git config user.name "ahyeon"
    - git config user.email "ahoney@gmail.com"
    - git checkout $FRONT_BRANCH
    - git merge --no-ff $CI_COMMIT_SHA
    - git push origin $FRONT_BRANCH
profile
https://a-honey.tistory.com/

0개의 댓글