✅ CI/CD란?
Continuous Integraion, Continuous Deployment의 약자이다. 애플리케이션을 작성하다보면 지속적으로 코드를 변경하게 되는데, 이 과정에서 매번 새로 코드를 빌드하고 테스트하고 배포하는 반복 작업이 일어나게 된다. 알다싶이.. 개발자는 반복 작업을 아주 싫어한다! 앞서 말한 과정들을 자동화 하게 되는데, 그 것이 CI/CD이다. 즉, 테스트(Test), 통합(Merge/Integration), 배포(Deploy)의 과정을 자동화하는 것을 의미한다.
💡 CI/CD는 코드를 수정할 때마다 테스트, 통합, 빌드를 자동화하는 것이다.
🤔CI/CD는 어떤 과정으로 이루어질까?
일반적으로 아래와 같은 과정을 거친다. 특정 기능을 개발하여 commit/push가 일어나면, 자동으로 코드를 테스트하고(테스트 코드를 작성한 경우), 빌드한 뒤에 배포한다. 사람이 추가 작업을 할 필요 없이 자동적으로 서버에 최신 코드가 반영되는 것!
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의 구성 방식은 다양하지만 일반적으로 아래와 같은 흐름을 가진다.
- 코드 작성, Commit
- GitHub Push
- Push를 감지(Event Trigger) → 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을 클릭해 들어가보면, 실행 내역을 확인할 수 있다.
'cloud > CICD' 카테고리의 다른 글
Error: /gradlew permission denied 문제 해결 (1) | 2025.04.16 |
---|---|
Github Actions를 이용한 CI/CD에서 t2.micro 메모리 부족 문제 (0) | 2025.04.16 |
Github Actions를 활용한 SpringBoot CI/CD 실습 (0) | 2025.04.15 |