
반갑습니다
오늘은 저를 간간히 짜증나게 했던 CI-CD 부분을 오류 없게 진행시키기 위한 정리를 하겠습니다
우선 간단하게 CI는 무엇이냐
네 이론 잘 봤구요 간단히 얘기해서 통합 전 테스트 코드 및 반복적인 코드 결합으로 배포 전 문제가 있는지 없는지 확인하는 작업 입니다.

아닐수도 있습니다.. (제 생각)
로컬에서 깃헙으로 연결하기 전에 리포지토리 생성 하구요

클론을 합니다

클론 이후에 작업 파일에서 만들고 싶은 프레임워크 및 작업 내용을 구성합니다
(저는 글의 목적상 FastAPI & Vue.js -> Docker compose화 시켰습니다)

기본적으로 Dockerfile과 메인 실행루트는 docker-compose.yml로 구성하면서 배포를 준비하였습니다.
프로필 -> settings

개발자 구간을 들어갑니다

토큰을 발급합니다

유효기간에 맞게 설정하고 체크가 필요한 부분을 설정합니다

workflow , write,delete 부분
그럼 이제 레포지토리 -> settings에 들어가 하기 내용에 맞게 설정합니다

6.지정이 끝난 후, 리포지토리 -> Actions경로를 들어간다

name: CI-CD & Docker-compose
on:
push:
branches:
- master
jobs:
build:
name: Compose-Up
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
# GHCR에 로그인
- name: Login to GHCR
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.CICD_TOKEN }}
# Docker Compose 실행
- name: Build and Run Docker Compose
run: |
docker-compose up -d --build
우린 간단하고 심플하게 갑니다
yml 양식으로 이루어진 내용으로, 대략적으로 설명하자면
on,push,branches는 github을 어떻게 푸시했냐를 설명 하는 것이고
jobs는 메인으로 어떤 작업을 실행할건지 정의해줍니다 (docker-compose 내 services와 비슷하다고 생각하시면 됩니다)
steps는 어떤 순서로 로직을 짤지 순서를 정하는거고 뭐 아무튼 표현이 직관적이니 어렵다 싶으면 구글링해서 더 찾으시면 됩니다.
그렇게 작성한 후
중요!
git clone https://your github.com
로컬 CLI에서 꼭 clone 해주세여~
그렇게 build 테스트를 진행하면

Compose-up 단에서 테스트를 진행한 내용이 나올겁니다

뭐 대강 이런식으로 되어 있습니다
쉽게 설명하면 깃헙에서는 테스트를 위한 조그마한 가상 컴퓨터를 제공해주는데 거기서 테스팅을 하고 배포를 하는거라 생각하면 쉽습니다.
CD가 무엇이냐?
무중단 배포입니다
기존에 깃헙에 올리고 ... 다시 클라우드 접속해서 머시기 저시기... 아~ 개선하기 정말 불편하다 싶을 때 그냥 푸시만으로도 바로 배포 사이트에 적용시킬 수 있게 나온 기능이라고 생각하시면 쉽습니다
아닐수도
자 그 전에, 내 클라우드 인스턴스에 SSH키를 등록해야겠죠?
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
상기 내용대로 만들면

뭐 이렇게 됩니다, 그에 따라서,


키페어 이름을 지어주고 앞서 만든 rsa_key내 rsa.pub이라는 파일이 있을거에요 그걸 찾아보기 탭에 넣어주시면 ssh-key가 생성됩니다

그럼 거기에 따라서, 새로운 ec2 인스턴스 생성을 클릭해주고, 옵션에 키페어 -> 우리가 만들어준 새로운 SSH-key를 입력해주면 됩니다
최종 workflow main.yml 코드
name: CI-CD & Docker-compose
on:
push:
branches:
- master
jobs:
build:
name: Compose-Up
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
# GHCR에 로그인
- name: Login to GHCR
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.CICD_TOKEN }}
# Docker Compose 실행
- name: Build and Run Docker Compose
run: |
docker-compose up -d --build
deploy:
needs: build
name: Deploy
runs-on: [self-hosted, label-go]
steps:
- name: SSH and Deploy to EC2
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_SSH_KEY }}
script: |
cd /home/ubuntu/github-actions-auto
git pull
if docker-compose ps | grep -q "Up"; then
docker-compose down
fi
docker-compose up -d --build
이렇게 완성하면 됩니다
cd /home/ubuntu/github-actions-auto
git pull
if docker-compose ps | grep -q "Up"; then
docker-compose down
fi
docker-compose up -d --build
이 부분은 본인들의 클라우드 내 파일 디렉토리에 맞게 변경해주세요 안그러면 삽질합니다.

이상입니다.