name: Build & Deploy to K8s on: push: branches: - main - gbpark-node env: REGISTRY: localhost:5000 PROJECT: invyone jobs: build-and-deploy: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Set commit SHA run: echo "SHORT_SHA=$(echo ${{ github.sha }} | cut -c1-7)" >> $GITHUB_ENV # ---- Backend Spring ---- - name: Build backend-spring run: | docker build -t ${{ env.REGISTRY }}/${{ env.PROJECT }}/backend-spring:${{ env.SHORT_SHA }} \ -f docker/deploy/backend-spring.Dockerfile \ backend-spring/ # ---- Frontend ---- - name: Build frontend run: | docker build -t ${{ env.REGISTRY }}/${{ env.PROJECT }}/frontend:${{ env.SHORT_SHA }} \ -f docker/deploy/frontend.Dockerfile \ frontend/ # ---- Push to Registry ---- - name: Push images run: | docker push ${{ env.REGISTRY }}/${{ env.PROJECT }}/backend-spring:${{ env.SHORT_SHA }} docker push ${{ env.REGISTRY }}/${{ env.PROJECT }}/frontend:${{ env.SHORT_SHA }} # latest 태그 docker tag ${{ env.REGISTRY }}/${{ env.PROJECT }}/backend-spring:${{ env.SHORT_SHA }} ${{ env.REGISTRY }}/${{ env.PROJECT }}/backend-spring:latest docker tag ${{ env.REGISTRY }}/${{ env.PROJECT }}/frontend:${{ env.SHORT_SHA }} ${{ env.REGISTRY }}/${{ env.PROJECT }}/frontend:latest docker push ${{ env.REGISTRY }}/${{ env.PROJECT }}/backend-spring:latest docker push ${{ env.REGISTRY }}/${{ env.PROJECT }}/frontend:latest # ---- Deploy to K8s ---- - name: Deploy to Kubernetes run: | # kubectl은 act_runner가 실행되는 호스트에서 접근 가능 export KUBECONFIG=/home/chpark/.kube/config kubectl apply -f k8s/namespace.yaml kubectl apply -f k8s/configmap.yaml kubectl apply -f k8s/pvc.yaml kubectl apply -f k8s/backend-spring.yaml kubectl apply -f k8s/frontend.yaml kubectl apply -f k8s/networkpolicy.yaml # Rolling update with new image tag kubectl set image deployment/backend-spring \ backend-spring=${{ env.REGISTRY }}/${{ env.PROJECT }}/backend-spring:${{ env.SHORT_SHA }} \ -n invyone kubectl set image deployment/frontend \ frontend=${{ env.REGISTRY }}/${{ env.PROJECT }}/frontend:${{ env.SHORT_SHA }} \ -n invyone # Rollout 상태 확인 kubectl rollout status deployment/backend-spring -n invyone --timeout=180s kubectl rollout status deployment/frontend -n invyone --timeout=120s