Skip to content

📝docs : Create cd.yml #1

📝docs : Create cd.yml

📝docs : Create cd.yml #1

Workflow file for this run

name: Backend CI/CD with Gradle
on:
workflow_dispatch:
inputs:
service:
description: 'Service to deploy. Default is all \n options : \n - api-gateway \n - noti-service \n - user-service \n - weather-service \n - all'
required: true
default: 'all'
push:
branches:
- cicd/#61
- prod
jobs:
build:
runs-on: ubuntu-latest
#Checkout : 코드 가져오기
steps:
- name: Checkout
uses: actions/checkout@v3
#Setting JDK
- name: Set up JDK 17
uses: actions/setup-java@v2
with:
java-version: '17'
distribution: 'temurin'
#gradlew chmod
- name: Grant execute permission for gradlew
run: |
chmod +x ./apiGateway-service/gradlew
chmod +x ./config-service/gradlew
chmod +x ./Eureka/gradlew
chmod +x ./noti-service/gradlew
chmod +x ./user-service/gradlew
chmod +x ./weather-service/gradlew
# DockerHub Login
- name: Docker Hub Login
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
#Config-Service Build & Docker Push
- name: Build with Gradle - config
run: |
cd config-service
./gradlew clean build -x test
docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/waither-config .
docker push ${{ secrets.DOCKERHUB_USERNAME }}/waither-config
env:
CONFIG_GIT_URI: ${{ secrets.CONFIG_GIT_URI }}
CONFIG_PASSPHRASE: ${{ secrets.CONFIG_PASSPHRASE }}
CONFIG_PRIVATE_KEY: ${{ secrets.CONFIG_PRIVATE_KEY }}
#Config-Service Run
- name: Run config-service
run: |
./gradlew bootRun &
cd ..
#Wait 5 sec
- name: Wait for config-service to start
run: sleep 5
#apiGateway-Service Build & Docker Push
- name: Build with Gradle - apiGateway
run: |
cd apiGateway-service
./gradlew clean build -x test
docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/waither-gateway .
docker push ${{ secrets.DOCKERHUB_USERNAME }}/waither-gateway
cd ..
#Eureka Build & Docker Push
- name: Build with Gradle - Eureka
run: |
cd Eureka
./gradlew clean build -x test
docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/waither-eureka .
docker push ${{ secrets.DOCKERHUB_USERNAME }}/waither-eureka
cd ..
#Noti-Service Build & Docker Push
- name: Build with Gradle - noti-service
run: |
cd noti-service
./gradlew clean build -x test
docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/waither-noti .
docker push ${{ secrets.DOCKERHUB_USERNAME }}/waither-noti
cd ..
#User-Service Build & Docker Push
- name: Build with Gradle - user-service
run: |
cd user-service
./gradlew clean build -x test
docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/waither-user .
docker push ${{ secrets.DOCKERHUB_USERNAME }}/waither-user
cd ..
#Weather-Service Build & Docker Push
- name: Build with Gradle - weather-service
run: |
cd weather-service
./gradlew clean build -x test
docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/waither-weather .
docker push ${{ secrets.DOCKERHUB_USERNAME }}/waither-weather
cd ..
deploy:
name : Connect to EC2 and re-run container
needs : build
runs-on : ubuntu-latest
steps:
- name: Deploy to Server
uses: appleboy/[email protected]
env:
SERVICE_NAME: ${{ github.event.inputs.service }}
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
password: ${{ secrets.EC2_PASSWORD }}
port: ${{ secrets.EC2_SSH_PORT }}
timeout: 60s
script: |
export CONFIG_GIT_URI = ${{ secrets.DOCKERHUB_IMAGENAME }}
export CONFIG_PASSPHRASE = ${{ secrets.CONFIG_PASSPHRASE }}
export CONFIG_PRIVATE_KEY = ${{ secrets.CONFIG_PRIVATE_KEY }}
bash /home/docker_init.sh
bash /home/common.sh
bash /home/deploy.sh "${SERVICE_NAME}"