Skip to content

[feat] config server CI/CD #1

[feat] config server CI/CD

[feat] config server CI/CD #1

name: Deploy Config Server
on:
push:
branches: [ "main" ]
paths:
- 'config-server/**' # config-server 폴더가 바뀔 때만 실행
- '.github/workflows/deploy-config-server.yaml'
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
# 1. 소스 코드 체크아웃
- name: Checkout code
uses: actions/checkout@v3
# 2. Docker Hub 로그인
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
# 3. 이미지 빌드 및 푸시
- name: Build and Push Docker Image
uses: docker/build-push-action@v4
with:
context: ./config-server
file: ./config-server/Dockerfile
push: true
tags: |
${{ secrets.DOCKER_USERNAME }}/config-server:latest
${{ secrets.DOCKER_USERNAME }}/config-server:${{ github.sha }}
# 4. Helm 차트 파일을 서버로 전송 (SCP)
- name: Copy Chart files to Server
uses: appleboy/scp-action@master
with:
host: ${{ secrets.K8S_HOST }}
username: ${{ secrets.K8S_USERNAME }}
key: ${{ secrets.K8S_PRIVATE_KEY }}
port: ${{ secrets.K8S_PORT }}
source: "config-server/Chart"
target: "~/deploy-temp" # 서버의 홈 디렉토리 밑 deploy-temp로 복사
strip_components: 0 # 폴더 구조 유지
# 5. SSH로 접속해서 Helm 배포 실행
- name: Deploy via SSH
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.K8S_HOST }}
username: ${{ secrets.K8S_USERNAME }}
key: ${{ secrets.K8S_PRIVATE_KEY }}
port: ${{ secrets.K8S_PORT }}
script: |
echo "=== Deploying Config Server ==="
# 1. 이미지 태그 설정 (git sha 사용)
IMAGE_TAG=${{ github.sha }}
# 2. Helm Upgrade 실행
# -n cssh: 네임스페이스 지정
# --set image.tag: 방금 빌드한 이미지 태그 주입
# --install: 없으면 설치, 있으면 업그레이드
helm upgrade --install containerssh-config-server ~/deploy-temp/config-server/Chart \
--namespace cssh \
--create-namespace \
--set image.repository=${{ secrets.DOCKER_USERNAME }}/config-server \
--set image.tag=$IMAGE_TAG
echo "=== Deployment Finished ==="