Fix: gateway 에 Discovery Server 등록 #27
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Deploy JPetStore6-microservices with prod environment | |
| on: | |
| push: | |
| branches: [ 'main' ] | |
| jobs: | |
| deploy: | |
| name: Build and Deploy changed services | |
| runs-on: ubuntu-latest | |
| environment: prod | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v3 | |
| with: | |
| fetch-depth: 0 | |
| - name: Login to Docker Hub | |
| uses: docker/login-action@v3 | |
| with: | |
| username: ${{ secrets.DOCKER_USERNAME }} | |
| password: ${{ secrets.DOCKER_TOKEN }} | |
| - name: Detect changed modules | |
| id: detect | |
| run: | | |
| changed=$(git diff --name-only ${{ github.event.before }} ${{ github.sha }} | awk -F/ '{print $1}' | sort -u) | |
| modules="" | |
| for d in $changed; do | |
| case "$d" in | |
| AccountService|CartService|CatalogService|OrderService|GatewayService|DiscoveryServer) | |
| modules="$modules $d";; | |
| CommonLibrary) | |
| modules="AccountService CartService CatalogService OrderService";; | |
| docker) | |
| modules="AccountService CartService CatalogService OrderService DiscoveryServer GatewayService";; | |
| esac | |
| done | |
| modules=$(echo $modules | xargs -n1 | sort -u | xargs) | |
| echo "modules=$modules" >> $GITHUB_OUTPUT | |
| services=$(echo $modules | sed 's/AccountService/account-service/g' | sed 's/CartService/cart-service/g' | sed 's/CatalogService/catalog-service/g' | sed 's/OrderService/order-service/g' | sed 's/GatewayService/gateway-service/g' | sed 's/DiscoveryServer/discovery-server/g') | |
| echo "services=$services" >> $GITHUB_OUTPUT | |
| - name: Build and push docker images | |
| if: steps.detect.outputs.services != '' | |
| run: | | |
| for module in ${{ steps.detect.outputs.modules }}; do | |
| service=$(echo $module | sed 's/AccountService/account-service/g' | sed 's/CartService/cart-service/g' | sed 's/CatalogService/catalog-service/g' | sed 's/OrderService/order-service/g' | sed 's/GatewayService/gateway-service/g' | sed 's/DiscoveryServer/discovery-server/g') | |
| image="${{ secrets.DOCKER_USERNAME }}/$service" | |
| docker build -t $image -f $module/Dockerfile . | |
| docker tag $image:latest $image:${{ github.sha }} | |
| docker push $image:latest | |
| docker push $image:${{ github.sha }} | |
| done | |
| - name: Deploy to server | |
| uses: appleboy/ssh-action@v1.2.2 | |
| with: | |
| host: ${{ secrets.SERVER_IP }} | |
| username: ${{ secrets.SSH_USERNAME }} | |
| key: ${{ secrets.SSH_KEY }} | |
| port: ${{ secrets.SSH_PORT }} | |
| script: | | |
| services="${{ steps.detect.outputs.services }}" | |
| cd ${{ secrets.DEPLOY_PATH }} | |
| git checkout ${{ secrets.DEPLOY_BRANCH }} | |
| git pull origin ${{ secrets.DEPLOY_BRANCH }} | |
| echo "${{ secrets.COMMON_ENV }}" > docker/prod/common.env | |
| echo "${{ secrets.ACCOUNT_SERVICE_ENV }}" > docker/prod/account_service.env | |
| echo "${{ secrets.CART_SERVICE_ENV }}" > docker/prod/cart_service.env | |
| echo "${{ secrets.CATALOG_SERVICE_ENV }}" > docker/prod/catalog_service.env | |
| echo "${{ secrets.ORDER_SERVICE_ENV }}" > docker/prod/order_service.env | |
| if [ -n "$services" ]; then | |
| docker compose -f docker/prod/docker-compose.yml pull $services | |
| docker compose -f docker/prod/docker-compose.yml up -d $services | |
| docker image prune -f | |
| else | |
| echo "No service changes detected" | |
| fi |