Skip to content

๐Ÿ› fix: ๋น„๋กœ๊ทธ์ธ ์‚ฌ์šฉ์ž์˜ ์บ ํผ์Šค ์„ ํƒ ํ›„ ํ™”๋ฉด์ด ์ „ํ™˜๋˜์ง€ ์•Š๋˜ ๋ฌธ์ œ ํ•ด๊ฒฐ #137

๐Ÿ› fix: ๋น„๋กœ๊ทธ์ธ ์‚ฌ์šฉ์ž์˜ ์บ ํผ์Šค ์„ ํƒ ํ›„ ํ™”๋ฉด์ด ์ „ํ™˜๋˜์ง€ ์•Š๋˜ ๋ฌธ์ œ ํ•ด๊ฒฐ

๐Ÿ› fix: ๋น„๋กœ๊ทธ์ธ ์‚ฌ์šฉ์ž์˜ ์บ ํผ์Šค ์„ ํƒ ํ›„ ํ™”๋ฉด์ด ์ „ํ™˜๋˜์ง€ ์•Š๋˜ ๋ฌธ์ œ ํ•ด๊ฒฐ #137

name: CI/CD Pipeline
# main ๋ธŒ๋žœ์น˜์— ๋Œ€ํ•œ Pull request ๋ฐ Merge
on:
push:
branches:
- main
paths-ignore:
- ".github/**"
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
pull-requests: write
steps:
# 1. ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์†Œ์Šค ์ฝ”๋“œ ์ž‘์—… ํ™˜๊ฒฝ์œผ๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ
- name: Checkout Repository
uses: actions/checkout@v4
with:
fetch-depth: 0
# 2. ํ™˜๊ฒฝ๋ณ€์ˆ˜(.env) ํŒŒ์ผ ์ƒ์„ฑ
- name: Set Environment File
run: |
echo "${{ secrets.PROD_ENV }}" > .env
chmod 644 .env
cat .env
# 3. ๋„์ปคํ—ˆ๋ธŒ ๋กœ๊ทธ์ธ
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
# 4. ๋„์ปค ํ—ˆ๋ธŒ์— ์ด๋ฏธ์ง€ ํ‘ธ์‹œ
- name: Push Docker Image
uses: docker/build-push-action@v6
with:
push: true
context: .
tags: ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_IMAGE_NAME }}:latest
# 5. GCP ์ธ์ฆ
- name: Authenticate to GCP
id: 'auth'
uses: 'google-github-actions/auth@v2'
with:
workload_identity_provider: ${{ secrets.WORKLOAD_IDENTITY_PROVIDER }} # ์ƒ์„ฑํ•œ ์›Œํฌ๋กœ๋“œ ์•„์ด๋ดํ‹ฐํ‹ฐ ํ’€์˜ ID
service_account: ${{ secrets.SERVICE_ACCOUNT_EMAIL }} # IAM ์„œ๋น„์Šค ๊ณ„์ •
# 6. GCP Compute Engine SSH๋กœ ๋ฐฐํฌ
- name: Deploy to GCP Compute Engine
id: 'compute-ssh'
uses: 'google-github-actions/ssh-compute@v1'
with:
instance_name: ${{ secrets.GCP_INSTANCE_NAME }}
zone: ${{ secrets.GCP_INSTANCE_ZONE }}
ssh_private_key: ${{ secrets.GCP_SSH_PRIVATE_KEY }}
command: |
mkdir ./${{ github.repository }}
cd ./${{ github.repository }}
ls -al
sudo curl -o docker-compose.yml https://raw.githubusercontent.com/${{ github.repository }}/main/docker-compose.yml
sudo docker-compose down
sudo docker-compose up -d ${{ secrets.DOCKER_IMAGE_NAME }}
sudo docker image prune -a -f
# Example of using the output
- id: 'debug'
run: |-
echo '${{ steps.compute-ssh.outputs.stdout }}'
echo '${{ steps.compute-ssh.outputs.stderr }}'
# 7. Sentry ์„ค์ •
- name: Create Sentry release
uses: getsentry/action-release@v1
env:
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
SENTRY_ORG: ${{ secrets.SENTRY_ORG }}
SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }}
with:
environment: production
inject: true
sourcemaps: './dist'