CI/CD란?
CI는 Continuous Integration(지속적 통합), CD는 Continuous Delivery(지속적 전달)의 줄임말.
- CI : 테스트, 빌드, Dockerizing, 저장소에 전달하는 것까지 프로덕션 환경으로 서비스를 배포할 수 있도록 준비하는 프로세스
- CD : 저장소로 전달된 프로덕션 서비스를 실제 사용자들에게 배포하는 프로세스
작업한 소스 코드를 빌드하고, 저장소에 전달 후 배포까지 하는 과정을 통상적으로 CI/CD라고 부른다.
GitHub Actions
개요
GitHub Actions는 빌드, 테스트 및 배포 파이프라인을 자동화할 수 있는 CI/CD(연속 통합 및 지속적인 업데이트) 플랫폼입니다. 리포지토리에 대한 모든 끌어오기 요청을 빌드 및 테스트하거나 병합된 끌어오기 요청을 프로덕션에 배포하는 워크플로를 만들 수 있습니다.
GitHub Actions은(는) 단순한 DevOps 수준을 넘어 리포지토리에서 다른 이벤트가 발생할 때 워크플로를 실행할 수 있도록 합니다. 예를 들어 누군가가 리포지토리에서 새 이슈를 만들 때마다 워크플로를 실행하여 적절한 레이블을 자동으로 추가할 수 있습니다.
GitHub에서 워크플로를 실행할 Linux, Windows, macOS 가상 머신을 제공하거나, 사용자 고유의 데이터 센터 또는 클라우드 인프라에서 자체 호스트형 실행기를 호스트할 수 있습니다.
-> GitHub Actions는 다양한 이벤트에 대한 워크플로를 자동화하여 CI/CD 및 DevOps 작업을 지원하는 플랫폼입니다.
그냥 이벤트가가 발생할 때 지정된 행위를 실행하도록 설정하는 도구.
예) push 발생!
- ec2서버 접속
- 프로젝트 폴더 이동
- git pull
- 서버 리로드
- 배포 완성!
사용해보기
목표 : GitHub Action으로 EC2 연결하여 제어하기
- GitHub Action을 적용할 레포로 이동
2. Setttings → Secrets and variables → Actions 이동
3. New repository secret 클릭하여 아래 와 같이 저장
- HOST : EC2 퍼블릭 IP
- SSH_PRIVATE_KEY : pem파일 안의 내용 → vi 명령어를 통해 나오는 모든 내용 복붙
- USER : 접속할 유저 (프리티어 기본 ubuntu)
4. Actions → set up a workflow yourself 클릭
5. 아래 코드 작성
on: # 이럴때 실행 해달라
# Triggers the workflow on push or pull request events but only for the main branch
push: # push를 할때
branches: #어떤것이?
- main #main이
# main의 정보에 push될때마다 실행을 해달라
# 실행
jobs:
SSH:
runs-on: ubuntu-22.04 # 본인 우분투 버전 설정
steps:
#- uses: actions/checkout@v3 레파지토리 참고하라
- name: ssh to ec2 # ec2에 접속하라.(필수 아님)
uses: appleboy/ssh-action@master # 접속 제공 코드
with:
key: ${{ secrets.SSH_PRIVATE_KEY }} # 키페어 필요
host: ${{ secrets.HOST }} # ip
username: ${{ secrets.USER }} # 해당 유저 접속
script: | # 실행 할 코드
mkdir "hello_there_$(date +%s)"
→ main브런치에 push가 발생하면 실행하면 ec2에 접속하여 mkdir "hello_there_$(date +%s)" 를 실행
6. 작성 후 commit changes 클릭 후 저장
7. 로컬 환경에서도 git pull 해줘서 GitHub Action 적용
8. 끝~
결과
이렇게 푸쉬를 해주면
workflow에 작성한 것처럼 mkdir 명령어를 통해 폴더가 생성된 것을 볼 수 있다!
workflow에 도커 빌드 스타트 명령어 등을 쓰거나 git pull pm2 restart all 등의 명령어를 쓰면 배포 자동화가 가능하다.
'DevOps' 카테고리의 다른 글
[DevOps] 백엔드 Prod 서버 ASG 기반 롤링 배포 자동화 - Modie (0) | 2025.04.08 |
---|---|
[DevOps] 백엔드 DEV서버 단일 EC2 기반 Blue/Green 배포 자동화 - Modie (0) | 2025.04.07 |
[DevOps] 프로젝트 Dev/Prod 서버 아키텍처 설계 경험 정리 (1) | 2025.04.07 |
블루-그린(Blue/Green) 배포 머리 박치기 (0) | 2024.12.05 |