Docker-compose를 위한 CI-CD

UICHEOL_HWANG·2024년 3월 5일

Docker

목록 보기
4/5

퓨전합

지속적인 통합 / 무중단 배포

반갑습니다

오늘은 저를 간간히 짜증나게 했던 CI-CD 부분을 오류 없게 진행시키기 위한 정리를 하겠습니다

우선 간단하게 CI는 무엇이냐

CI

  • 언제나 지속적 통합을 의미하며, 지속적 통합은 코드 변경 사항을 다시 공유 분기 또는 "트렁크"로 더 빈번하게 병합하는 것을 용이하게 하는 개발자용 자동화 프로세스입니다

네 이론 잘 봤구요 간단히 얘기해서 통합 전 테스트 코드 및 반복적인 코드 결합으로 배포 전 문제가 있는지 없는지 확인하는 작업 입니다.


아닐수도 있습니다.. (제 생각)

  • 순서
  1. 로컬에서 깃헙으로 연결하기 전에 리포지토리 생성 하구요

  2. 클론을 합니다

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

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

CI main 디렉션

  1. 프로필 -> settings

  2. 개발자 구간을 들어갑니다

  3. 토큰을 발급합니다

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

    workflow , write,delete 부분

  5. 그럼 이제 레포지토리 -> settings에 들어가 하기 내용에 맞게 설정합니다

  • actions에서 secrets.{{ 넣을내용 }} 으로 맞출거기 때문에 Name칸을 잘 지정해야 합니다.

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

  • set up a workflow yourself-> 칸을 클릭해서 새로운 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

CD가 무엇이냐?
무중단 배포입니다

기존에 깃헙에 올리고 ... 다시 클라우드 접속해서 머시기 저시기... 아~ 개선하기 정말 불편하다 싶을 때 그냥 푸시만으로도 바로 배포 사이트에 적용시킬 수 있게 나온 기능이라고 생각하시면 쉽습니다
아닐수도

자 그 전에, 내 클라우드 인스턴스에 SSH키를 등록해야겠죠?

  1. 로컬에서 SSH-KEY를 만든다
 ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  1. 인스턴스 내 ssh-key 매핑을 해준다
  • 상기 내용대로 만들면

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

  • 키페어 이름을 지어주고 앞서 만든 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

이 부분은 본인들의 클라우드 내 파일 디렉토리에 맞게 변경해주세요 안그러면 삽질합니다.

  • 결과 사진

이상입니다.

profile
개발 취미로 하는 세일즈맨

0개의 댓글