CI/CD

2023. 10. 10. 15:24Github

728x90
반응형

Continuous Integration (CI):

CI는 개발자들이 코드를 통합하는 과정을 자동화합니다. 이는 주로 git 환경에서의 브랜치 병합 및 테스트 자동화에 초점을 맞춥니다. 개발자는 기능을 구현하고, 해당 기능의 브랜치에 커밋한 뒤, 자동화된 테스트를 거쳐 메인 브랜치에 병합됩니다.

 

  1. 검색 기능을 작업할 feature branch인 feature/search 브랜치를 생성한다.
  2. 검색 기능을 구현 한 후 feature/search 브랜치에 커밋한다.
  3. 문제가 없는지 확인하기 위해 (빌드 후) unit test를 실행한다.
  4. Unit test가 문제 없이 모두 통과하면 (PR 리뷰를 거친 후) develop 브랜치에 merge한다.
  5. Develop 브랜치에 merge 된 후 develop 브랜치에서 다시 unit test를 실행하여 develop 브랜치에 merge후 버그나 이상이 없음을 확인 한다.

 

Continuous Deployment (CD): CD는 CI의 다음 단계로, 자동화된 테스트를 통과한 코드를 자동으로 배포합니다. 스테이징 서버에서의 배포, 다양한 테스트 수행, 그리고 프로덕션 서버로의 배포가 이 과정에 포함됩니다.

 

  1. Staging 서버에서 최신 코드를 배포한다.
  2. Staging 서버에서 다음과 같은 다양한 테스트를 실행하여 production에 배포가 될 수 있을지를 판단한다:
    1. Integration Test
    2. E2E(End-To-End) Test
    3. 그 외 Load Test등 필요한 테스트들

 

Continuous Delivery: Continuous Delivery는 Continuous Deployment와 유사하나, 프로덕션 서버에 배포하기 전에 사람의 승인이 필요합니다. 많은 회사들이 프로덕션 배포 전에 추가적인 수동 테스트를 거치도록 CICD 시스템을 설정합니다.

 

 

CICD Workflow

  1. 새로운 코드를 추가 후 커밋과 push를 한다.
  2. Github에서 새로운 push 받으면 자동으로 Github Action을 실행시킨다.
  3. 만일 develop 브랜치에 push 되었다면 CICD pipeline을 실행시킨다. Develop 브랜치가 아니라면 종료한다.
  4. 먼저 새로운 코드를 checkout 한다.
  5. 그 후 빌드 후 Unit Test를 실행 시킨다.
  6. Unit Test가 전부 통과하면 docker image를 빌드한다.
  7. Docker image가 성공적으로 빌드 되면 dockerhub에 푸쉬한다.

 

 

github Action으로 CICD 구축하기

 

github에 Action에 들어가 자기에 맞는 언어를 선택하면 됩니다

 

이제 화면에서 github action 설정 파일 수정을 할 수 있는 화면이 나옵니다. 오른쪽 사이드바에는 자세한 안내 문서도 나와 있습니다. 다음과 같이 파일을 수정합니다:


name: Node.js CI

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:
    name: build and test
    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [12.x, 14.x, 16.x]
        # See supported Node.js release schedule at https://nodejs.org/en/about/releases/

    steps:
    - uses: actions/checkout@v3
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v3
      with:
        node-version: ${{ matrix.node-version }}
        cache: 'npm'
    - run: npm ci
    - run: npm run build --if-present
    - run: npm test
    
  docker-push:
    name: docker build and push
    needs: build
    runs-on: ubuntu-latest
    steps:
      - name: Set up QEMU
        uses: docker/setup-qemu-action@v1
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1
      - name: Login to DockerHub
        uses: docker/login-action@v1 
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}
      - name: Build and push
        uses: docker/build-push-action@v2
        with:
          push: true
          tags: mydockerhub/github-action-test:latest


 

Dockerhub에 push하기 위해서는 먼저 dockerhub에 로그인이 필요합니다. 그리고 로그인을 하기 위해서는 dockerhub의 아이디와 비밀번호가 필요 하겠죠? 위 부분의 secrets.DOCKERHUB_USERNAME 과 secrets.DOCKERHUB_TOKEN 는 Github의 Secrets 설정 페이지에 미리 추가해놓아야 사용할 수 있습니다.

 

 

 

 

Github Action 설정이 끝났으면 이제 드디어 실제 실행을 시켜볼 차례 입니다. main 브랜치에 push나 PR을 하면 Github Action workflow가 자동으로 실행되는 것을 Action 탭에서 볼 수 있습니다.

 

728x90
반응형

'Github' 카테고리의 다른 글

Git과 GitHub 기본 안내  (1) 2023.10.15
merge & rebase  (0) 2023.10.10