본문 바로가기
cloud/CICD

CI/CD란? Github Actions 실습해보기

by S2채닝S2 2025. 4. 9.

CI/CD란?

Continuous Integraion, Continuous Deployment의 약자이다. 애플리케이션을 작성하다보면 지속적으로 코드를 변경하게 되는데, 이 과정에서 매번 새로 코드를 빌드하고 테스트하고 배포하는 반복 작업이 일어나게 된다. 알다싶이.. 개발자는 반복 작업을 아주 싫어한다! 앞서 말한 과정들을 자동화 하게 되는데, 그 것이 CI/CD이다. 즉, 테스트(Test), 통합(Merge/Integration), 배포(Deploy)의 과정을 자동화하는 것을 의미한다.

💡 CI/CD는 코드를 수정할 때마다 테스트, 통합, 빌드를 자동화하는 것이다.

🤔CI/CD는 어떤 과정으로 이루어질까?

일반적으로 아래와 같은 과정을 거친다. 특정 기능을 개발하여 commit/push가 일어나면, 자동으로 코드를 테스트하고(테스트 코드를 작성한 경우), 빌드한 뒤에 배포한다. 사람이 추가 작업을 할 필요 없이 자동적으로 서버에 최신 코드가 반영되는 것!

CI/CD가 이루어지는 과정

CI/CD는 커밋 → 빌드 → 테스트 → 배포의 과정을 거친다

🛠️ CI/CD 도구

CI/CD 를 구축할 때 사용할 수 있는 도구들은 여러 가지가 있다.

  • Github Actions
  • Jenkins
  • Circle CI
  • Travis CI
  • etc

현업에서는 Github Actions, Jenkins가 많이 쓰인다. Github Actions의 장점은 CI/CD를 위한 별도의 서버가 필요 없고, CI/CD가 yaml 파일로 관리되어 구축하기 쉽다는 장점이 있다. 그러나, Active한 서버에 즉시 반영되기 때문에 서버의 부담이 크다는 단점이 있다. Jenkins는 별도의 서버가 필요하며, 호스팅을 1 부터 10까지 설정하고 관리해야 한다. 따라서 유연하고 빠르지만, 구축에 많은 자원이 필요하다.

🌱주니어 개발자(나)는 개인 프로젝트용, 빠른 설정과 작은 비용으로 CI/CD를 구축하고 싶다! 
👉Github Actions를 사용

🐈‍⬛ Github Actions

CI/CD의 구성 방식은 다양하지만 일반적으로 아래와 같은 흐름을 가진다.

  1. 코드 작성, Commit
  2. GitHub Push
  3. Push를 감지(Event Trigger) → Github Actions에 작성한 로직이 실행(빌드/테스트/배포)
  4. 서버에서 배포된 최신 코드로 서버를 재실행

Github Actions 일반적인 흐름

🎯실습해보기

Github Actions를 직접 구축하여, Hello World를 찍어보자!

    1. 원하는 폴더에 빈 프로젝트를 생성

       - 나는 InteliJ에서 New → Project Empty Project 해줬다.

 

    2. .github/workflows/deploy.yml 만들기

        - 프로젝트 최상단에 `.github` 폴더를 만들고

        - 그 폴더 안에 `workflows` 폴더를 생성

        - workflows 폴더 안에 yml 파일을 만들어준다.

        - worlflows 폴더 안의 yml 파일이 github actions를 관리하는 파일이다.

 

    3. yml 파일 작성하기

        - workflows 안에 작성된 yml 파일들을 하나의 actioin, workflow 라고 한다.

        - worlflow는 GitHub Actions 실행 시점(Event Trigger), 작업(Job), 작업에 대한 단계(step)로 구성된다.

        - Actions를 실행한 결과는 Github Repository의 `Actions` 탭에서 확인할 수 있다.

 

명령어 설명
name 하나의 yml 파일, 즉 workflow를 나타내는 이름
on workflow를 실행시킬 시점
jobs workflow가 실행할 작업.
하나의 workflow는 한개 이상의 job으로 구성되며, 각 작업은 병렬적으로 수행됨
즉, 완료 순서를 보장하지 않음
runs-on workflow를 실행할 운영체제를 설정한다. 
steps 특정 작업을 실행하는 가장 작은 단위, 작업에 대한 단계
run 해당 step에서 실행시킬 명령어. runs-on에서 설정한 운영체제에 맞는 명령어를 작성해야 한다.
`|`를 사용하면 여러 개의 명령어를 작성할 수 있다.
$ GitHub Actions에 저장된 변수를 사용하는 연산자. 
- $GITHUB_SHA: 해당 workflow가 실행된 commit의 ID 값
- $GITHUB_REPOSITORY: 해당 workflow가 실행된 Repository 이름

🖥️ 코드

실제로 yml 파일을 작성해보자! 주석을 통해 각각의 의미를 볼 수 있다.

# 아래의 action들을 하나의 workflow라고 한다.
name: Github Actions 실행시켜 보기 # workflow의 이름: github repository - actions에 나와있음

# action 을 실행시킬 시점: main 브랜치에 push 되었을 때 - event 라고 부른다.
# Event: 실행되는 시점을 설정
# main 브랜치에 push 되었을 때 아래 workflow를 실행하겠다.
on:
  push:
    branches:
      - main

# 하나의 workflow는 한 개 이상의 job으로 구성됨 - 여러 개의 job으로 구성될 수 있음
# 여러 job은 기본적으로 '병렬적으로' 수행된다.
jobs:
  My-Deploy-Job: # job 을 식별하기 위한 이름(id)
    runs-on: ubuntu-latest # runs-on: workflow 를 실행할 운영체제 선택 - 최신 ubuntu

    # Step: 특정 작업을 수행하는 가장 작은 단위
    # Job은 여러 Step들로 구성되어 있다.
    steps:
      - name: Hello World 찍기 # 해당 Step의 이름
        run: echo "Hello World" # run: 실행시킬 명령어 (운영체제와 맞는 명령어를 적는다: ubuntu-Linux)

      - name: 여러 명령어 문장 작성하기 # '|' 이용하여 작성
        run: | 
          echo "Good"
          echo "Morning"

      # GITHUB_SHA:해당 workflow가 실행된 commit의 ID 값
      # GITHUB_REPOSITORY: github repository 이름
      - name: Github Actions 자체에 저장되어 있는 변수 사용해보기
        run: |
          echo $GITHUB_SHA
          echo $GITHUB_REPOSITORY

      # github repository - settings - Actions secrets and variables 에서 비밀 값 설정
      # 비밀 키를 지정하여 변수에 저장한 경우, echo로 출력을 한다고 해도 값이 보이지 않는다.
      - name: 아무한테 노출되면 안 되는 값
        run: |
          echo ${{ secrets.MY_SECRET }} 
          echo ${{ secrets.MY_NAME }}

🛠️ 작업 실행 확인해보기

작업이 제대로 실행되었는지 확인하려면, Github Repository → Actions 탭을 확인하면 된다.

Actions 탭을 들어가면 workflow가 실행된 commit의 이름과 workflow 이름을 확인할 수 있다.

실행된 Action을 클릭해 들어가면, job의 이름을 확인할 수 있다. yml에서 설정한 My-Deploy-Job이 보인다.

Job을 클릭해 들어가보면, 실행 내역을 확인할 수 있다.

최근댓글

최근글

skin by © 2024 ttuttak