CI/CD에 대해서 잠깐 알아보기

예빈·2022년 9월 13일
0

ETC

목록 보기
7/15
post-thumbnail

CI/CD란?

CI/CD는 애플리케이션 개발 단계부터 배포 때까지의 모든 단계를 자동화를 통해서 좀 더 효율적이고 빠르게 사용자에게 빈번히 배포할 수 있는 것을 말한다.

CI (Continuous Integration)

CI (Continuous Integration)는 지속적인 통합이라는 의미이다.

애플리케이션의 버그 수정이나 새로운 코드 변경이 주기적으로 빌드 및 테스트되면서 공유되는 레파지토리에 통합(merge)되는 것을 의미한다.

CD (Continuous Delivery)

CD는 Continuous Delivery, 지속적인 제공이라는 의미와 Continuous Deployment, 지속적인 배포라는 의미가 있다.

CI에서 Bulid 되고 Test 된 후에, 문제가 없는지 수정할만한 것들이 없는지 검증을 한다.
그 후에 "이제 사용자들에게 서비스를 제공해도 되겠다!"라고 정해져서 배포를 수동적으로 진행하는 것이 Continuous Delivery, 지속적인 제공이다.
또한, 위와 같이 배포할 준비가 되자마자 자동화를 통하여 배포를 진행하는 것을 Continuous Deployment, 지속적인 배포이다.


Github Action 개념

💭 Workflow

하나 이상의 Job으로 구성되고, Event에 의해 트리거될 수 있는 자동화된 프로세스이다.
파일은 YAML으로 작성되고 .github/workflows 폴더 아래에 저장된다.

Github에게 YAML 파일로 정의한 자동화 동작을 전달하면, Github Actions는 해당 파일을 기반으로 그대로 실행시킨다.

💭 Event

Workflow를 Trigger(실행)하는 특정 활동이나 규칙이다.

  • branch로 Push
  • branch로 Pull Request
  • 특정 시간대에 반복

💭 Job

Job은 여러 Step으로 구성되고, 단일 가상 환경에서 실행된다. 다른 Job에 의존 관계를 가질 수도 있고, 독립적으로 병렬로 실행될 수도 있다.

💭 Step

Job 안에서 순차적으로 실행되는 프로세스 단위이다. step에서 명령을 내리거나, action을 실행할 수 있다.

💭 Action

Workflow의 가장 작은 단위로, job을 만들기 위해 step들을 연결할 수 있다.

💭 Runner

Gitbub Action Runner 어플리케이션이 설치된 머신으로, Workflow가 실행될 인스턴스이다.


Github Action 설정

Github Repo에서 Actions 페이지에 들어간다.

set up a workflow yourself 를 클릭하면 간단한 workflow 생성할 수 있다.


Docker hub에 자동 업로드

깃허브에 push, pull_request 를 할 때, 자동으로 Docker image를 build해서 docker hub에 push 할 수 있도록 설정을 해보자.

먼저, 프로젝트에 디렉토리를 생성한다.

mkdir -p .github/workflows

.github/workflows/docker-image.yml

name: Build and Push Docker Image

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

jobs:
  build-and-push-image:
    runs-on: ubuntu-latest

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

      - 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
        id: docker_build
        uses: docker/build-push-action@v2
        with:
          push: true
          tags: ladiolus/pick-up-web:latest

💭 on

action이 수행될 조건을 정의한다.
PR을 merge하거나, main branch에 push하면 해당 action이 trigger된다.

💭 job

pipeline 을 구성하는 부분이다.

actions/checkout@v2는 github action으로 정의된 모듈로, 현재 github repository의 소스를 내려받는 기능이다.

Set up Docker Buildx는 builder driver나 platform 등을 세팅하는 부분이다.

Login to DockerHub는 docker hub에 접근하기 위해서 id와 password를 지정하는 부분이다. 이를 위해서 github repository의 settings로 들어가서 secrets >> Actions 에서 action의 secret을 만들어야 한다.

docker hub에 접속할 id와 password에 대한 secret을 만들고 이를 github action에서 ${{ secrets.DOCKERHUB_USERNAME }}와 같이 변수로 가져다 쓰는 방식이다.

Build and push는 docker image를 build하고 push하는 부분이다. tags로 이미지 name과 tag를 설정한다. Dockerfile의 위치 및 파일명은 file키로 변경할 수 있다. 아무런 지정을 하지 않으면, 프로젝트 디렉토리에 있는 Dockerfile을 찾는다.


🧸💗 참고 블로그

profile
작전명 청춘 💫

0개의 댓글